13

我想知道我是否可以将excel表的方向设置为从右到左......我正在使用JXL Api。

提前致谢

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

在此处输入图像描述

4

3 回答 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 对象(具有 getter 和 setter.. .)

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

选项|= 0x40;// 列从右到左

到此构造函数,或者如果您希望它可配置,请向 SheetSettings 添加一个新参数(以及它的 getter 和 setter),并在 Window2Record 中为其添加正确的 if 子句。

于 2013-04-28T11:18:28.240 回答
7

这可以手动完成(来自 Microsoft Office 支持)

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

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

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

关于 poi:1 , 2 , 3

顺便说一句,如果您尝试使用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;
于 2013-04-24T08:23:55.080 回答
0

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

  • 手动创建从右到左文本方向的 xls 模板文件
  • 当您希望在 Jexcel 中创建新电子表格时:

    • 将模板作为工作表打开
    • 调用 worksheet 方法来创建一个新的工作表作为工作表模板的副本。这是 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 执行脚本

于 2013-05-01T07:37:52.770 回答