如何基于模块创建具有多个工作表名称的Excel文件?

问题描述 投票:0回答:1

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

仅根据数据表模块字段上存在的数据,我只能用表格创建Excel文件。

我使用开放的XML库

数据表数据如下:

根据模块将输出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,并基于数据加载与每个工作表相关的数据。

因此,如果我有两个模块,则意味着我有两个工作表。

我尝试过的:

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;
      }

但是上面的问题代码仅用一张纸来创建一个文件

所以如何基于模块创建多页文件?

datatable ado.net dataset openxml c#-5.0
1个回答
0
投票

我通过将多个数据表存储在数据集上然后在其上循环来解决我的问题

 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;
        }
© www.soinside.com 2019 - 2024. All rights reserved.