我正在尝试使用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
答案 0 :(得分:7)
解决方法:
XSSFSheet sheet = workbook.createSheet();
sheet.getCTWorksheet().getSheetViews().getSheetViewArray(0).setRightToLeft(true);
来源:http://thread.gmane.org/gmane.comp.jakarta.poi.user/17099/focus=17110
答案 1 :(得分:2)
因为它不存在,你需要做一些工作,对不起......
首先,在excel中创建一个从左到右的简单文件。然后,打开副本并在excel中将其设置为从右到左,然后保存。现在,解压缩两个文件(.xlsx是xml文件的zip文件),并对xml进行差异化以查看从右到左设置时发生的变化(我怀疑它只是/sheets/sheet1.xml会改变BICBW)
一旦你知道XML需要改变什么,短期内,从POI中获取低级CT对象并使用它们来操纵它。例如,您可能会获得CTWorkSheet,并在该
上设置一个标志最后,在POI bugzilla中报告缺少的setter / getter的新错误。上载可在单元测试中使用的两个示例文件,并包含有关已更改的XML和需要设置的CT对象的信息。然后,有人可以快速将该功能添加到POI。如果可以,请在XSSFSheet中添加一个补丁来执行此操作!
答案 2 :(得分: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();
}
}