1

使用 Microsoft.Office.Interop.Excel 对象从 C# 处理 Excel 时遇到问题。

当我尝试打开一个文件以写入我已经在 Excel 中打开的文件时,问题就出现了。这最终会出错,然后在后台运行一个 Excel 实例。

在打开文件之前如何判断文件已经打开?

此外,处理 Excel 对象并因此终止 Excel 进程的约定是什么?

4

3 回答 3

2

以下文章提供了一种检查文件是否已打开的好方法:

有没有办法检查文件是否正在使用?

这篇文章讲的是杀掉excel进程:

杀死进程 Excel C#

希望这些有帮助

于 2012-07-25T11:43:27.363 回答
0

您好,您必须在处理结束时处理您的 excel 对象(工作簿、应用程序类、使用范围、工作表)

        workbook.Close(false, workbookPath, null);
        applicationClass.Quit();

        while (Marshal.ReleaseComObject(usedRange) > 0)
        { }
        while (Marshal.ReleaseComObject(worksheet) > 0)
        { }
        while (Marshal.ReleaseComObject(workbook) > 0)
        { }
        while (Marshal.ReleaseComObject(applicationClass) > 0)
        { }
于 2012-07-25T11:53:57.393 回答
0

要打开已打开的 - 更多信息,只需在 MSDN 上键入 Workbooks.Open。这是保存示例,您只需覆盖(仍然打开)而不查询:o), xlSharedxlLocalSessionChanges是关键字。

            _xlsWorkbook.SaveAs(
                 targetFileName                                                     /* Filename */
                ,Excel_ForMissing.XlFileFormat.xlExcel8                             /* FileFormat */
                ,Missing.Value                                                      /* Password */
                ,Missing.Value                                                      /* WriteResPassword */
                ,Missing.Value                                                      /* ReadOnlyRecommended */
                ,Missing.Value                                                      /* CreateBackup */
                ,Excel_ForMissing.XlSaveAsAccessMode.xlShared                       /* AccessMode */
                ,Excel_ForMissing.XlSaveConflictResolution.xlLocalSessionChanges    /* ConflictResolution */
                ,false                                                       /* AddToMru */
                ,Missing.Value                                                       /* TextCodepage */
                ,Missing.Value                                                       /* TextVisualLayout */
                ,true                                                       /* Local */
            );
于 2014-06-23T08:43:21.297 回答