无法使用C#保存Excel文件

本文关键字:保存 Excel 文件 | 更新日期: 2023-09-27 18:29:14

我正在尝试在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();

我收到这个错误:"名为‘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););

则错误为:"BookExcel1.xlsx正被user_name.open修改为只读"。如果我单击"取消"按钮,我会收到上面的异常,其中包含"HRESULT异常:0x800A03EC"

我也试过:

wb.SaveAs(@"C:'Users'dnyanesh.wagh'Desktop'BookExcel1.xlsx");
wb.Close(true,null,null);

从那以后,我收到了同样的错误,上面的文件显示了修改。

有人能告诉我如何保存修改后的文件吗?

无法使用C#保存Excel文件

检查您是否尚未运行Excel.exe进程。此外,您应该打开工作簿,使其可编辑。

此代码有效:

string txtLocation = Path.GetFullPath(InputFile);
object _missingValue = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Application excel = new   Microsoft.Office.Interop.Excel.Application();
Excel.Workbook theWorkbook = excel.Workbooks.Open(txtLocation,
                                                        _missingValue,
                                                        false,
                                                        _missingValue,
                                                        _missingValue,
                                                        _missingValue,
                                                        true,
                                                        _missingValue,
                                                        _missingValue,
                                                        true,
                                                        _missingValue,
                                                        _missingValue,
                                                        _missingValue);
//refresh and calculate to modify
theWorkbook.RefreshAll();
excel.Calculate();
theWorkbook.Save();
theWorkbook.Close(true);
excel.Quit();

发生这种情况是因为我试图打开的文件已经在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();

在顶部,添加以下代码并参考Microsoft.Office.Interop.Excel

using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

此问题适用于向后兼容的工作表(a.xls),而不是.xlsx.

要允许在office 2007之前的版本中打开工作表,它不能包含超过65k行。您可以检查使用ctrl+向下箭头直到触底。如果你尝试如果范围大于行数,则会产生错误