Java 如何使用Apache POI XSSF创建从右向左对齐的图纸

Java 如何使用Apache POI XSSF创建从右向左对齐的图纸,java,apache-poi,xssf,Java,Apache Poi,Xssf,我正在尝试使用ApachePOI在Excel文件中创建一个工作表 因为它是Excel2007,所以我使用XSSF,并且我正在寻找一种方法来使工作表从右向左对齐 在HSSF中有一个方法org.apache.poi.HSSF.usermodel.HSSFSheet.setRightToLeft(boolean),但我在org.apache.poi.xssf.usermodel.XSSFSheet中找不到它 我正在使用ApachePOI3.7,因为它不在那里,您需要做一些工作,抱歉 首先,在excel

我正在尝试使用ApachePOI在Excel文件中创建一个工作表

因为它是Excel2007,所以我使用XSSF,并且我正在寻找一种方法来使工作表从右向左对齐

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


我正在使用ApachePOI3.7,因为它不在那里,您需要做一些工作,抱歉

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

一旦知道XML需要更改的内容,短期内,从POI中获取低级CT对象并使用这些对象对其进行操作。例如,您可以获取CTWorkbench,并在其上设置一个标志

最后,在POI bugzilla中报告缺少setter/getter的新bug。上传两个示例文件,可以在单元测试中使用,并包括有关更改的XML和需要设置的CT对象的信息。然后有人可以快速将该功能添加到POI。如果可以的话,在XSSFSheet中添加一个补丁也可以做到这一点

解决方法:

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

来源:

如果图纸对象是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();
    }
}

我收到了POI邮件列表的回复。这比你的建议容易一点:)我看到了你的建议,并提出你:)