问题描述
我实际上是一个数据库,其中的表由更大的组中的不同组拥有。我开发了一个应用程序,该应用程序可以帮助制作用于编辑这些表的Excel文件,该文件可以按组拥有该表的方式将这些表细分,并使用EPPlus创建Excel工作簿。所有者在我读取并分配给每个表的csv文件中定义。在每个工作簿中,它为该组拥有的每个选项卡创建一个选项卡。因此,现在我的代码的简化版本如下:
using (ExcelPackage grp1 = new ExcelPackage())
{
using (ExcelPackage grp2 = new ExcelPackage())
{
using (ExcelPackage grp3 = new ExcelPackage())
{
// iterate thru list of tables and owners
foreach (string table in tablelist)
{
if (tableowner = group1)
{
ExcelWorksheet ws = grp1.Workbook.Worksheets.Add(currenttable.Name);
// do stuff
}
if (tableowner = group2)
{
ExcelWorksheet ws = grp2.Workbook.Worksheets.Add(currenttable.Name);
// do stuff
}
if (tableowner = group3)
{
ExcelWorksheet ws = grp3.Workbook.Worksheets.Add(currenttable.Name);
// do stuff
}
if (grp1.Workbook.Worksheets.Count > 0)
{
FileInfo grp1fi = new FileInfo(path);
grp1.SaveAs(grp1fi);
}
if (grp2.Workbook.Worksheets.Count > 0)
{
FileInfo grp2fi = new FileInfo(path);
grp2.SaveAs(grp2fi);
}
if (grp3.Workbook.Worksheets.Count > 0)
{
FileInfo grp3fi = new FileInfo(path);
grp3.SaveAs(grp3fi);
}
}
}
}
}
这很有效,只要将所有内容仅放入我有相应代码的3个组中即可。但是我迫切需要让用户将组定义为他们需要的许多组。因此,我需要能够动态创建正确数量的Excel文件。这可能吗?我正在猜测是否是我必须首先读取的csv文件中的唯一组数。然后创建相同数量的列表,用于存储按组细分的表。从那里,我可以遍历其中一个列表,并使用通用的ExcelPackage,在遍历该组的所有表之后将其丢弃。然后转到第二个列表,依此类推。我只是不确定实现此目的的最佳方法。
解决方法
您可以在一个简单的for
循环中完成所有这些工作,对吗?还是我误会了这个问题?
int NoOfWorkBooks = 5;
for (int i = 0; i < NoOfWorkBooks; i++)
{
using (ExcelPackage grp = new ExcelPackage())
{
if (tableowner == group)
{
ExcelWorksheet ws = grp.Workbook.Worksheets.Add(currenttable.Name);
FileInfo grp1fi = new FileInfo(string.Format(@"c:\temp\ExcelFile_{0}.xlsx",i));
grp.SaveAs(grp1fi);
}
}
}