//新的Excel寫法#1
//新的Excel寫法#1
public void ExcelCreate<T>(List<T> lsT , string savePath, XSSFWorkbook workbook = null, string SheetName = "預設頁面", string DataName = null
, bool overwrite = false)
{
//檢查workbook null則建立
if (workbook == null){
workbook = new XSSFWorkbook();
workbook.CreateSheet(SheetName);
}
//複寫 => 刪除後新增
if (overwrite == true)
workbook.RemoveName(SheetName);
//若 Sheet為null 建立CreateSheet
if (workbook.GetSheet(SheetName) == null)
workbook.CreateSheet(SheetName);
try
{
//Sheet
ISheet Sheet = workbook.GetSheet(SheetName);
//get true lastRow
int lastRow = Sheet.LastRowNum;
if (Sheet.GetRow(lastRow) != null)
lastRow++;
//由最後一筆開始新增
//或第一筆開始複寫
for (int i = lastRow; i < lsT.Count() + lastRow; i++)
{
//Build New Rows
IRow Rows = Sheet.CreateRow(i);
//Reset Cell 從第一個開始
int CellNumber = 0;
foreach (var list in lsT[i - lastRow].GetType().GetRuntimeProperties())
{
//取得目標data
var data = list.GetValue(lsT[i - lastRow]);
//平攤後list
if (string.IsNullOrEmpty(data?.ToString()))
Rows.CreateCell(CellNumber).SetCellValue("");
else if (data.GetType().Equals(typeof(double)))
{
Rows.CreateCell(CellNumber).SetCellValue(int.Parse(data?.ToString()));
Rows.GetCell(CellNumber).CellStyle = SetCellStyle(1, workbook);
}
else if (data.GetType().Equals(typeof(DateTime)))
{
Rows.CreateCell(CellNumber).SetCellValue(DateTime.Parse(data?.ToString()));
Rows.GetCell(CellNumber).CellStyle = SetCellStyle(0, workbook);
}
else
Rows.CreateCell(CellNumber).SetCellValue(data.ToString());
CellNumber++;
}
}
if (!System.IO.Directory.Exists(savePath))
System.IO.Directory.CreateDirectory(savePath);
//已出遞迴
using (var fileData = new FileStream(savePath + (DataName == null ? "" : DataName) + DateTime.Now.ToString("yyyyMMdd") + ".xlsx", FileMode.Create))
workbook.Write(fileData);
}
catch (Exception ex)
{
log.Log(NLog.LogLevel.Error, $"ExcelCreate : SetDataError");
}
}
留言
張貼留言