EPPlus 没有格式化最后一条记录
EPPlus not formatting last record
我正在使用下面的帮助程序将数据从我们的网站导出到一个简单的 Excel 电子表格中。我使用 CreateAndFormateWorksheet
方法...创建并格式化工作表,以便保留所有 datetime
数据类型以及前导零。
效果很好,但格式设置未应用于电子表格的最后一行。
我已经做了一些研究,但找不到关于该主题的任何内容,所以我想我一定是设置不当或使用不当。有任何想法吗?
public static void ExportData<T>(HttpResponseBase Response, List<T> dataSet, string filename)
{
var pck = new OfficeOpenXml.ExcelPackage();
var ws = CreateAndFormatWorksheet(pck, dataSet);
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=" + filename + ".xlsx");
Response.BinaryWrite(pck.GetAsByteArray());
Response.Flush();
Response.End();
}
private static ExcelWorksheet CreateAndFormatWorksheet<T>(OfficeOpenXml.ExcelPackage pck, List<T> dataSet)
{
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Monet_Export_" + DateTime.Now.ToString());
ws.Cells["A1"].LoadFromCollection(dataSet, true);
dynamic first = dataSet[0];
string rowCount = dataSet.Count.ToString();
int i = 0;
foreach (PropertyInfo info in typeof(T).GetProperties())
{
string column = columnIndex[i];
string indexer = column + "2:" + column + rowCount;
if (info.PropertyType == typeof(DateTime))
{
ws.Cells[indexer].Style.Numberformat.Format = "mm/dd/yyyy";
}
else
{
// Treat any other column as text to preserve leading 0's
ws.Cells[indexer].Style.Numberformat.Format = "@";
}
i++;
}
return ws;
}
这是电子表格的屏幕截图。请注意 datetime
列的前两行格式正确,最后两行格式错误。
请记住,对于 .LoadFromCollection(dataSet, true);
,true
布尔值告诉它包含一个 header 行,这使得 table height = rowcount + 1 for the header 行。所以只需更改它:
//+1 for the header line
string rowCount = (dataSet.Count + 1).ToString();
我正在使用下面的帮助程序将数据从我们的网站导出到一个简单的 Excel 电子表格中。我使用 CreateAndFormateWorksheet
方法...创建并格式化工作表,以便保留所有 datetime
数据类型以及前导零。
效果很好,但格式设置未应用于电子表格的最后一行。
我已经做了一些研究,但找不到关于该主题的任何内容,所以我想我一定是设置不当或使用不当。有任何想法吗?
public static void ExportData<T>(HttpResponseBase Response, List<T> dataSet, string filename)
{
var pck = new OfficeOpenXml.ExcelPackage();
var ws = CreateAndFormatWorksheet(pck, dataSet);
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=" + filename + ".xlsx");
Response.BinaryWrite(pck.GetAsByteArray());
Response.Flush();
Response.End();
}
private static ExcelWorksheet CreateAndFormatWorksheet<T>(OfficeOpenXml.ExcelPackage pck, List<T> dataSet)
{
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Monet_Export_" + DateTime.Now.ToString());
ws.Cells["A1"].LoadFromCollection(dataSet, true);
dynamic first = dataSet[0];
string rowCount = dataSet.Count.ToString();
int i = 0;
foreach (PropertyInfo info in typeof(T).GetProperties())
{
string column = columnIndex[i];
string indexer = column + "2:" + column + rowCount;
if (info.PropertyType == typeof(DateTime))
{
ws.Cells[indexer].Style.Numberformat.Format = "mm/dd/yyyy";
}
else
{
// Treat any other column as text to preserve leading 0's
ws.Cells[indexer].Style.Numberformat.Format = "@";
}
i++;
}
return ws;
}
这是电子表格的屏幕截图。请注意 datetime
列的前两行格式正确,最后两行格式错误。
请记住,对于 .LoadFromCollection(dataSet, true);
,true
布尔值告诉它包含一个 header 行,这使得 table height = rowcount + 1 for the header 行。所以只需更改它:
//+1 for the header line
string rowCount = (dataSet.Count + 1).ToString();