C#使用NOPI生成excel要点记载
很久没动手写博客了,最近由于公司比较忙,接触了不同类容,对自己的技术和业务理解有了更深入的理解。今天有点小空,将前段时间所运用到的一些知识点记录下来。
由于公司业务需要统计一些数据,所以对于我们来说,最后是整一个报表,免得随时都来找你导出数据,还需要写SQL,上服务器,导出数据,特别麻烦。所以得空做了报表的功能,其中附带了导出数据为excel。由于首次接触,以前也知识了解了一下,此次就深入的好好的研究了一下。对于报表的数据提取这些到没什么,主要是在导出数据和下载。经过了多方收集资料和对比之后,最后选定了NOPI做为导出excel的工具。至于其他的需要在本地服务器上安装软件什么的,觉得特别麻烦,觉得不可取。由于每个公司每个业务导出的报表样式及规则都不同,故这里只记录一下NOPI的要点。
1.创建一个Excel文件
HSSFWorkbook workbook = new HSSFWorkbook();
2.创建一个Excel的Sheet
HSSFSheet sheet = workbook.CreateSheet();
sheet.createFreezePane(, );// 冻结
3.设置每列宽度样式
方法一:
sheet.SetColumnWidth(, * );//注意,这里是和C#一样,从0开始
方法二:
//设置列宽 int columnWidth = sheet.GetColumnWidth() / ;//获取当前列宽度
int length = Encoding.UTF8.GetBytes(sheet.GetRow(index).GetCell(i).ToString()).Length;//获取当前单元格的内容宽度
if (columnWidth < length + )
columnWidth = length + ;
sheet.SetColumnWidth(i, columnWidth * );//列宽
4.设置样式
// Sheet样式
HSSFCellStyle sheetStyle = workbook.createCellStyle();
// 背景色的设定
sheetStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);
// 前景色的设定
sheetStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
// 填充模式
sheetStyle.setFillPattern(HSSFCellStyle.FINE_DOTS);
// 设置列的样式
for (int i = ; i <= ; i++) {
sheet.setDefaultColumnStyle((short) i, sheetStyle);
}
5.设置excel第一行及标题
HSSFRow title = sheet.CreateRow();
string[] titles = { "出团日期", "订单编号", "产品编号", "产品名称", "下单时间", "成人数", "儿童数", "销售价", "保险", "合同", "手续费", "实际收入" };
for (int i = ; i < titles.Length; i++)
{
title.CreateCell(i).SetCellValue(titles[i]);
}
6.设置单元格公式、样式
样式:
// 设置字体
HSSFFont headfont = workbook.createFont();
headfont.setFontName("黑体");
headfont.setFontHeightInPoints((short) );// 字体大小
headfont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗
// 另一个样式
HSSFCellStyle headstyle = workbook.createCellStyle();
headstyle.setFont(headfont);
headstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
headstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
headstyle.setLocked(true);
headstyle.setWrapText(true);// 自动换行
// 另一个字体样式
HSSFFont columnHeadFont = workbook.createFont();
columnHeadFont.setFontName("宋体");
columnHeadFont.setFontHeightInPoints((short) );
columnHeadFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 列头的样式
HSSFCellStyle columnHeadStyle = workbook.createCellStyle();
columnHeadStyle.setFont(columnHeadFont);
columnHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
columnHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
columnHeadStyle.setLocked(true);
columnHeadStyle.setWrapText(true);
columnHeadStyle.setLeftBorderColor(HSSFColor.BLACK.index);// 左边框的颜色
columnHeadStyle.setBorderLeft((short) );// 边框的大小
columnHeadStyle.setRightBorderColor(HSSFColor.BLACK.index);// 右边框的颜色
columnHeadStyle.setBorderRight((short) );// 边框的大小
columnHeadStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体
columnHeadStyle.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色
// 设置单元格的背景颜色(单元格的样式会覆盖列或行的样式)
columnHeadStyle.setFillForegroundColor(HSSFColor.WHITE.index); HSSFFont font = workbook.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short) );
// 普通单元格样式
HSSFCellStyle style = workbook.createCellStyle();
style.setFont(font);
style.setAlignment(HSSFCellStyle.ALIGN_LEFT);// 左右居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP);// 上下居中
style.setWrapText(true);
style.setLeftBorderColor(HSSFColor.BLACK.index);
style.setBorderLeft((short) );
style.setRightBorderColor(HSSFColor.BLACK.index);
style.setBorderRight((short) );
style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体
style.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色.
style.setFillForegroundColor(HSSFColor.WHITE.index);// 设置单元格的背景颜色.
// 另一个样式
HSSFCellStyle centerstyle = workbook.createCellStyle();
centerstyle.setFont(font);
centerstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
centerstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
centerstyle.setWrapText(true);
centerstyle.setLeftBorderColor(HSSFColor.BLACK.index);
centerstyle.setBorderLeft((short) );
centerstyle.setRightBorderColor(HSSFColor.BLACK.index);
centerstyle.setBorderRight((short) );
centerstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体
centerstyle.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色.
centerstyle.setFillForegroundColor(HSSFColor.WHITE.index);// 设置单元格的背景颜色. 公式:
//设置时间格式
HSSFCellStyle cellStyleGroupDate = workbook.CreateCellStyle();
HSSFDataFormat dateGroup = workbook.CreateDataFormat();
cellStyleGroupDate.DataFormat = dateGroup.GetFormat("yyyy-mm-dd");
//设置时间格式
HSSFCellStyle cellStyleInsertDate = workbook.CreateCellStyle();
HSSFDataFormat dateInsert = workbook.CreateDataFormat();
cellStyleInsertDate.DataFormat = dateInsert.GetFormat("yyyy-mm-dd hh:mm:ss");
//设置金额格式
HSSFCellStyle money = workbook.CreateCellStyle();
money.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00"); 给单元格设置公式
row.GetCell().CellStyle = cellStyleGroupDate;
7.填充数据
这不就有自己决定了,这里就不记录了
8.输出流,并下载
MemoryStream ms = new MemoryStream();
workbook.Write(ms);
string s = Request.Browser.Type;
if (s.IndexOf("IE") != -)
{
Response.AddHeader("Content-Disposition", string.Format("attachment;filename=" + HttpUtility.UrlEncode("XXXXX(" + begin.ToString("yyyy-MM-dd") + "---" + end.ToString("yyyy-MM-dd") + ")", System.Text.Encoding.UTF8) + ".xls"));
}
else
{
Response.AddHeader("Content-Disposition", string.Format("attachment;filename=" + HttpUtility.UrlEncode("用XXXXXXXX(" + begin.ToString("yyyy-MM-dd") + "---" + end.ToString("yyyy-MM-dd") + ")", System.Text.Encoding.UTF8) + ".xls"));
}
Response.BinaryWrite(ms.ToArray());
workbook = null;
ms.Close();
ms.Dispose();
C#使用NOPI生成excel要点记载的更多相关文章
- asp.net+nopi生成Excel遇到设置单元格值null问题
Npoi 生成excel报表功能很不错,功能也不用给大家介绍了.首先看遇到的问题吧! FileStream file = new FileStream(Server.MapPath("Tem ...
- Echarts 数据视图 生成Excel的方法
一.生成Excel,两大方向:1后台生成Excel 查询数据库,使用NOPI生成Excel.2前台js生成Excel三种方式1)jquery.table2excel.js --采用,优势:兼容IE和C ...
- c# 使用NOPI 操作Excel
最近项目需要导出Excel,找来找去,微软有自己的Excel组件 using Microsoft.Office.Core;using Microsoft.Office.Interop.Excel;,但 ...
- 两种方式实现java生成Excel
Web应用中难免会遇到需要将数据导出并生成excel文件的需求.同样,对于本博客中的总结,也是建立在为了完成这样的一个需求,才开始去了解其实现形式,并且顺利完成需求的开发,先将实现过程总结于此.本博文 ...
- 使用node.js生成excel报表下载(excel-export express篇)
引言:日常工作中已经有许多应用功能块使用了nodejs作为web服务器,而生成报表下载也是我们在传统应用. java中提供了2套类库实现(jxl 和POI),.NET 作为微软的亲儿子更加不用说,各种 ...
- Python实战 :2017国考职业表excel转数据库,再查询生成excel
最近看2017年国考的职业表,多而杂,不好过滤我想要的信息,特此把它转成Sqlite3数据库,再从数据库里把查询结果导出成excel,方便找职业. (后附上整套代码) 环境:python2.7 x ...
- phpexcel生成excel并下载
Loader::import('PHPExcel.Classes.PHPExcel'); // tp5中只需将phpexcel文件放入extend文件夹中,即可采用该方法引入,需要先 use thin ...
- java动态生成excel打包下载
@SuppressWarnings("unchecked") public String batchExport() throws DBException{ @SuppressWa ...
- JAVA利用JXL导出/生成 EXCEL
/** * 导出导出采暖市场部收入.成本.利润明细表 * @author JIA-G-Y */ public String exporExcel(String str) { String str=Se ...
随机推荐
- bzoj 1568 [JSOI2008]Blue Mary开公司 超哥线段树
[JSOI2008]Blue Mary开公司 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1808 Solved: 639[Submit][Sta ...
- CMDB服务器管理系统【s5day88】:采集资产之整合插件
以后导入配置文件不用去from conf而是导入from lib.config,因为在这可以导入global_settings和settings.py import sys import os imp ...
- jquery动画切换引擎插件 Velocity.js 学习02
案例实践: 第一页会以动画形式进入页面: 点击进入按钮时,第一页以动画消失,第二页以动画形式进入,同时四张图片也定义从小到大的动画形式: 第二页关闭按钮点击时,先是四张图片以缩小动画消失,然后第二页以 ...
- linux删除乱码
一:前沿 好久没有记载东西了,回来之后一直忙着改东西,我走之前项目是什么样,回来后也差不多.郁闷啊,努力敲代码,但是要敲出思想来啊.先会做,然后深入思考 二:内容 (1)每次使用rz命令向服务器上传代 ...
- svn全备加强版
svn版本库备份 官方建议使用如下方法备份(全备) svnadmin hotcopy path/to/repository path/to/backup 链接:https://tortoisesvn. ...
- 【uva12232/hdu3461】带权并查集维护异或值
题意: 对于n个数a[0]~a[n-1],但你不知道它们的值,通过逐步提供给你的信息,你的任务是根据这些信息回答问题: I P V :告诉你a[P] = V I P Q V:告诉你a[P] XOR a ...
- 【Atcoder】CODE FESTIVAL 2017 qual A D - Four Coloring
[题意]给定h,w,d,要求构造矩阵h*w满足任意两个曼哈顿距离为d的点都不同色,染四色. [算法]结论+矩阵变换 [题解] 曼哈顿距离是一个立着的正方形,不方便处理.d=|xi-xj|+|yi-yj ...
- 【BZOJ】1500: [NOI2005]维修数列
[算法]splay [题解]数据结构 感谢Occult的模板>_<:HYSBZ 1500 维修数列 #include<cstdio> #include<cctype> ...
- Django 1.10中文文档-第一个应用Part5-测试
本教程上接教程Part4. 前面已经建立一个网页投票应用,现在将为它创建一些自动化测试. 自动化测试简介 什么是自动化测试 测试是检查你的代码是否正常运行的行为.测试也分为不同的级别.有些测试可能是用 ...
- GNU Readline 库及编程简介【转】
转自:https://www.cnblogs.com/hazir/p/instruction_to_readline.html 用过 Bash 命令行的一定知道,Bash 有几个特性: TAB 键可以 ...