2013-08-27 96 views
6

我想修改和保存Excel中的数据。使用下面的代码,我正在访问表单,执行修改,然后保存文件。我无法保存该文件。这里是我的代码:无法保存Excel文件使用C#

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); 

从我收到同样的错误,与上面的文件显示修改。

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

+0

别t真的知道,但只是一个快速的想法......你确定可以用'SaveAs'使用相同的文件路径吗?通常这会创建一个新文档。有没有一个'Save()'函数,而不是你可以使用? – musefan

+0

不要使其可见。 –

+1

我没有看到你发布创建的COM对象。记住始终发布你创建/使用的每个Excel对象。如果出现错误并且未关闭工作簿,那么可能会保持打开状态,因此只能对新实例进行只读操作...更多:excel未关闭(使用'excel.Quit()'),因此可以执行大量Excel进程在内存中... – Marco

回答

1

这是因为我是想打开该文件已经在Excel应用程序打开。在我的代码中,我没有关闭某些条件的excel应用程序。这就是它以只读权限打开它的原因。所以我无法在更新后保存该文件。要以读写方式打开它,您必须先关闭该文件。之后,您可以打开它并轻松地对文件执行读取和写入操作。

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

​​

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

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

problem用于向后兼容的工作表(a .xls)而不是.xlsx。

To allow sheets to be opened in pre office 2007 version it can't contain more than 65k rows. You can check the number of rows in your sheet by using ctrl+arrowdown till you hit the bottom. If you try to get a range larger than that number of rows it will create an error

2

检查您是否已经有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();