无法使用C#保存Excel文件

dny*_*war 5 c# excel save

我正在尝试修改和保存Excel中的数据.使用下面的代码,我正在访问工作表,执行修改,然后保存文件.我无法保存文件.这是我的代码:

Application excel = new Application();
        excel.Visible=true;
        Workbook wb = (Workbook)excel.Workbooks.Open(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx");
        Worksheet ws = (Worksheet)wb.Worksheets[1];
        ws.Cells[1, 1] = "sagar";
        ws.Cells[2, 1] = "sagar";
        ws.Cells[3, 1] = "sagar";
        wb.Save();
        wb.close();
Run Code Online (Sandbox Code Playgroud)

我收到此错误:"名为'BookExcel1.xlsx'的文件已存在于此位置.您要替换它吗?"

所以我将代码更改为:

Workbook wb = (Workbook)excel.Workbooks.Open(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx",0, false, 5, "", "",
            false, XlPlatform.xlWindows, "", true, false,
            0, true, false, false););
Run Code Online (Sandbox Code Playgroud)

然后错误是:"BookExcel1.xlsx被user_name.open修改为只读".如果我单击"取消"按钮,我会收到上面的例外"HRESULT异常:0x800A03EC"

我也尝试过:

wb.SaveAs(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx");
wb.Close(true,null,null);
Run Code Online (Sandbox Code Playgroud)

从那里我收到相同的错误,上面的文件显示修改.

任何人都可以告诉我如何保存文件并进行修改?

dny*_*war 1

发生这种情况是因为我尝试打开的文件已在 Excel 应用程序中打开。在我的代码中,在某些情况下我没有关闭 Excel 应用程序。这就是为什么它以只读权限打开它。所以我更新后无法保存该文件。要以读写方式打开它,您必须首先关闭该文件。之后,您就可以打开它并轻松地对文件进行读写操作。

您可以使用以下代码关闭并查看所有已打开的 Excel 应用程序:

Application excel = (Application)Marshal.GetActiveObject("Excel.Application");
Workbooks wbs = excel.Workbooks;
foreach (Workbook wb in wbs)
{
    Console.WriteLine(wb.Name); // print the name of excel files that are open
    wb.Save();
    wb.Close();
}
excel.Quit();
Run Code Online (Sandbox Code Playgroud)

在顶部添加以下代码并引用Microsoft.Office.Interop.Excel

using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
Run Code Online (Sandbox Code Playgroud)