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     }