【问题标题】:Creating a dynamic number of workbooks using EPPlus使用 EPPlus 创建动态数量的工作簿
【发布时间】:2020-09-25 15:00:48
【问题描述】:

我拥有本质上是一个数据库,其中包含由我们更大组中的不同组拥有的表。我开发了一个应用程序,帮助制作我们用来编辑这些表格的 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。然后转到第二个列表,等等。我只是不确定完成此任务的最佳方法。

【问题讨论】:

    标签: c# excel winforms epplus


    【解决方案1】:

    您可以在一个简单的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);
            }
        }
    }
    

    【讨论】:

    • 在这里把这个的所有细节都放在通用的形式中有点困难。一般而言,对于数据库中的每个表,我都在提取表模式的 xml 并使用它来构建 SQL 查询以从所述表中获取数据,然后在移动到下一个表之前操作数据。如果表的名称与相关组匹配,我没想过只构建查询。这个答案让我思考把所有东西放在哪里不同。看起来我将能够成功。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    相关资源
    最近更新 更多