使用 EPPlus 创建动态数量的工作簿
Creating a dynamic number of workbooks using EPPlus
我有本质上是一个数据库,其中 tables 由我们较大组中的不同组拥有。我开发了一个应用程序,它可以帮助制作 Excel 文件,我们用来编辑这些 tables,根据拥有 table 的组分解 tables 并创建一个 Excel 使用 EPPlus 的工作簿。所有者在我读入的 csv 文件中定义,并在我浏览它们时分配给每个 table。在每个工作簿中,它为该组拥有的每个选项卡创建一个选项卡。所以现在我的代码的简化版本如下所示:
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 文件中找到唯一组的数量。然后创建相同数量的列表来存储按组分解的 table。从那里我可以遍历其中一个列表并使用我在循环遍历该组的所有 table 之后处理的通用 Excel 包。然后转到第二个列表,等等。我只是不确定完成此操作的最佳方法。
您可以在一个简单的 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);
}
}
}
我有本质上是一个数据库,其中 tables 由我们较大组中的不同组拥有。我开发了一个应用程序,它可以帮助制作 Excel 文件,我们用来编辑这些 tables,根据拥有 table 的组分解 tables 并创建一个 Excel 使用 EPPlus 的工作簿。所有者在我读入的 csv 文件中定义,并在我浏览它们时分配给每个 table。在每个工作簿中,它为该组拥有的每个选项卡创建一个选项卡。所以现在我的代码的简化版本如下所示:
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 文件中找到唯一组的数量。然后创建相同数量的列表来存储按组分解的 table。从那里我可以遍历其中一个列表并使用我在循环遍历该组的所有 table 之后处理的通用 Excel 包。然后转到第二个列表,等等。我只是不确定完成此操作的最佳方法。
您可以在一个简单的 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);
}
}
}