using NPOI.SS.UserModel;
|
using NPOI.Util.Collections;
|
using NPOI.XSSF.UserModel;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Reflection;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace WIDESEAWCS_Common.Helper
|
{
|
public static class TExportHelper
|
{
|
/// <summary>
|
/// 导出
|
/// </summary>
|
public static string GetExport<T>(string savePath, PropertyInfo[] properties, List<T> dataList)
|
{
|
string filePath = "";
|
try
|
{
|
// 创建 Excel 工作簿
|
IWorkbook workbook = new XSSFWorkbook();
|
ISheet sheet = workbook.CreateSheet("x");
|
// 创建表头行
|
IRow headerRow = sheet.CreateRow(0);
|
sheet.DefaultColumnWidth = 15;
|
// 设置表头样式
|
ICellStyle headerStyle = workbook.CreateCellStyle();
|
IFont headerFont = workbook.CreateFont();
|
headerFont.Boldweight = (short)FontBoldWeight.Bold;
|
headerFont.FontHeightInPoints = 12;
|
headerStyle.SetFont(headerFont);
|
headerStyle.FillForegroundColor = IndexedColors.LightBlue.Index;
|
headerStyle.FillPattern = FillPattern.SolidForeground;
|
headerStyle.BorderBottom = BorderStyle.Thin;
|
headerStyle.BorderTop = BorderStyle.Thin;
|
headerStyle.BorderLeft = BorderStyle.Medium;
|
headerStyle.BorderRight = BorderStyle.Medium;
|
|
// 设置数据样式
|
ICellStyle dataStyle = workbook.CreateCellStyle();
|
dataStyle.BorderBottom = BorderStyle.Thin;
|
dataStyle.BorderTop = BorderStyle.Thin;
|
dataStyle.BorderLeft = BorderStyle.Thin;
|
dataStyle.BorderRight = BorderStyle.Thin;
|
|
// 填充表头
|
for (int i = 0; i < properties.Length; i++)
|
{
|
var columnName = AttributeHelper.GetExporterDisplayName(properties[i]);
|
var cell = headerRow.CreateCell(i);
|
cell.SetCellValue(columnName);
|
cell.CellStyle = headerStyle;
|
}
|
|
// 填充数据
|
for (int rowIdx = 0; rowIdx < dataList.Count; rowIdx++)
|
{
|
IRow dataRow = sheet.CreateRow(rowIdx + 1);
|
var item = dataList[rowIdx];
|
|
for (int colIdx = 0; colIdx < properties.Length; colIdx++)
|
{
|
var cell = dataRow.CreateCell(colIdx);
|
var value = properties[colIdx].GetValue(item);
|
|
// 处理不同类型的值
|
if (value == null)
|
{
|
cell.SetCellValue("");
|
}
|
else if (value is DateTime dateTime)
|
{
|
cell.SetCellValue(dateTime.ToString("yyyy-MM-dd HH:mm:ss"));
|
}
|
else if (value is bool boolValue)
|
{
|
cell.SetCellValue(boolValue);
|
}
|
else
|
{
|
cell.SetCellValue(value.ToString());
|
}
|
cell.CellStyle = dataStyle;
|
}
|
}
|
// 保存文件
|
string fileName = "x.xlsx";
|
filePath = Path.Combine(savePath, fileName);
|
using (var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
|
{
|
workbook.Write(fs);
|
}
|
}
|
catch (Exception)
|
{
|
|
throw;
|
}
|
return filePath;
|
}
|
}
|
}
|