NPOI--操作Excel之利器(二)
回顾上一章,我们已经看到了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之利器(二)的更多相关文章
- NPOI操作Excel辅助类
/// <summary> /// NPOI操作excel辅助类 /// </summary> public static class NPOIHelper { #region ...
- NPOI操作excel之写入数据到excel表
在上一篇<NPOI操作excel之读取excel数据>我们把excel数据写入了datatable中,本篇就讲如何把datatable数据写入excel中. using System; u ...
- C#开发中使用Npoi操作excel实例代码
C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...
- 用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 ...
- C# 如何使用NPOI操作Excel以及读取合并单元格等
C#操作Excel方法有很多,以前用的需要电脑安装office才能用,但因为版权问题公司不允许安装office.所以改用NPOI进行Excel操作,基本上一些简单的Excel操作都没有问题,读写合并单 ...
- 用NPOI操作EXCEL-锁定列CreateFreezePane()
public void ExportPermissionRoleData(string search, int roleStatus) { var workbook = new HSSFWorkboo ...
- .NET 通过 NPOI 操作 Excel
目录 .NET 通过 NPOI 操作 Excel 第一步:通过 NuGet 获取 NPOI 包并引入程序集 第二步:引入 NPOI 帮助类 第三步:在程序中调用相应的方法对数据进行导出导入操作 将 D ...
- 2.6.2 用NPOI操作EXCEL--设置密码才可以修改单元格内容
2.6.2 用NPOI操作EXCEL--设置密码 有时,我们可能需要某些单元格只读,如在做模板时,模板中的数据是不能随意让别人改的.在Excel中,可以通过“审阅->保护工作表”来完 ...
- 使用NPOI操作Excel文件及其日期处理
工作中经常遇到需要读取或导出Excel文件的情况,而NPOI是目前最宜用.效率最高的操作的Office(不只是Excel哟)文件的组件,使用方便,不详细说明了. Excel工作表约定:整个Excel表 ...
- C#通过NPOI操作Excel
参考页面: http://www.yuanjiaocheng.net/webapi/create-crud-api-1-post.html http://www.yuanjiaocheng.net/w ...
随机推荐
- C#实现Combobox自动匹配字符
不多说了,如图,应客户要求,下拉框中需要自动匹配字符,可能有些人一早就对此很熟,但相对于我还是首次使用,还是花了一点时间,现记录下来,也希望能帮助大家更好的理解. 首先要设定Combobox的Drop ...
- WatchKit Learning Resources
查看原文:http://leancodingnow.com/watch-kit-learning-resources/ WatchKit是Apple发布的用来开发Apple Watch应用的框架,本 ...
- C# 二进制字节流查找函数IndexOf
C# 二进制字节流查找函数IndexOf /// <summary> /// 报告指定的 System.Byte[] 在此实例中的第一个匹配项的索引. /// </summary&g ...
- ASP.NET Web Forms的改进
虽然ASP.NET Web Forms不是vNext计划的一部分,但它并没有被忽视.作为Visual Studio 2013 Update 2的一部分,它重新开始支持新工具.EF集成和Roslyn. ...
- cdoj 04 Complete Building the Houses 暴力
Complete Building the Houses Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/# ...
- linux C(hello world)
1.使用vi/vim进行编写代码并保存为hello_world.c.如下: /* This is my first C program*/ #include <stdio.h> int m ...
- 关于对defer的理解.
代码 <script defer> function init(){ document.getElementById("div").innerHTML="OK ...
- jquery easyui from 表单返回乱码!
如果用easyui的form进行提交,必须在<form>标签中加入属性method="post",即<form method="post"&g ...
- swift 3.0基本数据语法
swift 3.0 字符串的介绍 OC和Swift中字符串的区别 在OC中字符串类型时NSString,在Swift中字符串类型是String OC中字符串@"",Swift中字符 ...
- jQuery代码性能小细节
选择器Selector的使用 $("#id")使用id来定位DOM元素无疑是最佳提高性能方式,因为jQuery底层将直接调用本地方法document.getElementbyId( ...