回顾上一章,我们已经看到了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,可以通过加载模版的方式创建。

  /// <summary>
/// 初始化WorkBook
/// </summary>
protected void InitializeWorkbook()
{
///加载模版
string tempFilePath = HttpContext.Current.Server.MapPath("Template/配置器输出模板V1.0.XLS");
using (FileStream fs = new FileStream(tempFilePath, FileMode.Open, FileAccess.Read))
{
hssfworkbook = new NPOI.HSSF.UserModel.HSSFWorkbook(fs);
}
DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company = "NPOI Team";
hssfworkbook.DocumentSummaryInformation = dsi; SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
si.Subject = "NPOI SDK Example";
hssfworkbook.SummaryInformation = si;
}

初始化WorkBook

2.创建Sheet

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

Sheet

3.创建行、单元格

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

创建行

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

      /// <summary>
/// 带边框的样式居中
/// </summary>
/// <returns>NPOI样式</returns>
public HSSFCellStyle CellStyleCenter8()
{
HSSFCellStyle styleCenter = hssfworkbook.CreateCellStyle();
styleCenter.Alignment = HSSFCellStyle.ALIGN_RIGHT;
styleCenter.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.DARK_TEAL.index;
styleCenter.FillPattern = HSSFCellStyle.ALT_BARS;
styleCenter.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.DARK_TEAL.index; ///千分位
//HSSFDataFormat format = hssfworkbook.CreateDataFormat();
//styleCenter.DataFormat = format.GetFormat("¥#,##0");
styleCenter.DataFormat = HSSFDataFormat.GetBuiltinFormat("#,##0.00"); HSSFFont font = hssfworkbook.CreateFont();
font.Boldweight = HSSFFont.BOLDWEIGHT_BOLD;
font.Color = HSSFColor.WHITE.index;
///字号
font.FontHeightInPoints = ;
///字体是否倾斜
font.IsItalic = true;
///字体
font.FontName = "微软雅黑";
styleCenter.SetFont(font);
styleCenter.WrapText = true;
styleCenter.VerticalAlignment = HSSFCellStyle.VERTICAL_CENTER;
styleCenter.BorderBottom = HSSFCellStyle.BORDER_THIN;
styleCenter.BorderLeft = HSSFCellStyle.BORDER_THIN;
styleCenter.BorderRight = HSSFCellStyle.BORDER_THIN;
styleCenter.BorderTop = HSSFCellStyle.BORDER_THIN;
return styleCenter;
} //为单元格赋值
cellTitle.SetCellValue(" 总计");
//为单元格添加样式
cellTitle.CellStyle = CellStyleCenter8();
//为单元格设置公式
cellTitle.SetCellFormula(String.Format("SUM($D{0},$D{1},$D{2},$D{3},$D{4})", , , , , ));
//公式可以跨sheet
cellTitle。SetCellFormula(string.Format("价格汇总表!D{0}", sheet1.LastRowNum + ));

单元格样式、公式

5.冻结表头

///冻结表头
///第一个参数表示要冻结的列数;
//第二个参数表示要冻结的行数,这里只冻结列所以为2;
//第三个参数表示右边区域可见的首列序号,从1开始计算;
//第四个参数表示下边区域可见的首行序号,也是从1开始计算;
sheet1.CreateFreezePane(, , , ); //强制要求Excel在打开时重新计算
sheet1.ForceFormulaRecalculation = true;

6.生成Excel

  /// <summary>
///生成Excel
/// </summary>
/// <param name="strFileName">文件名</param>
/// <returns></returns>
protected string WriteToFile(string strFileName)
{
string strVirtualPath = "TempFile/" + DateTime.Now.Year.ToString() + DateTime.Now.Month + DateTime.Now.Day + "/" + strFileName + "/";
string strpath = System.Web.HttpContext.Current.Server.MapPath(strVirtualPath);
//如果没有改路径就创建一个
if (!System.IO.Directory.Exists(strpath))
{
Directory.CreateDirectory(strpath);
}
strpath = strpath + strFileName + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
strVirtualPath = strVirtualPath + strFileName + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
FileStream file = new FileStream(strpath, FileMode.Create); hssfworkbook.Write(file);
file.Close();
return strVirtualPath;
}

