簡體   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