在C#中使用Excel模板

5
作为我正在编写的C#程序的一部分,我需要生成一个工作簿,其中包含两个不同的工作表和第三个可以生成任意次数的工作表。请问最有效的方法是什么?我已经研究了使用模板,但我不确定如何重复某些工作表,同时只显示其他工作表一次。如果有帮助或建议,将不胜感激。

https://dev59.com/lnVC5IYBdhLWcg3ww0Dr - SwDevMan81
谢谢您的回复,我知道如何向工作簿添加工作表,我的困难在于添加已经有格式的工作表。可能是在使用模板时,当模板已经被使用时。 - SonicBoom
3个回答

1

一个简单的方法是创建一个包含三个工作表的模板示例工作簿,然后复制它。打开两个工作簿并根据需要将第三个工作表重新复制到工作簿中作为新工作表。

回应评论:

有一些基于 .net 组件产品的 Excel 引擎,例如 Spreadsheet Gear 或 Aspose Cells。但如果您的应用程序是基于 Windows 窗体的,并且保证运行的地方有 Office,您可以使用 Office 自动化。您不能在 Web 服务器上合法使用 Office 自动化,但在客户端桌面上和 Web 服务器上同样可能。我使用过 Aspose Cells,它非常易于使用、功能强大,比 Spreadsheet Gear 稍微便宜一些,但 Spreadsheet Gear 也有很好的声誉。这两个组件都有非常好的文档,说明如何在 Excel 中进行任何操作。但如果您有 Excel 并想使用 Office 自动化,请务必在网上查找示例代码,了解如何从 C# 或 VB.NET 正确关闭 Excel。有一些技巧可以让它正确关闭。


首先感谢您的回复。我曾经考虑过这个方法,但不确定是否是最好的方法。您知道有哪些好的资源可以用C#创建Excel表格吗?我找到的资源都相当差劲。 - SonicBoom
通过我的编辑,您可以使用办公自动化,并使用http://msdn.microsoft.com/en-us/library/aa272268(office.11).aspx作为API参考。 - gjutras

0

我以前用模板做过这个。我会创建一个带有前两个工作表的模板xls,这些工作表是您不想更改的,然后添加第三个工作表,您可以将其复制到工作簿的末尾(根据需要添加更多工作表)。

如果您事先知道需要第三个工作表的数量,则可以将它们复制到末尾并删除模板的第三个插槽。

     ExcelTemplateManager t = new ExcelTemplateManager(template_path, log_path);
     t.CopyWorksheetToEnd(3);
     t.CopyWorksheetToEnd(3);
     t.RemoveAtIndexWorksheet(3);
     t.SetSomeValue(3);
     t.SetSomeValue(4);
     t.Close();

如果您不知道,那么请保留该模板以便根据需要将其复制到最后,完成后只需删除第三个工作表模板即可。
     ExcelTemplateManager t = new ExcelTemplateManager(template_path, log_path);
     t.CopyWorksheetToEnd(3);
     t.SetSomeValue(4);
     t.CopyWorksheetToEnd(3);
     t.SetSomeValue(5);
     t.RemoveAtIndexWorksheet(3);
     t.Close();

我使用了Microsoft.Office.Interop.Excel dll来创建我的ExcelTemplateManger类。基本思路是创建模板Excel文件的副本,并在副本上进行操作。如果您需要帮助设置该部分,请告诉我,但应该不会太麻烦。


你能展示一下你的模板管理器是什么样子吗?我需要看一下你是如何填充模板的。 - user236215

0

.NET的SpreadsheetGear具有ISheet.CopyAfter / CopyBefore方法,可让您在工作簿内或工作簿之间复制整个工作表。

您可以在SpreadsheetGear / Excel Reporting Samples页面的带图表的工作表复制到多个带图表的工作表示例中查看多次复制单个工作表的示例这里

免责声明:我拥有SpreadsheetGear LLC


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接