2

我有一个基本的 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 文件,从而附加它。我还希望它在幕后完成这一切,以便在单击按钮时将数据写入电子表格并保存,而无需用户进行任何交互。虽然只是将数据添加到文件中而不是覆盖它。

4

5 回答 5

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 的内置功能。这意味着您无需下载任何内容或在项目中添加任何额外的依赖项。

于 2013-11-12T16:26:55.023 回答
2

Have you looked at NPOI - I've used it to successfully read from and write to Excel with C#.

于 2013-11-12T15:30:06.810 回答
1

I found this when I was filling pre made excel templates, really nice

Creating Excel spreadsheets .XLS and .XLSX in C#

Also look at his other examples very cool stuff

于 2013-11-12T15:31:03.527 回答
1

如果您正在使用 Excel 2007 及更高版本,则可以尝试使用 OpenXML。我使用它来创建新的和修改现有的 Excel 电子表格取得了巨大的成功。

从以下位置下载库: http: //www.microsoft.com/en-us/download/details.aspx?id=5124

SO上有很多有用的问题/答案会对您有所帮助。这是一个很好的:

Open XML SDK 2.0 - 如何更新电子表格中的单元格?

于 2013-11-12T16:08:56.560 回答
-1

你需要ِAdd_Ins编程和guest做同样的工作,当用户保存文件时,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();
    }
于 2013-11-12T16:40:26.217 回答