如何使用C#和ClosedXML将新行添加到Excel文件?
我应该追加一个新的行到现有的Excel文件。 该任务由两部分组成:
- 添加到不存在的文件(效果很好)。
- 添加到现有的文件(不工作:它不会产生NEWlogging,只显示从“其他”身体的旧logging)。
这是我的代码:
private static void ExportToEXCEL(DataTable dt, string paymentStoryPath) { if (File.Exists(paymentStoryPath)) { XLWorkbook currentWorkbook = new XLWorkbook(paymentStoryPath); IXLWorksheet currentWsh = currentWorkbook.Worksheet("Payment history"); //IXLCell cellForNewData = index.Cell(index.LastRowUsed().RowNumber() + 1, 1); IXLRow rowForNewData = currentWsh.Row(currentWsh.LastRowUsed().RowNumber()+1); rowForNewData.InsertRowsBelow(1); rowForNewData.Value = dt; currentWorkbook.Save(); } else { //not exist XLWorkbook wb = new XLWorkbook(); wb.Worksheets.Add(dt, "Payment history"); wb.SaveAs(paymentStoryPath); } }
什么是错的,我应该在代码中改变什么?
我采取@畏惧的例子,并采取了一步,我有一个扩展方法来处理这一点。
public static class Extensions { public static void ToExcelFile(this DataTable dataTable, string filename, string worksheetName = "Sheet1") { using(var workbook = new XLWorkbook()) { workbook.Worksheets.Add(dataTable, worksheetName); workbook.SaveAs(filename); } } }
使用
myDataTable.ToExcelFile(@"C:\temp\myFile.xlsx");
我从我的一个项目中插入一个DataTable
到Excel中的以下代码。
//insert rows below a range from the cell going table rows down ws.Range( cell.Address.RowNumber , cell.Address.ColumnNumber , cell.Address.RowNumber + DocDataSet.Tables[tableNo].Rows.Count , cell.Address.ColumnNumber) .InsertRowsBelow(DocDataSet.Tables[tableNo].Rows.Count); //InsertData returns a range covering the inserted data var ra = ws.Cell(cell.Address.RowNumber, cell.Address.ColumnNumber) .InsertData(DocDataSet.Tables[tableNo].AsEnumerable()); //apply the style of the table token cell to the whole range ra.Style = cell.Style;
自从我写这篇文章以来,我已经有一段时间了,但据我所知,这个想法是,创build一个覆盖将被填充的行和列的范围。 Cell
对象有一个可以接受任何IEnumerable
源的InsertData
方法。
你可能不需要ws.Range
行,我插入到模板中,所以我必须先创build空间。
要添加DataTable
使用InsertTable()
方法:
XLWorkbook currentWorkbook = new XLWorkbook(paymentStoryPath); IXLWorksheet currentWsh = currentWorkbook.Worksheet("Payment history"); IXLCell cellForNewData = currentWsh.Cell(currentWsh.LastRowUsed().RowNumber() + 1, 1); cellForNewData.InsertTable(dt); currentWorkbook.Save();