我正在开发一个项目,将详细信息填充到自定义(预定义).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()
方法,但无济于事。我做错了什么?
答案 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();
}