NPOI--操作Excel之利器(二)

本文详细介绍如何使用NPOI库生成复杂的Excel文件,包括创建和加载工作簿、操作表格内容、设置单元格样式及公式等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  回顾上一章,我们已经看到了NPOI的强大,使用NOPI我们可以生成一份完整的Excel,包含公式,包含千分位,包含单元格的合并等。在项目中第一次使用到NOPI,所以难免会遇到很多问题,我们可以在这个网站上找到相关的解决方案。

  如何在项目中使用这个组件,很简单,只需要去官方网站上下载相应的版本,然后添加应用后就可以使用了。

using NPOI.HSSF.UserModel;
using NPOI.HPSF;
using NPOI.POIFS.FileSystem;
using NPOI.Util;
using NPOI.HSSF.Util;

 其中最要的一个类NPOI.HSSF.UserModel.HSSFWorkbook,通过这个类可以加载,创建sheet等。

1.初始化HSSFWorkbook,可以通过加载模版的方式创建。

 1  /// <summary>
 2     /// 初始化WorkBook
 3     /// </summary>
 4     protected void InitializeWorkbook()
 5     {
 6         ///加载模版  
 7         string tempFilePath = HttpContext.Current.Server.MapPath("Template/配置器输出模板V1.0.XLS");
 8         using (FileStream fs = new FileStream(tempFilePath, FileMode.Open, FileAccess.Read))
 9         {
10             hssfworkbook = new NPOI.HSSF.UserModel.HSSFWorkbook(fs);
11         }
12         DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
13         dsi.Company = "NPOI Team";
14         hssfworkbook.DocumentSummaryInformation = dsi;
15 
16         SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
17         si.Subject = "NPOI SDK Example";
18         hssfworkbook.SummaryInformation = si;
19     }
初始化WorkBook

2.创建Sheet

///加载模版中的某个sheet
NPOI.HSSF.UserModel.HSSFSheet sheet1 = hssfworkbook.GetSheet("封面");

///创建一个新的 sheet
NPOI.HSSF.UserModel.HSSFSheet sheet1 = hssfworkbook.CreateSheet("封面");
Sheet

3.创建行、单元格

 1 ///获取某个Sheet
 2 NPOI.HSSF.UserModel.HSSFSheet sheet1 = hssfworkbook.GetSheet("价格总表");
 3 ///创建行  
 4 HSSFRow row = sheet1.CreateRow(sheet1.LastRowNum + 1);
 5 ///创建单元格 下标从0开始
 6 HSSFCell cellTitle =  row.CreateCell(0);
 7 
 8 
 9 ///也可以通过获取sheet的某一行  
10 //cellTitle = sheet1.GetRow(0).GetCell(0);
创建行

4.为单元格设置样式,设置公式

 1      /// <summary>
 2      /// 带边框的样式居中
 3      /// </summary>
 4      /// <returns>NPOI样式</returns>
 5      public HSSFCellStyle CellStyleCenter8()
 6       {
 7           HSSFCellStyle styleCenter = hssfworkbook.CreateCellStyle();
 8         styleCenter.Alignment = HSSFCellStyle.ALIGN_RIGHT;
 9         styleCenter.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.DARK_TEAL.index;
10         styleCenter.FillPattern = HSSFCellStyle.ALT_BARS;
11         styleCenter.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.DARK_TEAL.index;
12 
13         ///千分位
14         //HSSFDataFormat format = hssfworkbook.CreateDataFormat();
15         //styleCenter.DataFormat = format.GetFormat("¥#,##0");
16         styleCenter.DataFormat = HSSFDataFormat.GetBuiltinFormat("#,##0.00");
17 
18         HSSFFont font = hssfworkbook.CreateFont();
19         font.Boldweight = HSSFFont.BOLDWEIGHT_BOLD;
20         font.Color = HSSFColor.WHITE.index;
21     ///字号
22         font.FontHeightInPoints = 12;
23     ///字体是否倾斜
24         font.IsItalic = true;
25         ///字体
26         font.FontName = "微软雅黑";
27         styleCenter.SetFont(font);
28         styleCenter.WrapText = true;
29         styleCenter.VerticalAlignment = HSSFCellStyle.VERTICAL_CENTER;
30         styleCenter.BorderBottom = HSSFCellStyle.BORDER_THIN;
31         styleCenter.BorderLeft = HSSFCellStyle.BORDER_THIN;
32         styleCenter.BorderRight = HSSFCellStyle.BORDER_THIN;
33         styleCenter.BorderTop = HSSFCellStyle.BORDER_THIN;
34         return styleCenter;
35     }
36      
37  //为单元格赋值
38  cellTitle.SetCellValue("    总计");
39  //为单元格添加样式
40  cellTitle.CellStyle = CellStyleCenter8();
41  //为单元格设置公式
42  cellTitle.SetCellFormula(String.Format("SUM($D{0},$D{1},$D{2},$D{3},$D{4})", 12, 17, 25, 31, 37));
43  //公式可以跨sheet
44  cellTitle。SetCellFormula(string.Format("价格汇总表!D{0}", sheet1.LastRowNum + 1));
单元格样式、公式

5.冻结表头

///冻结表头
///第一个参数表示要冻结的列数;
//第二个参数表示要冻结的行数,这里只冻结列所以为2;
 //第三个参数表示右边区域可见的首列序号,从1开始计算;
//第四个参数表示下边区域可见的首行序号,也是从1开始计算;
sheet1.CreateFreezePane(0, 2, 0, 2);

//强制要求Excel在打开时重新计算
sheet1.ForceFormulaRecalculation = true;

 6.生成Excel

 1  /// <summary>
 2     ///生成Excel
 3     /// </summary>
 4     /// <param name="strFileName">文件名</param>
 5     /// <returns></returns>
 6     protected string WriteToFile(string strFileName)
 7     {
 8         string strVirtualPath = "TempFile/" + DateTime.Now.Year.ToString() + DateTime.Now.Month + DateTime.Now.Day + "/" + strFileName + "/";
 9         string strpath = System.Web.HttpContext.Current.Server.MapPath(strVirtualPath);
10         //如果没有改路径就创建一个
11         if (!System.IO.Directory.Exists(strpath))
12         {
13             Directory.CreateDirectory(strpath);
14         }
15         strpath = strpath + strFileName + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
16         strVirtualPath = strVirtualPath + strFileName + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
17         FileStream file = new FileStream(strpath, FileMode.Create);
18 
19         hssfworkbook.Write(file);
20         file.Close();
21         return strVirtualPath;
22     }
View Code

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/wishese/p/3331651.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值