NPOI自适应宽度不支持中文解决方案
来源:互联网 发布:unity3d 与apk 编辑:程序博客网 时间:2024/06/05 07:03
最近一个项目中涉及报表导出为excel功能需求。我最开始使用微软自身的excel COM组件调用的方式进行导出,发现当需要导出的内容增大到一定程度时,速度十分缓慢,而且调用COM组件需要在服务器端安装excel客户端,添加服务器对COM组件的调用权限,比较繁琐,后来在网上找了下相关信息,发现一个基于excel的操作组件NPOI,试了一下,导出速度比较理想,缩短1/5左右。
不过在处理中文时,需要表格列宽自动调整宽度时遇到问题,NPOI的自带函数AutoSizeColumn(int 列号)只能支持英文和数字,好吧,吐槽下,身为国人,中文确实给我带来很大困扰,为什么计算机不是中国人发明的:) 吐槽完问题还是需要解决,分析下主要的问题是不支持中文,英文和数字没有问题,那就先用AutoSizeColumn(int 列号)处理一下,然后单独解决中文,NPOI自身自带为列宽指定宽度函数SetColumnWidth(int 列号,int宽度),只需要遍历一下每一列的文字,求出文字的宽度,算出这一列的最大值,重新设置本列的宽度即可。
下面是具体代码:
//列宽自适应,只对英文和数字有效for (int i = 0; i <= maxColumn; i++){ sheet.AutoSizeColumn(i);}//获取当前列的宽度,然后对比本列的长度,取最大值for (int columnNum = 0; columnNum <= maxColumn; columnNum++){ int columnWidth = sheet.GetColumnWidth(columnNum) / 256; for (int rowNum = 1; rowNum <= sheet.LastRowNum; rowNum++) { IRow currentRow; //当前行未被使用过 if (sheet.GetRow(rowNum) == null) { currentRow = sheet.CreateRow(rowNum); } else { currentRow = sheet.GetRow(rowNum); } if(currentRow.GetCell(columnNum) != null) { ICell currentCell = currentRow.GetCell(columnNum); int length = Encoding.Default.GetBytes(currentCell.ToString()).Length; if (columnWidth < length) { columnWidth = length; } } } sheet.SetColumnWidth(columnNum, columnWidth * 256);}
需要注意的是列的宽度为 列宽*256,所以获得的宽度需要处以256得到真实的宽度,同样再设置的时候需要再乘上256才能得到正确的值。
我用的NPOI的版本是1.2.4,中文官方网站地址:http://tonyqus.sinaapp.com/。
- NPOI自适应宽度不支持中文解决方案
- 如何在NPOI中实现宽度自适应和高度自适应
- NPOI导出Excel - 自动适应中文宽度
- sass 不支持中文解决方案
- Unit3d 中文路径不支持解决方案
- 数据库不支持中文解决方案(mysql)
- vc2008 fstream不支持中文路径的解决方案
- vc2008 fstream不支持中文路径的解决方案
- vc2008 fstream不支持中文路径的解决方案
- Arcgis For Android 不支持中文解决方案
- git不支持中文的乱码解决方案
- 宽度自适应
- 自适应宽度
- JQERY EasyUI Tabs 选项卡 自适应浏览器宽度高度 解决方案
- Echarts一个页面多图图表宽度自适应解决方案
- 自适应布局---自适应宽度
- 【转载】koala 编译scss不支持中文解决方案(新增MAC解决方案)
- NPOI导出Excel - 自动适应中文宽度(帮助类下载)
- jQuery中的AJAX
- android json解析及简单例子
- TPC-W自动生成数据库数据
- C#的DataGridView在某一行附近插入一行。
- DOMContentLoaded
- NPOI自适应宽度不支持中文解决方案
- oracle左连接遇到的问题
- java final解释
- 为什么项目经理拿的钱比程序员多?
- OEMAddressTable介绍
- 2010年国外十大热门Android应用盘点
- OpenStack Nova 制作 Windows 镜像
- 网易有道IP, 手机号, 身份证好归属地查询API接口
- Linux 多播(组播)例程