internal class NPOIHelper
{
internal static bool Export(string fileName, DataTable dtSource, string myDateFormat = "yyyy-MM")
{
SaveFileDialog dialog = new SaveFileDialog();
dialog.FileName = fileName + ".xlsx";
dialog.DefaultExt = "xlsx";
dialog.Filter = "Excel文件(*.xls)|*.xlsx";
if (dialog.ShowDialog() != DialogResult.OK)
{
return false;
}
XSSFWorkbook wb = new XSSFWorkbook();
ISheet sheet = wb.CreateSheet("Sheet1");
IRow rowHeader = sheet.CreateRow(0);
for (int i = 0; i < dtSource.Columns.Count; i++)
{
DataColumn column = dtSource.Columns[i];
rowHeader.CreateCell(i).SetCellValue(column.Caption);
}
short decimalformat = HSSFDataFormat.GetBuiltinFormat("0.00");
short dateformat = wb.CreateDataFormat().GetFormat(myDateFormat);
ICellStyle styleDecimal = wb.CreateCellStyle();
styleDecimal.DataFormat = decimalformat;
ICellStyle styleDate = wb.CreateCellStyle();
styleDate.DataFormat = dateformat;
ICellStyle styleNormal = wb.CreateCellStyle();
for (int i = 0; i < dtSource.Rows.Count; i++)
{
DataRow dr = dtSource.Rows[i];
IRow ir = sheet.CreateRow(i + 1);
for (int j = 0; j < dr.ItemArray.Length; j++)
{
ICell icell = ir.CreateCell(j);
object cellValue = dr[j];
Type type = cellValue.GetType();
if (type == typeof(decimal) || type == typeof(double) || type == typeof(int) || type == typeof(float))
{
icell.SetCellValue(Convert.ToDouble(cellValue));
icell.CellStyle = styleDecimal;
}
else if (type == typeof(DateTime))
{
icell.SetCellValue(Convert.ToDateTime(cellValue).ToString(myDateFormat));
icell.CellStyle = styleNormal;
}
else if (type == typeof(bool))
{
icell.SetCellValue(Convert.ToBoolean(cellValue) ? "是" : "否");
icell.CellStyle = styleNormal;
}
else
{
icell.SetCellValue(cellValue.ToString());
icell.CellStyle = styleNormal;
}
}
}
using (FileStream fs = File.OpenWrite(dialog.FileName))
{
wb.Write(fs);
}
return true;
}
}