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);
}
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
}