我正在尝试使用 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
我正在尝试使用 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,并在其上设置一个标志
最后,在 POI bugzilla 中报告缺少 setter/getter 的新错误。上传两个示例文件,可以在单元测试中使用,并包含更改的 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();
}
}