·天新网首页·加入收藏·设为首页·网站导航
数码笔记本手机摄像机相机MP3MP4GPS
硬件台式机网络服务器主板CPU硬盘显卡
办公投影打印传真
家电电视影院空调
游戏网游单机动漫
汽车新车购车试驾
下载驱动源码
学院开发域名
考试公务员高考考研
业界互联网通信探索
您现在的位置:天新网 > 软件开发 > 开发文摘 > Java文摘
POI操作Excel一些中文问题的解决方法
http://www.Q.cc 2005年10月27日 vdragon

1.  设置工作表名
    (下文中提到的workbook为类org.apache.poi.hssf.usermodel.HSSFWorkbook的一个实例)
    如果使用workbook.createSheet(sheetname)或者使用workbook.setSheetName(1, "中文"),默认会使用ENCODING_COMPRESSED_UNICODE,在生成的Excel文件中会出现工作表名乱码。
    需要修改为

    workbook.setSheetName(1, "中文", HSSFWorkbook.ENCODING_UTF_16);

    public final static byte ENCODING_COMPRESSED_UNICODE = 0;
    public final static byte ENCODING_UTF_16             = 1;

    查看HSSFWorkbook.Java文件,发现setSheetName默认使用的encoding是ENCODING_COMPRESSED_UNICODE,这里需要指定为ENCODING_UTF_16。

    此处可以对比其他一些文档中说到的方法:workbook.setSheetName(1, "中文", (short)1)。对于这个(short)1却没有文档进行详细的说明。其实就是HSSFWorkbook中的ENCODING_UTF_16。

    继续跟踪下去可以发现,最后会使用类org.apache.poi.hssf.record.BoundSheetRecord中的方法。POI中的文档对此有说明:
    public void setCompressedUnicodeFlag(byte flag)
        set whether or not to intERPerate the Sheetname as compressed unicode (8/16 bit) (This is undocumented but can be found as Q187919 on the Microsoft(tm) Support site)

        Parameters:
            flag - (0/1) 0- compressed, 1 - uncompressed (16-bit)
   
    这个参数flag就是前面的encoding(HSSFWorkbook.setSheetName(int sheet, java.lang.String name, short encoding)中的第三个参数通过(byte)encoding进行转换得来的)。


2.  设置单元格
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    原始cell中不管是中文或者英文内容,用cell.getEncoding()得到的值都是0。如果要设置中文值,必须setEncoding(HSSFCell.ENCODING_UTF_16)。
    在其他文档中可以看到cell.setEncoding((short)1),其实是一样的。
    注意,默认会使用ENCODING_COMPRESSED_UNICODE,如果要设置的值是UTF-16编码,setEncoding必须在setCellValue之前调用。

上一篇: 【J2ME】 Debug 笔记(二)
下一篇: Java下通用自动插入数据组件的编制

关于我们 | 联系我们 | 加入我们 | 广告服务 | 投诉意见 | 网站导航
Copyright © 2000-2009 www.Q.cc, All Rights Reserved.
晨新科技 版权所有 Created by TXSite.net