如何使用Apache POI XSSF创建从右到左对齐的工作表

时间:2011-07-28 07:17:15

标签: java apache-poi xssf

我正在尝试使用Apache POI在Excel文件中创建工作表。

由于它是Excel 2007,我正在使用XSSF,而我正在寻找一种从右到左对齐的方法。

在HSSF中有一种方法org.apache.poi.hssf.usermodel.HSSFSheet.setRightToLeft(boolean),但我在org.apache.poi.xssf.usermodel.XSSFSheet找不到它。

我正在使用Apache POI 3.7

3 个答案:

答案 0 :(得分:7)

解决方法:

 XSSFSheet sheet = workbook.createSheet();
 sheet.getCTWorksheet().getSheetViews().getSheetViewArray(0).setRightToLeft(true);

来源:http://thread.gmane.org/gmane.comp.jakarta.poi.user/17099/focus=17110

答案 1 :(得分:2)

因为它不存在,你需要做一些工作,对不起......

首先,在excel中创建一个从左到右的简单文件。然后,打开副本并在excel中将其设置为从右到左,然后保存。现在,解压缩两个文件(.xlsx是xml文件的zip文件),并对xml进行差异化以查看从右到左设置时发生的变化(我怀疑它只是/sheets/sheet1.xml会改变BICBW)

一旦你知道XML需要改变什么,短期内,从POI中获取低级CT对象并使用它们来操纵它。例如,您可能会获得CTWorkSheet,并在该

上设置一个标志

最后,在POI bugzilla中报告缺少的setter / getter的新错误。上载可在单元测试中使用的两个示例文件,并包含有关已更改的XML和需要设置的CT对象的信息。然后,有人可以快速将该功能添加到POI。如果可以,请在XSSFSheet中添加一个补丁来执行此操作!

答案 2 :(得分:0)

如果工作表对象是XSSFSheet的实例,则可以使用反射。

private void setCurrentSheetRtl() {
    try {
        final Field sh = currentSheet.getClass().getDeclaredField("_sh");
        sh.setAccessible(true);
        final XSSFSheet shObj = (XSSFSheet) sh.get(currentSheet);
        final Method method = shObj.getClass().getDeclaredMethod("getSheetTypeSheetViews");
        method.setAccessible(true);
        final CTSheetViews ctSheetViews = (CTSheetViews) method.invoke(shObj);
        ctSheetViews.getSheetViewArray(0).setRightToLeft(true);
    } catch (Exception e) {
        e.printStackTrace();
    }
}