1.添加NuGet包,右键管理NuGet程序包,在浏览中输入NPOI,搜索安装第一个
2.写方法
sheet.AddMergedRegion(new CellRangeAddress(1, 1, 4, 6));起始行,终止行,起始列,终止列
fs.close()很重要,没有的话会占进程
npoi版本太高导出的excel表会提示有错误,是否修复。
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
using System.Data.OleDb;
using System.Collections;
public int ExportToExcel(DataTable dt, string SavePath, string SheetName,string tablename, int startlie)
{
int count;
ISheet sheet = null;
FileStream fs = new FileStream(SavePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
if (SavePath.IndexOf(".xlsx") > 0) // 2007版本
workbook = new XSSFWorkbook();
else if (SavePath.IndexOf(".xls") > 0) // 2003版本
workbook = new HSSFWorkbook();
try
{ //正文格式
ICellStyle cellStyle = workbook.CreateCellStyle();
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0");
cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
cellStyle.VerticalAlignment = VerticalAlignment.Center;
// cellStyle.BorderBottom =;
IFont cellfont = workbook.CreateFont();
cellfont.FontName = "等线";
cellfont.FontHeightInPoints = 10;//设置字号
cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;//上
cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;//下
cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;//左
cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;//右
cellStyle.SetFont(cellfont);
//正文格式
if (workbook != null)
{
sheet = workbook.CreateSheet(SheetName);
}
else
{
return -1;
}
if (1==1) //写入DataTable的列名
{
IRow row0 =sheet.CreateRow(0);
row0.CreateCell(0).SetCellValue(tablename);
IRow row = sheet.CreateRow(1);
for (int j = 0; j < dt.Columns.Count- startlie; ++j)
{
row.CreateCell(j).SetCellValue(dt.Columns[j+ startlie].ColumnName);
}
IRow row3 = sheet.CreateRow(2);
IRow row4 = sheet.CreateRow(3);
for (int j = 0; j < dt.Columns.Count - startlie; ++j)
{
row3.CreateCell(j).SetCellValue("");
row4.CreateCell(j).SetCellValue("");
}
count = 4;
}
for (int i = 0; i < dt.Rows.Count; ++i)
{
IRow row = sheet.CreateRow(count);
row.CreateCell(0).SetCellValue(i+1);
for (int j = 0; j < dt.Columns.Count- startlie; ++j)
{
TextShow(dt.Rows[i][j + startlie].GetType().ToString()+ dt.Rows[i][j + startlie].ToString(), this.richTextBox1);
if ((dt.Rows[i][j + startlie].GetType().ToString() == "System.Double"|| dt.Rows[i][j + startlie].GetType().ToString() == "System.Int32") &&j>1) {
row.CreateCell(j, CellType.Numeric).SetCellValue(Convert.ToInt32(dt.Rows[i][j+ startlie]));
}
else { row.CreateCell(j).SetCellValue(dt.Rows[i][j+ startlie].ToString()); }
}
++count;
}
//合并单元格,根据具体需要进行调整
sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, dt.Columns.Count - startlie - 1));
sheet.AddMergedRegion(new CellRangeAddress(1, 2, 0, 0));
sheet.AddMergedRegion(new CellRangeAddress(1, 2, 1, 1));
sheet.AddMergedRegion(new CellRangeAddress(1, 2, 2, 2));
sheet.AddMergedRegion(new CellRangeAddress(1, 2, 3, 3));
sheet.AddMergedRegion(new CellRangeAddress(1, 2, 7, 7));
sheet.AddMergedRegion(new CellRangeAddress(1, 2, 8, 8));
sheet.AddMergedRegion(new CellRangeAddress(1, 1, 4, 6));
sheet.AddMergedRegion(new CellRangeAddress(3, 3, 0, 1));
sheet.GetRow(2).GetCell(4).SetCellValue("A:(2.5,3] km");
sheet.GetRow(2).GetCell(5).SetCellValue("B:(3,5] km");
sheet.GetRow(2).GetCell(6).SetCellValue("C: >5 km");
sheet.GetRow(3).GetCell(0).SetCellValue("合计");
//设置单元格格式,添加边框
for (int i = 0; i < sheet.LastRowNum+1; i++)
{
for (int j = 0; j < sheet.GetRow(i).LastCellNum; j++)
{
sheet.GetRow(i).GetCell(j).CellStyle = cellStyle;
}
}
IRow row_formula = sheet.GetRow(3);
for (int j = 2; j < row_formula.LastCellNum; j++) {
sheet.AutoSizeColumn(j);//自适应调整列宽
string formula = "SUM(" + dic_lie[j+1] + 5.ToString() +":"+ dic_lie[j+1]+(sheet.LastRowNum+1).ToString() + ")";
row_formula.GetCell(j).SetCellFormula(formula);
}
workbook.Write(fs); //写入到excel
fs.Close();
return count;
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
return -1;
}
}