1 //使用NPOI操作Excel 2 private void ExcelNPOI(System.Data.DataTable dt, HttpContext context) 3 { 4 IWorkbook workbook = null;//工作薄 5 IRow row = null;//行 6 ICell cell = null;//单元格 7 ISheet sheet = null;//工作表 8 try 9 { 10 //如果表中查询的有数据 11 if (dt != null && dt.Rows.Count > 0) 12 { 13 //创建工作薄 14 //workbook = new HSSFWorkbook(); //导出后缀为xls 15 workbook = new XSSFWorkbook();//导出后缀为xlsx 16 sheet = workbook.CreateSheet("Sheet1");//创建一个名称为Sheet1的表 17 int rowCount = dt.Rows.Count;//行数 18 int columnCount = dt.Columns.Count;//列数 19 20 //npoi设置Excel样式 21 ICellStyle cellStyle = workbook.CreateCellStyle(); 22 //设置单元格为数字格式 23 cellStyle.DataFormat = workbook.CreateDataFormat().GetFormat("0.00"); 24 //居中对齐 25 cellStyle.Alignment = HorizontalAlignment.Center; 26 cellStyle.VerticalAlignment = VerticalAlignment.Center; 27 //边框 28 cellStyle.BorderTop = BorderStyle.Thin; 29 cellStyle.BorderBottom = BorderStyle.Thin; 30 cellStyle.BorderLeft = BorderStyle.Thin; 31 cellStyle.BorderRight = BorderStyle.Thin; 32 //创建一个字体样式对象 33 NPOI.SS.UserModel.IFont FontRow = workbook.CreateFont(); 34 //设置字体样式 35 FontRow.FontName = "宋体"; 36 //设置字体加粗样式 37 FontRow.Boldweight = (short)FontBoldWeight.Bold; 38 //设置字体大小 39 FontRow.FontHeightInPoints = 12; 40 //是否加粗 41 //FontRow.IsBold = false; 42 //字体样式添加进去 43 cellStyle.SetFont(FontRow); 44 45 //合并单元格 起始行号,终止行号, 起始列号,终止列号 execl的行列都是从0开始,而不是从1开始 46 sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 5)); 47 48 //添加第一行 并赋值 49 row = sheet.CreateRow(0); 50 row.CreateCell(0).SetCellValue("值"); 51 cell = row.GetCell(0); 52 cell.CellStyle = cellStyle; 53 //添加第二行 定义表头 54 row = sheet.CreateRow(1); 55 //单元格赋值 56 row.CreateCell(0).SetCellValue("值"); 57 row.CreateCell(1).SetCellValue("值"); 58 row.CreateCell(2).SetCellValue("值"); 59 row.CreateCell(3).SetCellValue("值"); 60 row.CreateCell(4).SetCellValue("值"); 61 row.CreateCell(5).SetCellValue("值"); 62 63 //设置列宽 64 sheet.SetColumnWidth(0, 60 * 265); 65 sheet.SetColumnWidth(1, 17 * 265); 66 sheet.SetColumnWidth(2, 17 * 265); 67 sheet.SetColumnWidth(3, 17 * 265); 68 sheet.SetColumnWidth(4, 17 * 265); 69 sheet.SetColumnWidth(5, 17 * 265); 70 71 //设置行高 第一行 72 row = sheet.GetRow(0); 73 row.Height = short.Parse((22.5 * 20).ToString()); 74 //使用SetFont方法将字体样式添加到单元格样式中 75 cellStyle.SetFont(FontRow); 76 77 //设置行高 第二行 78 row = sheet.GetRow(1); 79 row.Height = short.Parse((18.5 * 20).ToString()); 80 //获得第二行的单元格 81 List<ICell> cells = row.Cells; 82 for (int i = 0; i < cells.Count; i++) 83 { 84 //获得当前行 85 cell = row.GetCell(i); 86 //设置样式 87 cell.CellStyle = cellStyle; 88 } 89 90 //写入数据 91 for (int i = 0; i < rowCount; i++) 92 { 93 //创建新行 94 row = sheet.CreateRow(i + 2); 95 //定义新行行高 96 row.Height = short.Parse((13.5 * 20).ToString()); 97 for (int j = 0; j < columnCount; j++) 98 { 99 if (j - 1 >= 0) 100 { 101 //创建新的单元格 102 cell = row.CreateCell(j - 1); 103 //赋值 104 cell.SetCellValue(dt.Rows[i][j].ToString()); 105 cell.CellStyle = cellStyle; 106 } 107 } 108 } 109 string Excelfile = context.Server.MapPath("路径"); 110 string path = context.Server.MapPath("excel再上一级的路径"); 111 DirectoryInfo folder = new DirectoryInfo(path); 112 //文件夹是否存在当前Excel 113 foreach (FileInfo file in folder.GetFiles("*.xlsx")) 114 { 115 if (file.FullName == Excelfile) 116 { 117 try 118 { 119 File.Delete(Excelfile); 120 } 121 catch (Exception ex) 122 { 123 Console.Write(ex.Message); 124 } 125 } 126 } 127 using (FileStream file = new FileStream(Excelfile, FileMode.Create)) 128 { 129 workbook.Write(file); //写入数据 创建文件。 130 file.Close(); 131 } 132 } 133 } 134 catch (Exception ex) 135 { 136 } 137 }