类:
public class Excel { private FileStream fs = null; private XSSFWorkbook workbook = null; public Excel(string path, string fileName) { if(!path.EndsWith(@"\")) { path = path + "\\"; } //如果文件夹不存在,则创建该文件夹 if(!Directory.Exists(path)) { Directory.CreateDirectory(path); } if(!fileName.EndsWith(".xlsx") && !fileName.EndsWith(".xls")) { fileName = fileName + ".xlsx"; } fs = new FileStream(path + fileName, FileMode.OpenOrCreate); workbook = new XSSFWorkbook(); } /// <summary> /// 添加工作表 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sheetName">工作表的名称</param> /// <param name="titleName">表题名称</param> /// <param name="columnNames">表头名称</param> /// <param name="list"></param> public void AddSheet<T>(string sheetName, string titleName, string[] columnNames, IList<T> list) { XSSFSheet sheet = (XSSFSheet)workbook.CreateSheet(sheetName); int rowIndex = 0; //如果有表题名称则创建表题 if (!string.IsNullOrEmpty(titleName)) { XSSFRow headRow = (XSSFRow)sheet.CreateRow(rowIndex); headRow.Height = 20 * 30; //设置表头高 //合并单元格( CellRangeAddress()该方法的参数次序是:开始行号,结束行号,开始列号,结束列号。 ) sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, columnNames.Length - 1)); headRow.CreateCell(0, NPOI.SS.UserModel.CellType.String).SetCellValue(titleName); XSSFCellStyle headStyle = (XSSFCellStyle)workbook.CreateCellStyle(); //设置样式 XSSFFont font = (XSSFFont)workbook.CreateFont(); //字体 font.FontHeightInPoints = 20; font.Boldweight = 700; headStyle.SetFont(font); headRow.GetCell(0).CellStyle = headStyle; headStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; //水平对齐 headStyle.VerticalAlignment = VerticalAlignment.Center; //垂直对齐 rowIndex++; } //如果有表头则创建表头 if (columnNames != null) { XSSFRow topRow = (XSSFRow)sheet.CreateRow(rowIndex); XSSFCellStyle topStyle = (XSSFCellStyle)workbook.CreateCellStyle(); XSSFFont topfont = (XSSFFont)workbook.CreateFont(); topfont.FontHeightInPoints = 10; topfont.Boldweight = 700; topStyle.SetFont(topfont); int tag = 0; foreach (string column in columnNames) { topRow.CreateCell(tag).SetCellValue(column); topRow.GetCell(tag).CellStyle = topStyle; //设置列宽 sheet.SetColumnWidth(tag, (column.Length * 256 * 4)); tag++; } rowIndex++; } CreateContent(sheet, list, rowIndex); //workbook.Add(sheet); } /// <summary> /// 输出文件 /// </summary> public void Output() { workbook.Write(fs); } /// <summary> /// 添加表内容 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sheet"></param> /// <param name="list"></param> /// <param name="nowRow"></param> private void CreateContent<T>(XSSFSheet sheet, IList<T> list, int nowRow) { T t = (T)Activator.CreateInstance(typeof(T)); PropertyInfo[] propertity = t.GetType().GetProperties();//取得Model类的所有公有属性 //4 填充内容 int rowCount = list.Count; for (int i = 0; i < rowCount; i++)//循环每一条内容 { int rowIndex = i + nowRow; XSSFRow dataRow = (XSSFRow)sheet.CreateRow(rowIndex);//创建一行 int cellCount = propertity.Length; for (int j = 0; j < cellCount; j++)//循环列 { PropertyInfo pro = propertity[j];//获取第j个属性 object objcellvalue = pro.GetValue(list[i], null);//获取第j个属性的值 if (objcellvalue == DBNull.Value || objcellvalue == null) { objcellvalue = DBNull.Value; } XSSFCell newCell = (XSSFCell)dataRow.CreateCell(j);//创建一个单元格 string cellValue = objcellvalue == DBNull.Value || objcellvalue == null ? "" : objcellvalue.ToString(); #region 转换 switch (objcellvalue.GetType().ToString()) { case "System.DateTime"://日期类型 newCell.CellStyle.DataFormat = workbook.CreateDataFormat().GetFormat("m/d/yy h:mm");//格式化显示 DateTime dateV; if (!DateTime.TryParse(cellValue, out dateV)) { newCell.SetCellValue(""); } else { newCell.SetCellValue(dateV); } break; case "System.Boolean"://布尔型 newCell.SetCellValue(cellValue == "" ? "False" : cellValue); break; default: newCell.SetCellValue(cellValue); break; } #endregion } } } }
调用:
var head = new string[] { "账号", "账号名称", "锁定客户数量", "账号状态", "最后登录时间" }; Excel excel = new Excel("D:\\download", "测试"); excel.AddSheet("表1", "表1表题", head, result);
var head_data = new string[] { "URMID", "企业名称", "服务到期时间", "合作金额", "最后登录时间", "在期职位数" }; excel.AddSheet("表2", $"{d.smanName}锁定的客户", head_data, d.cusls); excel.Output();