我有一个基本的WinForms应用程序,并希望能够将此应用程序中的数据写入Excel电子表格。到目前为止,我有以下代码:
Microsoft.Office.Interop.Excel.Application excelapp = new Microsoft.Office.Interop.Excel.Application();
excelapp.Visible = true;
_Workbook workbook = (_Workbook)(excelapp.Workbooks.Add(Type.Missing));
_Worksheet worksheet = (_Worksheet)workbook.ActiveSheet;
worksheet.Cells[1, 1] = "Name";
worksheet.Cells[1, 2] = "Bid";
worksheet.Cells[2, 1] = txbName.Text;
worksheet.Cells[2, 2] = txbResult.Text;
excelapp.UserControl = true;
现在我想要做的是写入已经创建的Excel文件,然后附加它。我还希望它在幕后完成所有操作,以便在按钮单击时将数据写入电子表格并保存而无需用户进行任何交互。只是在文件中添加数据而不是覆盖它。
答案 0 :(得分:3)
要打开现有工作簿,请从
更改代码_Workbook workbook = (_Workbook)(excelapp.Workbooks.Add(Type.Missing));
到
_Workbook workbook = (_Workbook)(excelapp.Workbooks.Open(@"C:\Path\To\Your\WorkBook\ExcelWorkBook.Xlsm"));
然后要保存它,您只需调用打开的工作簿的Save方法:
workbook.Save();
如果您不希望用户看到正在发生的任何事情并让它们全部在后台运行,您还应该更改您的代码行:
excelapp.Visible = true;
到
excelapp.Visible = false;
您的问题的唯一部分我没有表明您的陈述Whilst just adding data to the file NOT overwriting it.
如果您将数据添加到文件并保存该文件,它将覆盖。您是否要将新工作簿另存为另一个文件?这样有2个文件?
注意: 这些 不 需要您正在使用的Interop之外的任何第三方软件,这些都是Interop的功能。这意味着您不必下载任何内容或在项目中添加任何额外的依赖项。
答案 1 :(得分:2)
你看过NPOI - 我用它来成功读取和用C#写入Excel。
答案 2 :(得分:1)
答案 3 :(得分:1)
如果您正在使用Excel 2007及更高版本,则可以尝试使用OpenXML。我使用它创建新的和修改现有的Excel电子表格取得了很大的成功。
从以下位置下载库: http://www.microsoft.com/en-us/download/details.aspx?id=5124
有很多有用的问题/答案可以帮助你。这是一个很好的:
答案 4 :(得分:-1)
您需要Add_Ins编程和来宾做同样的工作,当用户保存文件时,Excel会自动执行您想要的操作,如下所示:
this .Application .WorkbookBeforeSave +=new Excel.AppEvents_WorkbookBeforeSaveEventHandler(Application_WorkbookBeforeSave);
void Application_WorkbookBeforeSave(Excel.Workbook workbook,bool ui,ref bool ok)
{
Worksheet worksheet = (Worksheet)workbook.ActiveSheet;
worksheet.Cells[1, 1] = "Name";
worksheet.Cells[1, 2] = "Bid";
string filepath = @"Path";
DirectoryInfo d = new DirectoryInfo(filepath);
var file =d.GetFiles("*infousers.txt"));
string[] info = File.ReadAllLines(filepath + @"\\" + file.Name);
string userName=info[0];
string userId=info[1];
worksheet.Cells[2, 1] = userName.ToString();
worksheet.Cells[2, 2] = userId.ToString();
}