ahmed_sa Ответов: 1

Как создать лист excel с несколькими именами листов на основе модулей ?


Я работаю над настольным приложением c# и не могу экспортировать данные в лист excel с несколькими вкладками

значение мульти лист на основе данных существует на поле модуля таблицы данных

Я использую библиотеку open XML

Таблица данных данные как показано ниже :
Divide Output Excel File To Multi Tab based On Module					
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");


                      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;

                      }
                      else
                      {
                          ExcelWorksheetView wv = ws.View;
                          wv.ZoomScale = 100;
                          wv.RightToLeft = false;
                          ws.PrinterSettings.Orientation = eOrientation.Landscape;

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

1 Ответов

Рейтинг:
4

Maciej Los

Цитата:
Я использую библиотеку open XML

Извини, но ты ошибаешься. Вы используете EPPlus, потому что функция OPENXML не имеет встроенного LoadFromDataTable метод.

Все, что вам нужно сделать, это:
1. создайте файл Excel (рабочая книга)
2. петля через DataRows коллекция из DataTable
  а) проверьте, существует ли лист с именем, соответствующим названию модуля:
    - Нет - создать новый
    - Да - обратитесь к existsing one
  б) найти первую пустую ячейку(строку)
  в) вставить данные в эту строку
3. Файл Сохранить в Excel


ahmed_sa

если это возможно можете ли вы помочь мне показав код

Maciej Los

Это твоя работа, а не моя. Я дал подробные инструкции. Прочтите его и попробуйте написать код самостоятельно.