繁体   English   中英

如何使用JXL创建具有从右到左对齐的Excel工作表

[英]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选项”对话框中的“从右到左”选项从右到左定向新工作表。 该设置不适用于当前显示的工作表。 您可以在同一工作簿中将工作表从右到左,从左到右。

  1. 单击“Microsoft Office按钮”,然后单击“Excel选项”。 Excel选项按钮在哪里?
  2. 单击国际。
  3. 在“从右到左”和“默认”方向下,单击“从右到左”,然后单击“确定”。
  4. 插入新工作表,或打开新工作簿。
  5. 在Windows任务栏中(或在语言栏上,如果可见),单击“语言”图标,然后单击要使用的从右向左语言的名称。
  6. 如果需要更改文本的方向,请单击“字体对齐”组中“数据”选项卡上的“从右到左”按钮。

似乎JXL api不支持此功能。 您可以查看Apache Poijavadoc )或TeamDev的JExceljavadoc ),它更适合此类要求。 实施将类似于:

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));
            }
        });

关于POI: 123

顺便说一下,如果你尝试使用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;

在电子表格创建期间设置从右到左的方向:

  • 手动创建具有从右到左文本方向的xls模板文件
  • 当您希望在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM