C# 从进程ID获取打开的xlsx文件名

C# 从进程ID获取打开的xlsx文件名,c#,excel,file,C#,Excel,File,我正在尝试构建一个表单,允许用户选择以前打开的Excel实例 从这里,我想提取与该打开实例关联的.xlsx文件的名称 我想我必须使用COM才能把它弄出来,但我还没有找到一种方法 我想的代码如下: Process[] openApplications = Process.GetProcessesByName("excel"); foreach(Process p in openApplications) { ///Find the associated .xlsx path and fi

我正在尝试构建一个表单,允许用户选择以前打开的Excel实例

从这里,我想提取与该打开实例关联的
.xlsx
文件的名称

我想我必须使用COM才能把它弄出来,但我还没有找到一种方法

我想的代码如下:

Process[] openApplications = Process.GetProcessesByName("excel");

foreach(Process p in openApplications)
{
    ///Find the associated .xlsx path and file
    ///...Maybe from the handle id?
}

任何帮助都将不胜感激

您必须使用
ActiveWorkbook
属性。 请参阅


首先,您必须添加对的引用以获取正在运行的MS Excel应用程序的实例:

var application = (Application)Marshal.GetActiveObject("Excel.Application");
然后可以通过和属性获取文件的完整路径

Console.WriteLine(application.ActiveWorkbook.FullName);
如果打开了多个MS Excel实例,则可以通过属性对其进行迭代:

foreach (Workbook workbook in application.Workbooks)
{
    // do something with workbook.FullName
}

openApplications中的每个流程对象是否都有.ActiveWorkbook.Name?我没有看到。我使用的是VS2017-这个答案似乎不起作用。p、 ActiveWorkbook.Name不是有效的选择当我执行var应用程序=。。。另外,如果有多个打开的工作簿,我该怎么办?我试着让用户选择活动的…@TimC,这不是一个关于正在发生的事情的非常详细的描述。确保使用与MS Excel目标版本对应的版本的对象库;尝试在网络中搜索异常消息中描述的问题;如果没有帮助,你可以问一个新问题,但请包含所有相关信息。如果上述问题解决了,请告诉我,以便我可以将此问题标记为重复问题:D
foreach (Workbook workbook in application.Workbooks)
{
    // do something with workbook.FullName
}