Попытка объединить несколько листов 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();
}
}