Excelスコープ内でinvokecodeによって操作したい

invoke codeでExcelを操作する場合、コードでExcelファイルを開くところから始めている参考文献が多いです。

Excelプロセススコープ、アプリケーションスコープでExcelファイルを開き、その中で可能な限りuipathのアクテビティ側で処理させ、複雑な処理をinvokecodeで実装したいのですが、既に開いているファイルをinvokecodeで操作する方法はございますでしょうか。

Excelアプリケーションスコープで開いたファイルを使うための具体的なコードが知りたいです。

こんにちは

Interop.Excelを使って操作したいということでしょうか?
そうであればMarshal.BindToMonikerメソッドを使用すれば可能です。

Dim  book  As Microsoft.Office.Interop.Excel.Workbook
Dim  sheet As Microsoft.Office.Interop.Excel.Worksheet
Dim  cell As Microsoft.Office.Interop.Excel.Range
book= CType(System.Runtime.InteropServices.Marshal.BindToMoniker(filePath),Microsoft.Office.Interop.Excel.Workbook)
sheet = CType(book.Sheets(1),Microsoft.Office.Interop.Excel.Worksheet)
cell = CType(sheet.Cells.Cells(1, 1),Microsoft.Office.Interop.Excel.Range)
cell.Value = Now.ToString("HH:mm:ss")
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(book)

注:実際には適宜例外処理を追加してください。

サンプル
Sample20241223-1.zip (8.9 KB)

いつも大変お世話になっております。

やりたいことなのですが、
With sheet
.Columns(“A:F”).Hide()
.Columns(“I”).Hide()
End With
のように列を非表示にしたいのですが、
遅延バインディングは使用できない、とエラーが起きてしまいます。
お手数ですが、どのようにすればよろしいでしょうか?

今どのように実装していますか?(上記ですか?上記はVBAでは?)

Dim book As Microsoft.Office.Interop.Excel.Workbook
Dim sheet As Microsoft.Office.Interop.Excel.Worksheet
book= CType(System.Runtime.InteropServices.Marshal.BindToMoniker(filename),Microsoft.Office.Interop.Excel.Workbook)
sheet = CType(book.Sheets(1),Microsoft.Office.Interop.Excel.Worksheet)
With sheet
.Columns(“A:F”).Hide()
.Columns(“I”).Hide()
End With
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(book)

アクティビティの構成はYoichiさんと同じで、invokecodeに上記のように書きました。vbaだからダメということですかね。

VB.netで記述してください。

Dim  book  As Microsoft.Office.Interop.Excel.Workbook
Dim  sheet As Microsoft.Office.Interop.Excel.Worksheet
Dim  r As Microsoft.Office.Interop.Excel.Range
book= CType(System.Runtime.InteropServices.Marshal.BindToMoniker(filePath),Microsoft.Office.Interop.Excel.Workbook)
sheet = CType(book.Sheets(1),Microsoft.Office.Interop.Excel.Worksheet)
r = CType(sheet.Range(sheet.Cells(3,3),sheet.Cells(3,5)),Microsoft.Office.Interop.Excel.Range)
r.EntireColumn.Hidden=True
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(book)

実際のコードには例外処理を入れてください。

ありがとうございます。

度々申し訳ないのですが、invokecodeの後に「Excel ファイルを保存」などのアクティビティを入れたいのですが、「Excel ファイルを保存: COM object that has been separated from its underlying RCW cannot be used.」となってしまいます。

どのようにすればよろしいでしょうか。

直接の原因はInvokeCode内でCOMオブジェクトを破棄しているからかと思います。

System.Runtime.InteropServices.Marshal.FinalReleaseComObject(book)

の部分を削除すれば動作するとは思いますが、COMオブジェクトの破棄を自身で確実にコントロールするにはUseExcelFileまたはExcelApplicationScopeとは分離して呼び出した方が良いようにも思えます。

いつも詳しく教えていただきありがとうございます。
分離するやりかたで作ろうと思います。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.