C# 使用 Interop 写入打开的 Excel 文件

Cra*_*Key 1 c# excel interop office-interop

我对此感到非常困难,但我需要能够使用 Interop 连接到打开的 excel 文件,然后写入该文件。

该文件由外部进程打开,然后此应用程序稍后进入以写入工作簿。我可以让它打开一个文件并写入活动工作簿。但我找不到连接到以前的工作簿和写作的方法。

我一直在使用,Marshal.GetActiveObject但我很快就会在打开多个文件的计算机上运行该应用程序,并且需要写入一个很可能不是活动文件的文件。

Sla*_*lai 5

更新 :

System.Runtime.InteropServices.Marshal.BindToMoniker 可用于访问在 Excel 中打开的文件,或者在尚未打开的情况下打开它:

var wb = Marshal.BindToMoniker(@"C:\x.xlsx") as Microsoft.Office.Interop.Excel.Workbook; 
Run Code Online (Sandbox Code Playgroud)

https://blogs.msdn.microsoft.com/eric_carter/2009/03/12/attaching-to-an-already-running-office-application-from-your-application-using-getactiveobject-or-bindtomoniker/


旧答案:

GetObject可以参考使用Microsoft.VisualBasic(如果需要,它还可以打开文件):

object o = Microsoft.VisualBasic.Interaction.GetObject(@"C:\x.xlsx", "Excel.Application");
var wb = o as Microsoft.Office.Interop.Excel.Workbook; 
if (wb != null) 
{ 
    Microsoft.Office.Interop.Excel.Application xlApp = wb.Application;
    // your code 
}
Run Code Online (Sandbox Code Playgroud)

Microsoft.VisualBasic通过检查GetObject源代码可以避免引用https://github.com/Microsoft/referencesource/blob/master/Microsoft.VisualBasic/runtime/msvbalib/Interaction.vb#L1039