Использование открытого XML для создания файла Excel

Я пытаюсь использовать Open XML для создания файла, но при попытке добавить только первую строку заголовков файл поврежден, и я не могу открыть, может ли кто-нибудь сказать мне, что я делаю здесь не так?

  using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create ("C: \ testpdfs \ mytest.xlsx", SpreadsheetDocumentType.Workbook)) {//Добавляем WorkbookPart в документ  .  WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart ();  workbookpart.Workbook = новая книга (); //Добавляем WorksheetPart в WorkbookPart.  WorksheetPart workheetPart = workbookpart.AddNewPart  ();  worksheetPart.Worksheet = новый рабочий лист (новые SheetData ()); //Добавить листы в рабочую книгу.  Листы листов = spreadsheetDocument.WorkbookPart.Workbook.  AppendChild  (новые Таблицы ()); //Добавляем новый рабочий лист и связываем его с книгой.  Лист листа = новый лист () {Id = spreadsheetDocument.WorkbookPart.  GetIdOfPart (workheetPart), SheetId = 1, Name = ViewBag.Title};  Строка row = новая строка () {RowIndex = 1};  Ячейка header1 = новая ячейка () {CellReference = "A1", CellValue = new CellValue ("Временная метка периода интервала")};  row.Append (header1);  Ячейка header2 = новая ячейка () {CellReference = "A2", CellValue = new CellValue ("Расчетный интервал")};  row.Append (header2);  Ячейка header3 = новая ячейка () {CellReference = "A3", CellValue = new CellValue ("агрегированный коэффициент потребления")};  row.Append (header3);  Ячейка header4 = новая ячейка () {CellReference = "A4", CellValue = new CellValue ("Агрегированное потребление с поправкой на потери")};  row.Append (header4);  sheet.Append (строка);  sheet.Append (лист); //sheet.Append(row);  workbookpart.Workbook.Save (); //Закрываем документ.  spreadsheetDocument.Close ();  return View ();  }  

У вас есть несколько проблем.

Во-первых, вы добавляете строку в Sheet , но его нужно добавить в SheetData . Самый простой способ сделать это — сохранить ссылку на объект SheetData , чтобы мы могли использовать его позже:

  SheetData sheetData = new SheetData  (); worksheetPart.Worksheet = new Worksheet (sheetData); ... sheetData.Append (row);  

Во-вторых, вам необходимо явно указать тип данных для каждой ячейки, потому что по умолчанию, если тип данных не указан, — число:

  Cell header1 = new Cell () {CellReference = "A1", CellValue = new CellValue ("Временная метка периода интервала")  , DataType = CellValues.String};  

Наконец, ваши ссылки на ячейки не совсем правильные. Вы добавляете все в одну строку, но добавляете ссылки для строк с 1 по 4 (A1-A4). Учитывая, что в вашем коде ячейки называются «заголовками», я предполагаю, что вам действительно нужны значения в ячейках A1-D1, и в этом случае вам нужно просто обновить значения CellReference .. Если вам действительно нужны значения в формате A1-A4, вам необходимо добавить каждую ячейку в новую строку.

Полный список кода (при условии, что вам нужны ячейки A1-D1):

  using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create ("C: \ testpdfs \ mytest.xlsx", SpreadsheetDocumentType.Workbook)) {//Добавляем WorkbookPart в документ.  WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart ();  workbookpart.Workbook = новая книга (); //Добавляем WorksheetPart в WorkbookPart.  WorksheetPart workheetPart = workbookpart.AddNewPart  ();  SheetData sheetData = новый SheetData ();  worksheetPart.Worksheet = новый рабочий лист (sheetData); //Добавить листы в рабочую книгу.  Листы листов = spreadsheetDocument.WorkbookPart.Workbook.  AppendChild  (новые Таблицы ()); //Добавляем новый рабочий лист и связываем его с книгой.  Лист листа = новый лист () {Id = spreadsheetDocument.WorkbookPart.  GetIdOfPart (workheetPart), SheetId = 1, Name = ViewBag.Title};  Строка row = новая строка () {RowIndex = 1};  Ячейка header1 = новая ячейка () {CellReference = "A1", CellValue = new CellValue ("Временная метка периода интервала"), DataType = CellValues.String};  row.Append (header1);  Ячейка header2 = новая ячейка () {CellReference = "B1", CellValue = новая ячейкаValue ("Расчетный интервал"), DataType = CellValues.String};  row.Append (header2);  Ячейка header3 = новая ячейка () {CellReference = "C1", CellValue = new CellValue ("агрегированный коэффициент потребления"), DataType = CellValues.String};  row.Append (header3);  Ячейка header4 = новая ячейка () {CellReference = "D1", CellValue = new CellValue ("агрегированное потребление с поправкой на потери"), DataType = CellValues.String};  row.Append (header4);  sheetData.Append (строка);  sheet.Append (лист);  workbookpart.Workbook.Save (); //Закрываем документ.  spreadsheetDocument.Close ();  return View ();}  


Содержание
  1. OpenXml SDK (краткое руководство C #)
  2. КОНЦЕПЦИИ C #
  3. Программная работа с файлами Excel с использованием OpenXml SDK.
  4. В статьях показано, как программно работать с документом Excel в консольном приложении C #.
  5. Перечисление доступных типов документов в SDK:
  6. Примеры вызовов следующих функций
  7. Используется функция ниже для создания новой ячейки
  8. Примеры вызовов функций, указанных ниже
  9. Функция ниже используется для получения существующего значения ячейки
  10. GitHub Репо
  11. ssukhpinder/InteropExample
  12. Как создавать, изменять и удалять Excel операции с электронными таблицами — ssukhpinder/InteropExample
  13. github.com
  14. Заинтересованы в концепциях C # 8.0, вот некоторые ссылки
  15. Присвоение Null-Coalescing C # 8.0
  16. В C # 8.0 вводится функция null-coalesci оператор присваивания ng ?? =.
  17. medium.com
  18. Что такое интерфейсы по умолчанию? C # 8.0
  19. Начиная с C # 8.0, вы можете определить реализацию, объявляя член интерфейса.
  20. medium.com
  21. Расширенный шаблон свойств C # 8.0
  22. В статье описывается, как сопоставление шаблонов обеспечивает эффективный способ использования и обработки этих данных в формы, которые…
  23. medium.com

OpenXml SDK (краткое руководство C #)

КОНЦЕПЦИИ C #

Программная работа с файлами Excel с использованием OpenXml SDK.

Сухпиндер Сингх

1 сентября 2020 г. · 4 мин чтения

Изображение для сообщения

В статьях показано, как программно работать с документом Excel в консольном приложении C #.

Установить ниже pac кадры из NuGet

 DocumentFormat. OpenXml 

Следующие «Директивы сборки» используются для компиляции кода

 с использованием DocumentFormat.OpenXml;  
с использованием DocumentFormat.OpenXml.Packaging;
с помощью DocumentFormat.OpenXml.Spreadsheet;

Чтобы создать документ Excel, создайте экземпляр класса « SpreadsheetDocument» .

 SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create 
(
путь к файлу,
SpreadsheetDocumentType.Workbook
);

Есть много перегрузок конструктора для SpreadsheetDocument , но приведенный выше экземпляр принимает два аргумента.

  • Путь к файлу: путь назначения для сохранения окончательного файла Excel.
  • SpreadSheetDocumentType: определяет тип документа Excel.

Перечисление доступных типов документов в SDK:

Выберите подходящий SpreadsheetDocumentType и убедитесь, что путь к файлу, в котором сохраняется выходной файл Excel, правильный, с соответствующим расширением имени файла.

Если SpreadsheetDocumentType не соответствует расширению имени выходного файла, при открытии файла возникает ошибка.

 //Книга Excel (* .xlsx).  
Workbook = 0,

//Шаблон Excel (* .xltx).
Template = 1,

//Книга Excel с поддержкой макросов (* .xlsm).
MacroEnabledWorkbook = 2,

//Шаблон Excel с поддержкой макросов (* .xltm).
MacroEnabledTemplate = 3,

//Надстройка Excel (* .xlam).
AddIn = 4

ПРИМЕЧАНИЕ. Для демонстрации используется тип документа Workbook , а расширение пути к файлу должно соответствовать « .xlsx.»

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

 WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart (); 
workbookpart.Workbook = new Workbook ();

Итак, чтобы добавить часть книги, функция « AddWorkbookPart » класса SpreadsheetDocument является называется. У части книги должен быть хотя бы один рабочий лист. Итак, следующим шагом будет добавление рабочего листа.

Чтобы добавить рабочий лист, создайте экземпляр класса Sheet .

  //Добавление листов в книгу. 
Sheets sheet = spreadsheetDocument.WorkbookPart.Workbook.
AppendChild (new Sheets ()); //Добавляем новый лист и связываем его с книгой.
Sheet Sheet = new Sheet ()
{
Id = spreadsheetDocument .WorkbookPart.GetIdOfPart (worksheetPart) ,
SheetId = 1,
Name = sheetName
}; sheet.Append (sheet);

Для создания листа требуется несколько параметров, таких как Id, SheetId и имя.

Перед созданием листа создайте часть листа и добавьте ее в книгу.

 WorksheetPart worksheetPart = workbookpart.AddNewPart  (); worksheetPart.Worksheet = new Worksheet (new SheetData ()); 

Последний шаг — сохранить workboot и закройте документ электронной таблицы.

 workbookpart.Workbook.Save (); 
spreadsheetDocument.Close ();
 public static void CreateExcelFile (string  filepath, string sheetName) {//Создайте документ электронной таблицы, указав путь к файлу. 
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create (
путь к файлу,
SpreadsheetDocumentType.Workbook
); //Добавляем WorkbookPart в документ.
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart ();
workbookpart.Workbook = new Workbook (); //Добавить WorksheetPart в WorkbookPart.
WorksheetPart workheetPart = workbookpart.AddNewPart ();
worksheetPart.Worksheet = new Worksheet (new SheetData ()); //Добавить листы в Рабочая книга.
Sheets sheet = spreadsheetDocument.WorkbookPart.Workbook.
AppendChild (new Sheets ()); //Добавить новый рабочий лист и связать его вместе с книгой.
Sheet Sheet = new Sheet () {
Id = spreadsheetDocument.WorkbookPart.GetIdOfPart (worksheetPart),
SheetId = 1,
Name = sheetName
};
sheet.Append (sheet); //Сохранить и закрыть
workbookpart.Workbook.Save () ;
spreadsheetDocument.Close ();}

Приведенный ниже код используется для вставки данных в конкретный номер ячейки — например, A1, B1 и т. д.

Приведенный ниже метод используется для вставки текста данные в excel, который принимает следующие аргументы в качестве входных.

  • docName: существующий путь к документу excel.
  • text: Необходимо вставить строковое текстовое значение.
  • cellName: Имя столбца Excel, например A, B, C, и т. д.
  • cellNumber: Примеры номеров столбцов Excel, например 1, 2, 3, 4 и т. д.

Примеры вызовов следующих функций

 OfflineExcel.InsertTextExistingExcel (@ "E:  test.xlsx", "test1", "A", 1); OfflineExcel.InsertTextExistingExcel (@ "  E:  test.xlsx "," test2 "," B ", 1); 

Используется функция ниже для создания новой ячейки

Приведенный ниже код используется для удаления данных в ячейку с определенным номером — например, A1, B1 и т. д.

Приведенный ниже метод используется для удаления данных из Excel, который принимает следующие аргументы в качестве входных.

  • docName: Существующий путь к документу Excel .
  • sheetName: имя листа внутри документа Excel..
  • colName: имя столбца Excel, например A, B, C и т. д.
  • rowIndex : В столбце Excel приведены примеры номеров 1, 2, 3, 4 и т. д.

Примеры вызовов функций, указанных ниже

  OfflineExcel.DeleteTextFromCell (@ "E:  test.xlsx", "test", "B", 1); OfflineExcel.DeleteTextFromCell (@ "E:  test.xlsx", "test", "B", 4);  

Функция ниже используется для получения существующего значения ячейки

GitHub Репо

ssukhpinder/InteropExample

Как создавать, изменять и удалять Excel операции с электронными таблицами — ssukhpinder/InteropExample

github.com

Заинтересованы в концепциях C # 8.0, вот некоторые ссылки

Присвоение Null-Coalescing C # 8.0

В C # 8.0 вводится функция null-coalesci оператор присваивания ng ?? =.

medium.com

Что такое интерфейсы по умолчанию? C # 8.0

Начиная с C # 8.0, вы можете определить реализацию, объявляя член интерфейса.

medium.com

Расширенный шаблон свойств C # 8.0

В статье описывается, как сопоставление шаблонов обеспечивает эффективный способ использования и обработки этих данных в формы, которые…

medium.com

Спасибо за чтение. Продолжайте посещать и поделитесь этим в своей сети. Пожалуйста, поделитесь своими мыслями и отзывами в разделе комментариев.

Следуйте за мной в LinkedIn Instagram Facebook Twitter

Оцените статью
clickpad.ru
Добавить комментарий