如何使用C#将2个预定义的工作表写入.xlsx文件?

时间:2017-08-16 08:25:54

标签: c# excel winforms office-interop

我正在开发一个项目,将详细信息填充到自定义(预定义).xlsx模板文件中,然后打开Excel应用程序以进一步输入用户。请注意,打开的文件位于内存中,因此用户在实际打开文件之前不必先将其保存到本地文件中。

到目前为止,我在使用基本代码的一个工作表的文件方面做得很好:

excelApp = new Excel.Application();
Workbooks wbs = excelApp.Workbooks;
Workbook wb = wbs.Add(pathOfTemplate); //<-- I'm guessing the problem is this line?
Worksheet ws = wb.Sheets[1];

//Fill details
ws.Cells[1, 1] = "Sample data";

//Show app
excelApp.Visible = true;

现在我遇到了一个多表的工作簿,我尝试修改代码以使另一个Worksheet变量插入到上面的代码中:

Worksheet ws2 = wb.Sheets[2];
ws2.Cells[1, 1] = "Sample data again";

我得到的是两个Excel实例打开,没有任何详细信息写入任何工作表。我尝试了Worksheet.Activate()方法,但无济于事。我做错了什么?

1 个答案:

答案 0 :(得分:0)

首先,使用互操作。创建xlsx格式是为了允许应用程序(尤其是服务和网站)生成和读取Excel文件,而无需在每次需要创建工作表时启动新的Excel实例。

您可以使用EPPlus这样的库来读取工作表作为模板,修改它并使用新名称保存:

var newFile = new FileInfo("pathToNewFile.xlsx");
var templateFile = new FileInfo("PathToTemplate.xlsx");

using(var pck = new ExcelPackage(newFile,templateFile))
{
    var ws=pck.Workbook.Worksheets[0];

    //Set a cell's text
    ws.Cells["A1"].Value ="whatever";
    ws.Cells[2,1].Value ="whatever2";

    //Fill cells from a collection
    var orders=new List<Order>();
   //Fill the list then ...
    ws.Cells["A10"].LoadFromCollection(orders);

    pck.Save();
 }