NPOI--操作Excel之利器(二)的更多相关文章

  1. NPOI操作Excel辅助类

    /// <summary> /// NPOI操作excel辅助类 /// </summary> public static class NPOIHelper { #region ...

  2. NPOI操作excel之写入数据到excel表

    在上一篇<NPOI操作excel之读取excel数据>我们把excel数据写入了datatable中,本篇就讲如何把datatable数据写入excel中. using System; u ...

  3. C#开发中使用Npoi操作excel实例代码

    C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...

  4. 用NPOI操作EXCEL关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数

    2.4.1 用NPOI操作EXCEL关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数   NPOI教程:http://www.cnb ...

  5. C# 如何使用NPOI操作Excel以及读取合并单元格等

    C#操作Excel方法有很多,以前用的需要电脑安装office才能用,但因为版权问题公司不允许安装office.所以改用NPOI进行Excel操作,基本上一些简单的Excel操作都没有问题,读写合并单 ...

  6. 用NPOI操作EXCEL-锁定列CreateFreezePane()

    public void ExportPermissionRoleData(string search, int roleStatus) { var workbook = new HSSFWorkboo ...

  7. .NET 通过 NPOI 操作 Excel

    目录 .NET 通过 NPOI 操作 Excel 第一步:通过 NuGet 获取 NPOI 包并引入程序集 第二步:引入 NPOI 帮助类 第三步:在程序中调用相应的方法对数据进行导出导入操作 将 D ...

  8. 2.6.2 用NPOI操作EXCEL--设置密码才可以修改单元格内容

    2.6.2 用NPOI操作EXCEL--设置密码       有时,我们可能需要某些单元格只读,如在做模板时,模板中的数据是不能随意让别人改的.在Excel中,可以通过“审阅->保护工作表”来完 ...

  9. 使用NPOI操作Excel文件及其日期处理

    工作中经常遇到需要读取或导出Excel文件的情况,而NPOI是目前最宜用.效率最高的操作的Office(不只是Excel哟)文件的组件,使用方便,不详细说明了. Excel工作表约定:整个Excel表 ...

  10. C#通过NPOI操作Excel

    参考页面: http://www.yuanjiaocheng.net/webapi/create-crud-api-1-post.html http://www.yuanjiaocheng.net/w ...

随机推荐

  1. Gym 100531H Problem H. Hiking in the Hills 二分

    Problem H. Hiking in the Hills 题目连接: http://codeforces.com/gym/100531/attachments Description Helen ...

  2. Codeforces Round #339 (Div. 2) A. Link/Cut Tree 水题

    A. Link/Cut Tree 题目连接: http://www.codeforces.com/contest/614/problem/A Description Programmer Rostis ...

  3. POJ 2309 BST 树状数组基本操作

    Description Consider an infinite full binary search tree (see the figure below), the numbers in the ...

  4. 【JavsScript】XMLHttpRequest Level 2 使用指南

    XMLHttpRequest是一个浏览器接口,使得Javascript可以进行HTTP(S)通信. 最早,微软在IE 5引进了这个接口.因为它太有用,其他浏览器也模仿部署了,ajax操作因此得以诞生. ...

  5. 【Backbone】简介

    1.Model 2.Collection 3.View 4.Router 5.History 6.Events http://addyosmani.github.io/backbone-fundame ...

  6. jQuery css() 方法

    $("p").css("background-color"); $("p").css("background-color" ...

  7. Swift2.0 中的String(三):类型转换

    本系列第三篇,String相关的类型转换.其他的几篇传送门(GitHub打不开链接的同学请自行把地址github改成gitcafe,或者直接去归档里找:-P): Swift2.0 中的String(一 ...

  8. iOS开发——UI篇Swift篇&UIDatePicker

    UIDatePicker //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControlle ...

  9. cocos2d-html5 笔记5: 事件

    在cocos2d里面,通过Node的方式,将整个场景以及里面的object给组织起来,这样很容易画了,从root node开始遍历,把整棵树画出来就是了. 剩下就是animation,timer, 还 ...

  10. mysql 参数read_rnd_buffer_size的真正含义

     http://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html  http://dev.mysql.com/doc/refman/ ...