NPOI在C#中的使用总结

目录

0.NPOI简单介绍

1.NPOI在C#中的安装与调用

2.NPOI查找行数和列数

3.NPOI创建单元格

4.NPOI合并单元格

5.NPOI执行公式

6.NPOI设置单元格格式和列宽

7.修改结果保存

8.NPOI使用过程中遇到的一些问题与解决办法


0.NPOI简单介绍

百度百科说NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作,NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目。

优势:可以在没有安装Office的电脑上对Word和Excel进行操作,开源免费。

1.NPOI在C#中的安装与调用

新建一个项目,在解决方案管理器中右击,点击管理NuGet程序包(N)

 在弹出的窗体浏览界面输入NPOI

 选中第一个NPOI,点击安装(因为我已经装好了所以显示是卸载)

安装完成后,添加引用

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;

然后就可以使用NPOI了。

2.NPOI查找行数和列数


  int lienum = sheet.GetRow(0).LastCellNum;//某一行的列数
  int rownum = sheet.LastRowNum;//所选表的行数

string filepath_save = filepath_sa + "\\" + filepath.Substring(filepath.LastIndexOf("\\") + 1);
IWorkbook workbook = null;
FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
if (filepath_save.IndexOf(".xlsx") > 0) // 2007版本
    workbook = new XSSFWorkbook(fs);
else if (filepath_save.IndexOf(".xls") > 0) // 2003版本
    workbook = new HSSFWorkbook(fs);
ISheet sheet = workbook.GetSheetAt(workbook.ActiveSheetIndex);
int lienum = sheet.GetRow(0).LastCellNum;//某一行的列数
int rownum = sheet.LastRowNum;//所选表的行数

3.NPOI创建单元格

sheet.CreateRow(i)//创建第i行

sheet.GetRow(i).CreateCell(j)//创建第i行的第j个单元格

sheet.ShiftRows(0, sheet.LastRowNum, 2, true, false);
sheet.CreateRow(0);
sheet.CreateRow(1);
IRow row1 = sheet.GetRow(0);
IRow row2 = sheet.GetRow(1);
for (int i = 0; i < lienum; i++) { row1.CreateCell(i); row2.CreateCell(i); }

4.NPOI合并单元格

先确定要合并的区域region,然后再执行AddMergedRegion函数

需要注意的是region的设置,CellRangeAddress(要合并单元格的第一行,要合并单元格的最后一行,要合并单元格的第一列,要合并单元格的最后一列)

NPOI中单元格的行数和列数均是从0开始

CellRangeAddress region1 = new CellRangeAddress(0, 0, 0, row1.LastCellNum - 1);
CellRangeAddress region2 = new CellRangeAddress(1, 1, 0, row2.LastCellNum - 1);
//合并首行
sheet.AddMergedRegion(region1);
//合并第二行注释行
sheet.AddMergedRegion(region2);

5.NPOI执行公式

sheet.GetRow(si).GetCell(j).SetCellFormula(formula_sum);

在单元格的SetCellFormula中设置要执行的公式,注意列的写法是ABCD这种的。

sheet.ForceFormulaRecalculation = true;//保证公式执行,而不是打开Excel表双击后公式才执行

string formula_sum = "SUM(" + sum_lie + 3.ToString() + ":" + sum_lie + sheet.LastRowNum.ToString() + ")";
sheet.GetRow(sheet.LastRowNum).GetCell(0).SetCellValue("合计");
sheet.GetRow(sheet.LastRowNum).GetCell(8).SetCellFormula(formula_sum);

6.NPOI设置单元格格式和列宽

ICellStyle cellstyle_title = workbook.CreateCellStyle();
// cellstyle_title.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");
cellstyle_title.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
cellstyle_title.VerticalAlignment = VerticalAlignment.Center;
// cellStyle.BorderBottom =;
IFont cellfont_title = workbook.CreateFont();
cellfont_title.FontName = "等线";
cellfont_title.FontHeightInPoints = 20;//设置字号
cellfont_title.IsBold = true;
cellstyle_title.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;//上
cellstyle_title.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;//下
cellstyle_title.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;//左
cellstyle_title.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;//右
cellstyle_title.SetFont(cellfont_title);
sheet.GetRow(1).Height = 55 * 20; //设置行高 Height的单位是1/ 20个点。例:设置高度为50个点

7.修改结果保存

fs.Close();
FileStream file = new FileStream(filepath_save, FileMode.Create);
workbook.Write(file);
file.Close();

8.NPOI使用过程中遇到的一些问题与解决办法

(1)单元格内容换行后,即使行高变大,还是不能完全显示,不便于成果的打印

ICellStyle notesStyle = workbook.CreateCellStyle();
notesStyle.WrapText = true;//设置换行这个要先设置
StringBuilder noteString = new StringBuilder("填写说明:\n");
noteString.Append("1、第一行的内容;\n");
noteString.Append("2、第二行的内容\n");
noteString.Append("3、第三行的内容\n");
noteString.Append("4、第四行的内容");
notesStyle.WrapText = true;

(2)小数位数的设置

sheet.GetRow(sheet.LastRowNum).GetCell(8).CellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");

(3)自动调整列宽

for (int i=0;i<lienum;i++) { sheet.AutoSizeColumn(i); }

  • 9
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值