无法使用C#保存Excel文件

我试图修改和保存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'的文件已经存在于这个位置,你想replace它吗?

所以我改变了代码:

 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修改为只读”。 如果我点击“取消”button,我收到上面的exception“exception来自HRESULT:0x800A03EC”

我也试过了:

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

从那我收到相同的错误,与上述文件显示修改。

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

检查您是否已经有一个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应用程序中打开。 在我的代码中,我没有closures某些条件的excel应用程序。 这就是为什么它打开只读权限。 所以我无法在更新后保存该文件。 要用读写方式打开它,您必须先closures该文件。 之后,您可以打开它,轻松地在文件上执行读取和写入操作。

您可以使用以下代码closures并查看已经打开的所有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; 

此问题是为向后兼容的工作表(.xls)而不是.xlsx。

为了允许工作表在2007年版本中打开,它不能包含超过65k行。 你可以使用ctrl + arrowdown来检查表格中的行数,直到你点击底部。 如果您尝试获取大于该行数的范围,则会产生错误