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

2022-09-04 20:59:06

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

提前致谢

赏金大约是从右到左,而不是右对齐

enter image description here


答案 1

目前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 中为其添加 right if 子句。


答案 2

这可以手动完成(从Microsoft Office Support)

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

  1. 单击 Microsoft Office 按钮,然后单击 Excel Options。“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);

Via 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

顺便说一句,如果您尝试使用或无法正常工作,因为这些是JXL唯一支持的国家/地区:setExcelRegionalSettings(IL)setExcelRegionalSettings(IL-JM)

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;

推荐