[英]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.