如何基于模块创建具有多个 sheet 名称的 excel 文件?

How to create excel file with multiple sheet name based on modules?

我在使用 c# 桌面应用程序,我无法将数据导出到具有多个选项卡(多个 sheet)的 excel 文件。

我只能根据数据 table 模块字段中存在的数据创建 excel 文件 sheet。

我使用开放XML库

数据table数据如下:

分割输出Excel文件到基于模块的多选项卡

PartId  Company Files   Tab     Module  
1222    micro   Abc     source     1    
1321    silicon Abc     source     1    
1444    cd2     Abc     types      2    
1321    cd3     Abc     types      2    
1541    tvs     Abc     types      2

预期结果:

创建文件 ABC.xlsx,其中包含两个 sheet 第一个 sheet 名称源和第二个 sheet 名称类型,基于模块并加载与每个 sheet 相关的数据基于数据存在于数据 table.

所以如果我有两个模块意味着我有两个 sheet .

我尝试过的:

public Boolean createExcelFile(DataTable Table,String FullFilePathName)
      {
          Boolean IsDone = false;
          try
          {
              FileInfo CreatedFile = new FileInfo(FullFilePathName);
              Boolean ISNew = false;
              if (!CreatedFile.Exists)
              {

                  ISNew = true;
              }
              using (var pck = new ExcelPackage(CreatedFile))
              {
                  ExcelWorksheet ws;
                  if (ISNew == true)
                  {
                      ws = pck.Workbook.Worksheets.Add("Sheet");




                      ws.Cells[1, 1].LoadFromDataTable(Table, ISNew, OfficeOpenXml.Table.TableStyles.Light8);
                  }

                  else
                  {
                       ws = pck.Workbook.Worksheets.FirstOrDefault();
                       ws.Cells[2, 1].LoadFromDataTable(Table, ISNew);
                  }
                  pck.Save();
                  IsDone = true;

              }
          }
          catch (Exception ex)
          {

              throw ex;
          }
          return IsDone;
      }

但是上面的问题代码只用一个 sheet 创建一个文件

so 如何基于模块创建具有多个 sheet 的文件?

我通过在数据集上存储多数据 table 然后在其上循环

解决了我的问题
 DataSet ds = new DataSet();
                        var result = from rows in dt.AsEnumerable()
                                     group rows by new { Module = rows["ModuleName"] } into grp
                                     select grp;
                        foreach (var item in result)
                        {
                            ds.Tables.Add(item.CopyToDataTable());
                        }
Affected = new CExcel().createExcelFileForDs(ds, exportPath);

 public Boolean createExcelFileForDs(DataSet ds, String FullFilePathName)
        {
            Boolean IsDone = false;
            try
            {
                FileInfo CreatedFile = new FileInfo(FullFilePathName);
                Boolean ISNew = false;
                if (!CreatedFile.Exists)
                {

                    ISNew = true;
                }
                using (var pck = new ExcelPackage(CreatedFile))
                {
                    ExcelWorksheet ws;
                    foreach (DataTable Table in ds.Tables)
                    {
                        if (ISNew == true)
                        {
                            ws = pck.Workbook.Worksheets.Add(Convert.ToString(Table.Rows[0]["Tab name"]));
                            ws.Cells.Style.Font.Size = 11; //Default font size for whole sheet
                            ws.Cells.Style.Font.Name = "Calibri"; //Default Font name for whole sheet    
                            if (System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.IsRightToLeft)   // Right to Left for Arabic lang
                            {
                                ExcelWorksheetView wv = ws.View;
                                wv.ZoomScale = 100;
                                wv.RightToLeft = true;
                                ws.PrinterSettings.Orientation = eOrientation.Landscape;
                                ws.Cells.AutoFitColumns();
                            }
                            else
                            {
                                ExcelWorksheetView wv = ws.View;
                                wv.ZoomScale = 100;
                                wv.RightToLeft = false;
                                ws.PrinterSettings.Orientation = eOrientation.Landscape;
                                ws.Cells.AutoFitColumns();
                            }
                            ws.Cells.AutoFitColumns();
                            ws.Cells[1, 1].LoadFromDataTable(Table, ISNew, OfficeOpenXml.Table.TableStyles.Light8);
                        }

                        else
                        {
                            ws = pck.Workbook.Worksheets.FirstOrDefault();
                            ws.Cells[2, 1].LoadFromDataTable(Table, ISNew);
                        }
                    }
                    pck.Save();
                    IsDone = true;



                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
            return IsDone;
        }