原型转换成html,html_entity_decode() 将 HTML 实体转成字符原型

最终还是要使用NPOi了。刚开始做的是用com组件,发现如果本机不按照excel就不能使用,后来把其中一支改为了用Itextsharp产生pdf,但是还有几支批次要产生Excel,只能改用NPOI了。不过这也是一种学习了,呵呵,3种方法都用到了。

在文章开始必须先申明,我的NPOI组件版本为1.2.4

1.谈谈我用到Com组件和NPOi组件的感觉

》NPOI不用安装Excel,这也是我要换NPOI的主要原因

》NPOi组件产生Excel的速度明显感觉比COM组件快

》NPOI对Excel的操作没COM组件强大,可能毕竟都是微软的东西,举个例子,COM可以区域设置样式等,NPOI好像只能一个单元格设置

2.使用过程

(1)怎么产出

69c5a8ac3fa60e0848d784a6dd461da6.png

string strFileName ="my excel";//文件名称

string strPath = AppConfigString.FilePath + strFileName+".xls";//文件完整路径

HSSFWorkbook workbook = newHSSFWorkbook();

MemoryStream ms= newMemoryStream();

FileStream file= newFileStream(strPath, FileMode.Create);try{

ISheet sheet=workbook.CreateSheet(strFileName);//write sheet here

workbook.Write(ms);

ms.WriteTo(file);

ms.Flush();

}finally{

ms.Close();

file.Close();

}

69c5a8ac3fa60e0848d784a6dd461da6.png

(2)设计产生的Excel

基础操作一:为单元格赋值并合并单元格

69c5a8ac3fa60e0848d784a6dd461da6.png

sheet.AddMergedRegion(new CellRangeAddress(0, 2, 0, 4));

IRow row= sheet.CreateRow(0);

row.HeightInPoints= (float)28.5;

ICell cell= row.CreateCell(0);

cell.SetCellValue("XXXXXX \r\n XXXXXX");//必须设置style.WrapText = true 时\r\n才有效

cell.CellStyle = styleHead;

69c5a8ac3fa60e0848d784a6dd461da6.png

上面这段代码的意思是:合并第1行到第3行,第1列到第5列的的单元格,并为其设置高度为28.5,然后为此合并的单元格赋值和设置样式。

当然也可以不合并,直接为一个单元格赋值,这时去掉第一行的代码就ok了。

注意:NPOI的行和列是从0开始的

基础操作二:每列的列宽固定

由于要使报表美观,我做的报表的列宽是固定的

//要设置的实际列宽中加上列宽基数:0.72//sheet1.SetColumnWidth(0, 50 * 256);//在EXCEL文档中实际列宽为49.29

sheet.SetColumnWidth(0, (int)((20 + 0.72) * 256));//A

sheet.SetColumnWidth(1, (int)((25 + 0.72) * 256));//B

sheet.SetColumnWidth(2, (int)((15 + 0.72) * 256));//C

基础操作三:样式的设定

样式的设定就有点麻烦了,每个单元格都要单独设定样式

69c5a8ac3fa60e0848d784a6dd461da6.png

ICellStyle style =workbook.CreateCellStyle();

style.Alignment= HorizontalAlignment.CENTER;//左右居中

style.VerticalAlignment = VerticalAlignment.CENTER;//上下居中

style.WrapText = true;//自动换行

style.BorderBottom = CellBorderType.THIN;//下边框为细线边框

style.BorderLeft = CellBorderType.THIN;//左边框

style.BorderRight = CellBorderType.THIN;//右边框

style.BorderTop = CellBorderType.THIN;//上边框

style.FillForegroundColor = HSSFColor.YELLOW.index;//背景色为黄色

style.FillPattern = FillPatternType.SOLID_FOREGROUND;//填充图案为全色

IFont font =workbook.CreateFont();

font.FontName= "新細明體";

font.FontHeightInPoints= 12;

font.Boldweight= short.MaxValue;//加粗

style.SetFont(font);

69c5a8ac3fa60e0848d784a6dd461da6.png

基础操作四:把DataTable的数据写入例子

69c5a8ac3fa60e0848d784a6dd461da6.png

int IBeginCount = 7;//开始写数据的行数

int IColumnCount = 20;//数据列数

int ITotalCount = dt.Rows.Count;//表的数据行数

int IFoot = IBeginCount + ITotalCount;//开始写页尾的数

for (int i = IBeginCount; i < IBeginCount + ITotalCount; i++)

{

row=sheet.CreateRow(i);for (int j = 0; j < IColumnCount; j++)

{

cell=row.CreateCell(j);

cell.SetCellValue(dt.Rows[i-IBeginCount][j].ToString());if (j == 1)

{

cell.CellStyle=styleRed;

}else{

cell.CellStyle=styleTable;

}

}

}

69c5a8ac3fa60e0848d784a6dd461da6.png

上面四个操作就可以产生出基本的excel文件了

3.自己的一些研究

下面的都是自己的一些研究过程,有些地方还不太清楚,与大家一起学习下

自适应宽度

注意:里面有个问题,单元格的宽度不能大于255,所以还要在程序里面添加

If(length>255) length=255,不然如果有数据长度过长就会报错。

设置纯色的背景颜色

为了找到这个设置,自己鼓捣了一些时间

最容易想到的肯定是要直接设置了,这样简单粗暴

styleYellow.FillBackgroundColor =

HSSFColor.YELLOW.index;

styleYellow.FillPattern =

FillPatternType.SOLID_FOREGROUND;

我设置的为黄色,但是显示的确不是黄色,虽然有填充,但是却是黑色。

上面的方法不ok那我就要继续找了

看了NPOI的官方教程:NPOI 1.2.4 教程 –

2.2.6设置单元格的背景和图案

第一步:我设置

styleYellow.FillPattern =

FillPatternType.NO_FILL;

styleYellow.FillBackgroundColor =

HSSFColor.YELLOW.index;

可是根本就没有颜色,根本就没有填充,这时就算设置了FillForegroundColor了没用背景颜色

第二步:我随便选了一个图案进行设置

styleYellow.FillForegroundColor

= HSSFColor.BLACK.index;

styleYellow.FillBackgroundColor =

HSSFColor.YELLOW.index;

styleYellow.FillPattern =

FillPatternType.LESS_DOTS;

这时背景颜色是黄色,但是有图案进行干扰,值得注意的是,我不设置FillForegroundColor就没有FillBackgroundColor这个颜色,妈蛋,这是要闹哪样?我只想说,我不要图案。

最后我找到了方法

styleYellow.FillForegroundColor

= HSSFColor.YELLOW.index;

styleYellow.FillPattern =

FillPatternType.SOLID_FOREGROUND;

为什么是用图案的FillForegroundColor,图案的全是这个颜色就对了…

怎么设置行高自适应

COM组件有个AutoFit()方法全局设置为行高自适应,但是NPOI找了很久也没有找到,在网上也没这方面的例子。但是我发现有时候会自动调整高度,当设置了自动换行后,有些数据行会自动调整高度,有些则不会,但是当我为前几行设置高度后,就又可以自动调整高度了。不太清楚这个处理原理,求指教。

合并单元格

sheet.AddMergedRegion(new

CellRangeAddress(0, 0, 6, 15));

这里不讲用法,只是有个地方要注意下。

虽然合并时取的值是最左上角单元格的数据,但是我设置0行6列为有下边框,但是其他合并的单元格并没有下边框,说明样式不适用,还是乖乖的每个单元格加吧。

这些就是我的一些操作,当然NPOI还是比较博大精深的,还有待学习

原文:http://www.cnblogs.com/txw1958/p/PHP-html_entity_decode.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值