修改POI中公式不能显示中文的方法
来源:互联网 发布:初中学信息学奥赛vb 编辑:程序博客网 时间:2024/04/28 23:57
前几天做项目的过程中,利用到Apache项目中的POI来实现基于Excel的数据模板输出,其中利用公式的方式嵌入超链接进行网页链接访问。
自己做了一些处理EXCEL单元格的方法,但在进行公式处理时,由于POI的问题,显示的公式信息一直都是乱码,后来在网上找到一些朋友关于这些问题的解决方法,感觉帮助很大。因此,结合自己的实践经验,把修改POI内部源码的过程写出来,以其对资料做一整理,希望对后来的朋友也有所帮助。
1、首先,上网找到POI的发布版本的源码,我下的是poi-src-2.5.1-final-20040804.zip这个版本。
2、找到StringPtg.java这个文件,在解压后的/src/java/org/apache/poi/hssf/record/formula文件夹下面
3、利用文本编辑工具对StringPtg.java进行编辑
4、找到public StringPtg(byte [] data, int offset)这个方法,
对其修改如下
/** Create a StringPtg from a byte array read from disk */
public StringPtg(byte [] data, int offset)
{
offset++;
field_1_length = data[offset];
field_2_options = data[offset+1];
if (fHighByte.isSet(field_2_options)) {
// modified by rainsoft
// in excel chinese is stored two bytes HIGH bytes,LOW bytes
// field_3_string= StringUtil.getFromUnicode(data,offset+2,field_1_length);
field_3_string= StringUtil.getFromUnicodeHigh(data,offset+2,field_1_length);
}else {
field_3_string=StringUtil.getFromCompressedUnicode(data,offset+2,field_1_length);
}
//setValue(new String(data, offset+3, data[offset+1] + 256*data[offset+2]));
}
其中主要利用getFromUnicodeHigh方法替换原有的方法进行处理。
5、再查找StringPtg(String value),做如下的修改,
public StringPtg(String value) {
if (value.length() >255) {
throw new IllegalArgumentException("String literals in formulas cant be bigger than 255 characters ASCII");
}
this.field_2_options=0;
// add by rainsoft
// two bytes char options must be "1"
try {
if (value.length()!=value.getBytes("GBK").length)
this.field_2_options=1;
} catch (Exception e) {
}
// end add
this.fHighByte.setBoolean(field_2_options, false);
this.field_3_string=value;
this.field_1_length=(byte)value.length(); //for the moment, we support only ASCII strings in formulas we create
}
6、至此对源文件的修改就结束了,下一步则需要对其进行编译输出。
7、利用docs/howtobuild.html的描述进行编译输出。
8、成功编译输出的POI???????.jar文件,复制到原有的编译路径,替换到原有的文件即可,最好删除原有的 POI文件。
- 修改POI中公式不能显示中文的方法
- 解决MySQL不能显示中文的方法
- 使用POI处理Excel中公式不能自动计算出来的问题
- Poi处理Excel时公式不能更新的问题
- Poi处理Excel时公式不能更新的问题
- qvfb中不能显示中文
- vim中不能正常显示中文的解决方法
- navicat for mysql中不能显示中文的解决
- PL/SQL表中数据的中文不能正常显示
- PL/SQL表中数据的中文不能正常显示
- 关于ubuntu中node-canvas不能显示中文的解决方法
- 在MySQL中显示中文的方法
- Qt中显示中文的方法
- 关于Word中公式在写博客发表时不能正确显示的解决办法
- xshell显示中文为乱码的修改方法
- hp -ux 下不能显示中文方法
- hp -ux 下不能显示中文方法
- python中matplotlib画图中文不能显示
- 如何实现用户提交编辑的工作
- Soap 简单对象访问协议
- 悟空传
- 读人月神话笔记第一天
- CRC
- 修改POI中公式不能显示中文的方法
- CPU超频全方位攻略
- 人成长中必须知道的20个故事
- 男生心疼女生的12种方式
- cpu 简介
- 一位女生写的追MM秘计(菜鸟立马成高手)!!!
- 利用正则表达式检查时间的合法性
- 创世纪——上帝也是个二流程序员
- 网站收藏 主要是vb 也包含一些经典的程序网站