Open-XML - результирующий файл, показывающий ошибку после слияния данных - PullRequest
0 голосов
/ 01 ноября 2018

Попытка объединить несколько листов Excel в один лист Excel путем копирования данных из листов на первый лист с использованием OpenXML. Но в результате Excel выдает ошибку при открытии файла вручную. Тот же Excel показывает правильное количество строк и данные при открытии через ту же программу.

Код: (Входной файл имеет несколько листов, таких как лист, лист1, лист2 и т. Д. -> Копирование всех данных листа1, листа 2 на лист.

    public static void Main(string[] args)
    {
        DataTable dataTable = new DataTable();
        string inputFilePath = "C:\\test\\PRDTestSheet.xlsx";
        ////open the excel using openxml sdk

        using (SpreadsheetDocument doc = SpreadsheetDocument.Open(inputFilePath, true))
        {
            WorkbookPart wbPart = doc.WorkbookPart;
            Sheet mainRosterSheet = wbPart.Workbook.Descendants<Sheet>().Where(s => s.Name == "TestSheet").FirstOrDefault();
            Worksheet mainWorksheet = ((WorksheetPart)wbPart.GetPartById(mainRosterSheet.Id)).Worksheet;
            SheetData mainSheetdata = (SheetData)mainWorksheet.GetFirstChild<SheetData>();

            Sheets sheetcollection = wbPart.Workbook.GetFirstChild<Sheets>();

           foreach (Sheet childSheet in sheetcollection)
            {
                 string sheetName = childSheet.Name;
                if (sheetName.StartsWith("TestSheet ("))
                {
                    Worksheet childWorksheet = ((WorksheetPart)wbPart.GetPartById(childSheet.Id)).Worksheet;
                    SheetData childsheetdata = (SheetData)childWorksheet.GetFirstChild<SheetData>();
                    IEnumerable<Row> rows = childsheetdata.Descendants<Row>();
                    int rowcount = rows.Count();
                    foreach (Row r in childsheetdata.Descendants<Row>())
                    {
                        Row newRow = (Row)r.Clone();
                        mainSheetdata.AppendChild(newRow);
                    }
                }

            }

            wbPart.Workbook.Save();

            IEnumerable<Row> rowsMain = mainSheetdata.Descendants<Row>();
            int rowcountMain = rowsMain.Count(); //Getting Proper row count of new sheet

            doc.Close();

        }

    }
...