c#中的Excel处理

本文关键字:处理 Excel 中的 | 更新日期: 2023-09-27 18:11:41

我有一个问题,在excel进程ID杀死我使用excel InterOp

第一种情况,当我打开excel文件时,我的程序正在访问excel中的数据,我打开excel文件的过程与被访问程序的过程是相同的。因此,当我杀死进程ID时,我在使用program时打开的其他excel将被杀死。

第二种情况,如果我不杀死excel进程ID,当我试图使用用户在我的程序访问之前打开的进程时,当我的程序工作时,如果用户关闭excel,我的程序将终止到。

是否有一种方法可以使用新的过程,并且只限制我的工作簿使用,如果其他excel已经打开,我如何让它们通过另一个过程打开?

这是我的代码

        public static void getExceltable()
       {
        Microsoft.Office.Interop.Excel.Application m_app;
        m_app = new Microsoft.Office.Interop.Excel.Application();
        m_app.DisplayAlerts = false;
        object misValue = System.Reflection.Missing.Value;
        string filename = Core.Class1.importPath;
        Workbook workbook=m_app.Workbooks.Open(filename,Type.Missing,
        Type.Missing,Type.Missing, Type.Missing,Type.Missing, Type.Missing,
        Type.Missing,Type.Missing,Type.Missing,Type.Missing
        ,Type.Missing,Type.Missing,Type.Missing, Type.Missing);
        Worksheet sheet = m_app.Sheets[1];
         //// My Excel Process ////
       workbook.Close();
       int id;
       GetWindowThreadProcessId(m_app.Hwnd, out id);
       Process excelProcess = Process.GetProcessById(id);
       m_app.Quit();
       excelProcess.Kill();
       }

c#中的Excel处理

您应该在退出子office进程之前释放与interop关联的每个对象。这太痛苦了,所以我建议你寻找其他解决方案。