如何使用JXL创建右到左对齐的Excel表格

13

我想知道是否可以将Excel工作表的方向设置为从右到左...

我正在使用JXL API。

提前致谢。

赏金是关于从右到左而不是右对齐

输入图片说明


我猜一下,设置区域设置的方法对你有帮助吗(WorkbookSettings上的setExcelRegionalSettings())?我从未使用过这个API,所以为您创建一个测试用例会比我容易得多。 - Menno
@Imad JAMIL 你已经从JXL转换到Poi了吗? - Ido.Co
很酷,我以为这个问题是关于使用JXL进行从右到左对齐,而不是一般性的。我深入研究了JXL。 - Ido.Co
@ÖmerFarukAlmalı 你是什么意思? - Ido.Co
@ÖmerFarukAlmalı 我看到这可能需要一些时间,但只有赏金的一半会被授予。 - Ido.Co
显示剩余2条评论
3个回答

8

目前JXL不支持此选项,但如果您愿意编辑并重新构建JXL,则我有一个好的解决方案可行。

从右到左的选项保存在文件的一个部分中,称为WINDOW2记录。您可以在第5.110节WINDOW2的此处中查看所有定义的选项。在第5.110.2节选项标志下,您可以看到选项标志和从右到左选项的掩码值:

6 | 0040H | 0 = Columns from left to right | 1 = Columns from right to left

JXL创建这个类中的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;
    }
...

正如您所看到的,“显示大纲符号”选项硬编码为true,因为它的掩码(0x80)总是添加到选项标志中,而DisplayZeroValues可以通过给定的SheetSettings对象的值进行配置(该对象具有获取器和设置器...)

如果您愿意重建项目,可以通过添加以下行来硬编码您的从右到左设置:

options |= 0x40; // Columns from right to left

到这个构造函数,或者如果您想要可配置性,则向SheetSettings添加一个新参数(以及getter和setter),并在Window2Record中添加正确的if子句。


7

这个可以通过手动操作实现(来自Microsoft Office支持)。

在Excel选项对话框中,右到左选项将新工作表从右到左定向。该设置不适用于当前显示的工作表,您可以在同一个工作簿中既有从右到左又有从左到右的工作表。

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

看起来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;

1
Apache很好,我之前用过它,它允许在不破坏工作簿中的图表或高级设置的情况下进行编辑。 - NoBugs

0

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

  • 手动创建一个从右到左文本方向的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执行脚本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接