簡體   English   中英

如何使用Apache POI XSSF創建從右到左對齊的工作表

[英]How to create sheet with right-to-left alignment using 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

解決方法:

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

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

因為它不在那里,你需要做一些工作,對不起......

首先,在excel中創建一個從左到右的簡單文件。 然后,打開副本並在excel中將其設置為從右到左,然后保存。 現在,解壓縮兩個文件(.xlsx是xml文件的zip文件),並對xml進行差異化以查看從右到左設置時發生了什么變化(我懷疑它只是/sheets/sheet1.xml改變了BICBW)

一旦你知道XML需要改變什么,短期內,從POI中獲取低級CT對象並使用它們來操縱它。 例如,您可能會獲得CTWorkSheet,並在其上設置一個標志

最后,報告丟失的setter / getter的POI bugzilla中的新錯誤。 上載可在單元測試中使用的兩個示例文件,並包含有關已更改的XML和需要設置的CT對象的信息。 然后,有人可以快速將該功能添加到POI。 如果可以,請在XSSFSheet中添加一個補丁來執行此操作!

如果工作表對象是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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM