![](/img/trans.png)
[英]How to create sheet with right-to-left alignment using Apache POI XSSF
[英]How to create excel sheet with right-to-left alignment using JXL
我想知道我是否可以将excel表的方向设置为从右到左......我正在使用JXL Api。
提前致谢
赏金是从右到左,而不是右对齐
目前JXL不支持此选项,但如果您愿意编辑和重新构建JXL,我有一个很好的解决方案。
从右到左选项被保存并在名为WINDOW2 record的文件的一部分中定义。 你可以看到在零件中定义的所有选项这里在部分窗口2 5.110。 在5.110.2选项标志下,您可以看到选项标志和从右到左选项的掩码值:
6 | 0040H | 0 = Columns from left to right | 1 = Columns from right to left
JXL create这个类中的excel文件的一部分--Window2Record 。
在构造函数方法中,您可以看到一些值是可配置的,一些是硬编码的:
public Window2Record(SheetSettings settings)
{
super(Type.WINDOW2);
int options = 0;
options |= 0x0; // display formula values, not formulas
if (settings.getShowGridLines())
{
options |= 0x02;
}
options |= 0x04; // display row and column headings
options |= 0x0; // panes should be not frozen
if (settings.getDisplayZeroValues())
{
options |= 0x10;
}
options |= 0x20; // default header
options |= 0x80; // display outline symbols
// Handle the freeze panes
if (settings.getHorizontalFreeze() != 0 ||
settings.getVerticalFreeze() != 0)
{
options |= 0x08;
options |= 0x100;
}
...
如您所见,选项“显示轮廓符号”被硬编码为真,因为它的掩码(0x80)总是添加到选项标志,而DisplayZeroValues可以通过给定的SheetSettings对象(具有getter和setter)的值进行配置。 。)
如果您愿意重建项目,可以通过添加以下行来硬编码从右到左的设置:
options | = 0x40; //从右到左的列
对于此构造函数,或者如果您希望它可配置,请向SheetSettings(以及它的getter和setter)添加一个新参数,并在Window2Record中为它添加正确的if子句。
这可以手动完成(从Microsoft Office支持)
“Excel选项”对话框中的“从右到左”选项从右到左定向新工作表。 该设置不适用于当前显示的工作表。 您可以在同一工作簿中将工作表从右到左,从左到右。
- 单击“Microsoft Office按钮”,然后单击“Excel选项”。 Excel选项按钮在哪里?
- 单击国际。
- 在“从右到左”和“默认”方向下,单击“从右到左”,然后单击“确定”。
- 插入新工作表,或打开新工作簿。
- 在Windows任务栏中(或在语言栏上,如果可见),单击“语言”图标,然后单击要使用的从右向左语言的名称。
- 如果需要更改文本的方向,请单击“字体对齐”组中“数据”选项卡上的“从右到左”按钮。
似乎JXL api不支持此功能。 您可以查看Apache Poi ( javadoc )或TeamDev的JExcel ( javadoc ),它更适合此类要求。 实施将类似于:
Poi方式:
XSSFSheet sheet = workbook.createSheet();
sheet.getCTWorksheet().getSheetViews().getSheetViewArray(0).setRightToLeft(true);
通过Jexcel:
final Application application = ...;
application.getOleMessageLoop().doInvokeAndWait(new Runnable() {
public void run() {
_Application app = application.getPeer();
app.setDefaultSheetDirection(new Int32(LocaleID.LOCALE_USER_DEFAULT), new Int32(Constants.xlRTL));
}
});
顺便说一下,如果你尝试使用setExcelRegionalSettings(IL)
或setExcelRegionalSettings(IL-JM)
是行不通的,因为这些是JXL唯一支持的国家:
public static final jxl.biff.CountryCode USA;
public static final jxl.biff.CountryCode CANADA;
public static final jxl.biff.CountryCode GREECE;
public static final jxl.biff.CountryCode NETHERLANDS;
public static final jxl.biff.CountryCode BELGIUM;
public static final jxl.biff.CountryCode FRANCE;
public static final jxl.biff.CountryCode SPAIN;
public static final jxl.biff.CountryCode ITALY;
public static final jxl.biff.CountryCode SWITZERLAND;
public static final jxl.biff.CountryCode UK;
public static final jxl.biff.CountryCode DENMARK;
public static final jxl.biff.CountryCode SWEDEN;
public static final jxl.biff.CountryCode NORWAY;
public static final jxl.biff.CountryCode GERMANY;
public static final jxl.biff.CountryCode PHILIPPINES;
public static final jxl.biff.CountryCode CHINA;
public static final jxl.biff.CountryCode INDIA;
public static final jxl.biff.CountryCode UNKNOWN;
在电子表格创建期间设置从右到左的方向:
当您希望在Jexcel中创建新的电子表格时:
调用工作表方法以创建新工作表作为工作表模板的副本。 这是Workbook类中的方法:
public static WritableWorkbook createWorkbook(java.io.File file, Workbook in) throws java.io.IOException
创建一个具有给定文件名的可写工作簿作为传入的工作簿的副本。一旦创建,可写工作簿的内容可能会被修改
要在创建后改变方向:
你可以手动创建一个名为AUTO_OPEN的excel宏,它将在电子表格打开时运行:
Application.DefaultSheetDirection = xlRTL ActiveSheet.DisplayRightToLeft = True
或者您可以使用JXL完成所有处理,关闭文件然后运行VBscript(与microsoft.office.interop.excel.dll连接):
Set xl = CreateObject("Excel.application") xl.Application.Workbooks.Open "yourworkbookpath\\yourworkbook.xls" xl.DefaultSheetDirection = xlRTL
您可以通过Process从java执行脚本
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.