Нужно заполнить шаблон xlsx данными. Пользуюсь библиотекой openxml. В шаблоне создал заголовок с названиями колонок.
uint rowIndex = 2;
uint startMerge;
Cell cell;
orders.ForEach(order =>
{
cell = InsertCellInWorksheet("A", rowIndex);
cell.CellValue = new CellValue(order.SignDate.ToString());
cell.DataType = new EnumValue<CellValues>(CellValues.Date);
//cell = InsertCellInWorksheet("B", rowIndex, WorksheetPart);
//cell.CellValue = new CellValue(order.Number);
//cell.DataType = new EnumValue<CellValues>(CellValues.String);
//cell = InsertCellInWorksheet("C", rowIndex, WorksheetPart);
//cell.CellValue = new CellValue(order.DeliveryAddress);
//cell.DataType = new EnumValue<CellValues>(CellValues.String);
//foreach (OrderModule orderModule in order.OrderModule) {
// foreach (ModuleComponent moduleComponent in orderModule.ModuleComponent) {
// cell = InsertCellInWorksheet("D",rowIndex, WorksheetPart);
// cell.CellValue = new CellValue(orderModule.ModuleArticle);
// cell.DataType = new EnumValue<CellValues>(CellValues.Number);
// cell = InsertCellInWorksheet("E", rowIndex, WorksheetPart);
// cell.CellValue = new CellValue(moduleComponent.Color);
// cell.DataType = new EnumValue<CellValues>(CellValues.String);
// rowIndex++;
// }
//}
//MergeCells("A" + startMerge + ":A" + (rowIndex - 1));
//MergeCells("B" + startMerge + ":B" + (rowIndex - 1));
//MergeCells("C" + startMerge + ":C" + (rowIndex - 1));
startMerge = rowIndex;
});
Функция вставки ячейки
private Cell InsertCellInWorksheet(string columnName, uint rowIndex)
{
SheetData sheetData = Worksheet.GetFirstChild<SheetData>();
string cellReference = columnName + rowIndex;
Row row;
if (sheetData.Elements<Row>().Where(r => r.RowIndex == rowIndex).Count() != 0)
{
row = sheetData.Elements<Row>().Where(r => r.RowIndex == rowIndex).First();
}
else
{
row = new Row() { RowIndex = rowIndex };
sheetData.Append(row);
}
if (row.Elements<Cell>().Where(c => c.CellReference.Value == columnName + rowIndex).Count() > 0)
{
return row.Elements<Cell>().Where(c => c.CellReference.Value == cellReference).First();
}
else
{
Cell newCell = new Cell() { CellReference = cellReference, StyleIndex = 1 };
row.Append(newCell);
Worksheet.Save();
return newCell;
}
}
После добавления данных при попытке открытия Excel выдает - "Ошибка в части содержимого. Выполнить попытку восстановления?" попробовал вставить всего одну ячейку - но эффект тот же. Как вставить ячейку в xlsx документ правильно?
В итоге поставил EPPlus - в разы более удобная вещь для Excel
public void FillChess4ExcelEPPlus(List<Order> orders, string filename)
{
FileInfo file = new FileInfo(filename);
using (ExcelPackage excelPackage = new ExcelPackage(file))
{
ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1];
int rowIndex = 2;
orders.ForEach(order =>
{
int startMerge = rowIndex;
worksheet.Cells[rowIndex, 1].Value = order.SignDate;
worksheet.Cells[rowIndex, 2].Value = order.Number;
worksheet.Cells[rowIndex, 3].Value = order.DeliveryAddress;
foreach (OrderModule orderModule in order.OrderModule)
{
foreach (ModuleComponent moduleComponent in orderModule.ModuleComponent)
{
worksheet.Cells[rowIndex, 4].Value = orderModule.ModuleArticle;
worksheet.Cells[rowIndex, 5].Value = moduleComponent.Color;
rowIndex++;
}
}
worksheet.Cells["A" + startMerge + ":A"+ (rowIndex - 1)].Style.Numberformat.Format = DateTimeFormatInfo.CurrentInfo.ShortDatePattern;
worksheet.Cells["D" + startMerge + ":D" + (rowIndex - 1)].Style.Numberformat.Format = "0";
worksheet.Cells["A" + startMerge + ":A" + (rowIndex - 1)].Merge = true;
worksheet.Cells["B" + startMerge + ":B" + (rowIndex - 1)].Merge = true;
worksheet.Cells["C" + startMerge + ":C" + (rowIndex - 1)].Merge = true;
startMerge = rowIndex;
});
excelPackage.Save();
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Всем Привет!
Решил проверить мои знания в многопоточности и решить стандартную задачу, благодаря ейВыбрал задачу, в которой нужно найти количество возможных...