回顾上一章,我们已经看到了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. 系列文章--SharePoint 开发教程

    SharePoint 2013 图文开发系列之入门教程 学习地址:http://www.cnblogs.com/jianyus/p/3461719.html 里面有2007.2010.2013各个版本 ...

  2. 【转】如何分析解决Android ANR

    来自: http://blog.csdn.net/tjy1985/article/details/6777346 http://blog.csdn.net/tjy1985/article/detail ...

  3. mysql 加入列,改动列,删除列。

    MySQL 加入列,改动列,删除列 ALTER TABLE:加入,改动,删除表的列,约束等表的定义. 查看列:desc 表名; 改动表名:alter table t_book rename to bb ...

  4. 推荐《Linux 多线程服务器端编程》

    赖勇浩(http://laiyonghao.com) 最近,有一位朋友因为工作需要,需要从网游的客户端编程转向服务器端编程,找我推荐一本书.我推荐了<Linux 多线程服务器端编程——使用 mu ...

  5. android环境部署(1.1)

    前言 对于android文件的解释和说明下载,这里分享一个博客大家了解吧.这里作者提供的下载地址可能有无效的,关键是解析..... 转自:http://www.cnblogs.com/bjzhangh ...

  6. Python 读写文件和file对象(转)

    1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.txt ...

  7. 关于jsb中js与c++的相互调用

    1.js调用c++函数 在c++中声明函数,名为functionCpp,通过spidermonkey中jsapi的JS_DefineFunction绑定一个js函数,名为functionJS,此函数名 ...

  8. 开始研究Ray tracing

    几个月前面试时Boss问过我一个问题--"除了scanline渲染方法,你还知道什么其他渲染方式?",我没答出来,至今记忆犹新. 前段时间摆弄Intel VTune时看了它的示例代 ...

  9. 计算运行时间工具timeit

    Table of Contents 1. timeit的功能和用法 2. 其它 3. 参考资料 timeit的功能和用法 timeit 模块提供了测试一小段代码运行时间的功能.我前面有一篇文章用它来测 ...

  10. iso8583报文自学笔记

    一.8583报文组成 TPDU 报文头 应用数据 ISO8583 Msg ID 目的 地址 源地址 应用类别定义 软件 总版本号 终端 状态 处理 要求 保留使用(软件分版本号) 交易数据 60H N ...