using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
/// <summary>
/// 根据对象列表生成Excel文档,默认字段名作为表头
/// </summary>
/// <param name="list">列表数据</param>
/// <param name="dataType">生成的Excel文件类型</param>
/// <param name="errorMsg">错误信息</param>
/// <param name="resultType">返回结果类型: 1.文件地址 2.Base64字符串 </param>
/// <returns></returns>
public static string StringListToExcel(List<List<string>> list, string dataType, out string errorMsg, string fileName = "", int resultType = 1, string fileType = "xls")
{
string result = string.Empty;
try
{
if (string.IsNullOrWhiteSpace(dataType))
{
dataType = "QuestionNaireDetail";
}
if (!(list?.Count > 0))
{
errorMsg = "列表信息不能为空";
return null;
}
errorMsg = "";
string fileTypeStr = fileType?.ToLower() == "xlsx" ? "xlsx" : "xls";
IWorkbook workbook = fileType?.ToLower() == "xlsx" ? new XSSFWorkbook() : new HSSFWorkbook();
var sheet = workbook.CreateSheet();
//填充内容
for (var i = 0; i < list.Count; i++)
{
var subList = list[i];
var dataRow = sheet.CreateRow(i);
for (var j = 0; j < subList.Count; j++)
{
dataRow.CreateCell(j).SetCellValue(subList[j]);
}
}
for (var i = 0; i < list[0].Count; i++)
{
sheet.AutoSizeColumn(i);//列宽自适应,只对英文和数字有效
}
//保存
using (MemoryStream ms = new MemoryStream())
{
if (resultType == 1)
{
string savePath = "d:/website/files/" //本地文件保存路径
if (string.IsNullOrWhiteSpace(fileName)) fileName = Guid.NewGuid().GuidToString()+"." + fileTypeStr; //获取文件名称
string newPath = savePath + fileName;
using (FileStream fs = new FileStream(newPath, FileMode.Create, FileAccess.Write))
{
workbook.Write(fs);
}
result = newPath;
}
else //返回Base64字符串
{
workbook.Write(ms);
byte[] buffer = ms.ToArray();
ms.Close();
result = Convert.ToBase64String(buffer);
}
}
workbook.Close();
}
catch (Exception ex)
{
errorMsg = ex.Message;
return null;
}
return result;
}