Я хочу добавить DataTable на новый лист в существующем шаблоне Excel.
Я открываю шаблон Excel, делаю копию и получаю DataTable:
class Program
{
static void Main(string[] args)
{
string templateFile = @"D:\TestDocs\ReportTemplate.xlsx";
string newFile = @"D:\TestDocs\NewReport ";
string date = DateTime.Now.ToString("ddMMyy") + ".xlsx";
string newFileName = newFile + date;
File.Copy(templateFile, newFileName, true);
ReadDataTable report = new ReadDataTable(newFileName);
DataTable dt1 = new DataTable();
dt1.Columns.Add("Name", typeof(string));
dt1.Columns.Add("Salary", typeof(int));
dt1.Columns.Add("Birthdate", typeof(DateTime));
dt1.TableName = "Table1";
dt1.Rows.Add("Maria", 100);
dt1.Rows.Add("Tom", 101);
report.AddItems(dt1);
report.Save();
System.Diagnostics.Process.Start(newFileName);
}
}
ЗатемЯ создаю необходимые новые детали в копии шаблона Excel и добавляю содержимое DataTable:
class ReadDataTable
{
private SpreadsheetDocument _document;
private WorkbookPart _workbookPart;
private Sheets _sheets;
public ReadDataTable(string newFileName)
{
_document = SpreadsheetDocument.Open(newFileName, true);
_workbookPart = _document.WorkbookPart;
_sheets = _workbookPart.Workbook.AppendChild<Sheets>(new Sheets());
}
public void AddItems (DataTable dt)
{
WorksheetPart worksheetPart = _workbookPart.AddNewPart<WorksheetPart>();
Worksheet workSheet = new Worksheet();
SheetData sheetData = new SheetData();
worksheetPart.Worksheet = workSheet;
workSheet.AppendChild(sheetData);
sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
Row header = new Row();
sheetData.Append(header);
Cell Header1 = ConstructCell("Name", CellValues.String);
Cell Header2 = ConstructCell("Salary", CellValues.String);
Cell Header3 = ConstructCell("Birthdate", CellValues.String);
header.Append(Header1, Header2, Header3);
Row newRow = new Row();
foreach (DataRow itemRow in dt.Rows)
{
newRow = new Row();
foreach (object item in itemRow.ItemArray)
{
newRow.Append(
ConstructCell(item.ToString(), CellValues.String));
}
sheetData.Append(newRow);
}
Sheet sheet = new Sheet()
{
Id = _document.WorkbookPart.GetIdOfPart(worksheetPart),
Name = dt.TableName
};
_sheets.Append(sheet);
}
public void Save()
{
_document.Close();
_document.Dispose();
}
private Cell ConstructCell(string value, CellValues dataType)
{
return new Cell()
{
CellValue = new CellValue(value),
DataType = new EnumValue<CellValues>(dataType)
};
}
}
Новый файл Excel создан, но он поврежден, и я не смог получить из него никакого содержимогочтобы увидеть, что не так.