From 22827b8dcf539915b99edbfa3f0dbae17bcd74cc Mon Sep 17 00:00:00 2001 From: KharchenkoVV Date: Wed, 15 Sep 2021 12:00:46 +0500 Subject: [PATCH] OpenXML code writing only numeric cells from source Excel file --- ConsoleApp1/Program.cs | 78 ++++++++++++++++++------------------------ 1 file changed, 33 insertions(+), 45 deletions(-) diff --git a/ConsoleApp1/Program.cs b/ConsoleApp1/Program.cs index 5345b3c9..5dfbf7c3 100644 --- a/ConsoleApp1/Program.cs +++ b/ConsoleApp1/Program.cs @@ -25,72 +25,60 @@ namespace ConsoleApp1 static void Main(/*string[] args*/) { - // source files using var firstExcel = SpreadsheetDocument.Open(@"D:\excels\excel1.xlsx", true); using var secondExcel = SpreadsheetDocument.Open(@"D:\excels\excel2.xlsx", true); - - // init destination file - using var resultExcel = SpreadsheetDocument.Create(@"D:\excels\result.xlsx", SpreadsheetDocumentType.Workbook); - WorkbookPart resultExcelWorkbookpart = resultExcel.AddWorkbookPart(); - resultExcelWorkbookpart.Workbook = new Workbook - { - Sheets = new Sheets() - }; - var resultExcelWorksheetPart = resultExcelWorkbookpart.AddNewPart(); - resultExcelWorksheetPart.Worksheet = new Worksheet(new SheetData()); - resultExcelWorkbookpart.Workbook.Save(); - resultExcel.Close(); - - - foreach (var sheet in firstExcel.WorkbookPart.Workbook.Descendants()) - { - //resultExcel.WorkbookPart.Workbook.Sheets.Append(sheet.CloneNode(true)); // Clone empty sheet - - var firstExcelWorkSheetPart = firstExcel.WorkbookPart.GetPartById(sheet.Id) as WorksheetPart; // get rows from source - var rows = firstExcelWorkSheetPart.Worksheet.Descendants(); // Rows - - } - - - - //resultExcel.Close(); - - - - using (var document = SpreadsheetDocument.Create(@"D:\excels\result123123.xlsx", SpreadsheetDocumentType.Workbook, true)) + using (var resultExcel = SpreadsheetDocument.Create(@"D:\excels\result.xlsx", SpreadsheetDocumentType.Workbook, true)) { // Add a WorkbookPart to the document. - var workbookPart = document.AddWorkbookPart(); + var workbookPart = resultExcel.AddWorkbookPart(); workbookPart.Workbook = new Workbook(); // Add a WorksheetPart to the WorkbookPart. - var worksheetPart1 = workbookPart.AddNewPart(); - worksheetPart1.Worksheet = new Worksheet(); + var worksheetPart = workbookPart.AddNewPart(); + worksheetPart.Worksheet = new Worksheet(); var sheets = workbookPart.Workbook.AppendChild(new Sheets()); - - var sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart1), SheetId = 1, Name = "Test Sheet" }; - sheets.Append(sheet); + //var sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Test Sheet" }; + //sheets.Append(sheet); workbookPart.Workbook.Save(); } - using (var document = SpreadsheetDocument.Open(@"D:\excels\result123123.xlsx", true)) + using (var resultExcel = SpreadsheetDocument.Open(@"D:\excels\result.xlsx", true)) { - var worksheetPart1 = document.WorkbookPart.WorksheetParts.First(); - var sheetData1 = worksheetPart1.Worksheet.AppendChild(new SheetData()); + var resultExcelWorkSheetPart = resultExcel.WorkbookPart.WorksheetParts.First(); + var resultExcelSheetData = resultExcelWorkSheetPart.Worksheet.AppendChild(new SheetData()); - for (uint i = 1; i < 10; i++) + foreach (var sheet in firstExcel.WorkbookPart.Workbook.Descendants()) { - var row1 = new Row(); - row1.Append(new Cell { CellValue = new CellValue(i.ToString()) }); - sheetData1.AppendChild(row1); + var newSheet = new Sheet() { + Id = resultExcel.WorkbookPart.GetIdOfPart(resultExcelWorkSheetPart), + SheetId = sheet.SheetId.Value, + Name = sheet.Name + }; + resultExcel.WorkbookPart.Workbook.Sheets.Append(newSheet); + + var firstExcelWorkSheetPart = firstExcel.WorkbookPart.GetPartById(sheet.Id) as WorksheetPart; // get rows from source + var firstExcelRows = firstExcelWorkSheetPart.Worksheet.Descendants(); // retrieved rows + //var firstExcelRows = sheet.Descendants(); + + foreach (var row in firstExcelRows) + { + resultExcelSheetData.AppendChild(row.CloneNode(true)); + } } + + //for (uint i = 1; i < 10; i++) // fills cells fine + //{ + // var row = new Row(); + // row.Append(new Cell { CellValue = new CellValue(i.ToString()) }); + // sheetData.AppendChild(row.CloneNode(true)); + //} } - + //resultExcel.Close(); Console.WriteLine("Done. Press any key to quit."); Console.ReadKey(); }