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

5
我正在尝试使用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个回答

10
解决方法:

解决办法:

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

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

这是一篇关于使用Apache POI库处理Excel文件的线程。Apache POI库提供了一组API,允许开发人员创建、读取和修改Microsoft Office格式(Word、Excel和PowerPoint)文件。使用该库可以在Java应用程序中处理Excel文件。

2
由于该功能不存在,您需要做一些工作,抱歉...
首先,在Excel中创建一个从左到右的简单文件。然后,打开一个副本并在Excel中将其设置为从右到左,并保存。现在,解压缩这两个文件(.xlsx是xml文件的压缩包),并比较xml以查看在设置为从右到左时发生了什么变化(我猜只有/sheets/sheet1.xml会改变)。
一旦知道需要更改哪个XML,可以短期内使用POI中的低级CT对象来操作它。例如,可以获取CTWorkSheet,并在其中设置一个标志。
最后,在POI bugzilla中报告缺失的setter/getter的新错误。上传两个示例文件,这些文件可用于单元测试,并包括有关已更改的XML和需要设置的CT对象的信息。然后,有人可以快速将该功能添加到POI中。如果可以,请包括一个对XSSFSheet执行此操作的补丁!

我从POI邮件列表中得到了回复。这个方法比你的建议要简单一些 :) - Tarlog
2
我看到了你的简单建议,并向你提出了http://svn.apache.org/viewvc?rev=1152031&view=rev :) - Gagravarr

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接