Как создать лист Excel с выравниванием справа налево с помощью JXL - PullRequest
13 голосов
/ 31 декабря 2011

Интересно, смогу ли я установить направление листа Excel справа налево ... Я использую JXL Api.

заранее спасибо

Щедростьпримерно справа налево, а не вправо

enter image description here

Ответы [ 3 ]

8 голосов
/ 28 апреля 2013

В настоящее время JXL не поддерживает эту опцию, но у меня есть хорошее решение, которое будет работать, если вы захотите отредактировать и пересобрать JXL.

Опции справа налево сохраняются и определяются в разделе файла с именем WINDOW2 record.Вы можете увидеть все опции, определенные в части здесь в разделе 5.110 WINDOW2.В разделе 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 и setters ...)

Если вы хотите перестроитьВ проекте вы можете либо жестко закодировать свои настройки справа налево, добавив строку:

options | = 0x40;// Столбцы справа налево

для этого конструктора или, если вы хотите, чтобы он конфигурировался, добавьте новый параметр в SheetSettings (а также для получения и установки для него) и в Window2Record добавьтеправильно, если пункт для этого.

7 голосов
/ 24 апреля 2013

Это можно сделать вручную (из службы поддержки Microsoft Office)

Параметр «Справа налево» в диалоговом окне «Параметры Excel» ориентирует новые листы справа налево.Настройка не применяется к рабочему листу, отображаемому в данный момент.Рабочие листы могут быть ориентированы справа налево и слева направо в одной и той же книге.

  1. Нажмите кнопку Microsoft Office, а затем нажмите «Параметры Excel».Где находится кнопка «Параметры Excel»?
  2. Нажмите «Международный».
  3. В разделе «Слева направо» и «По умолчанию» нажмите «Слева направо», а затем нажмите «ОК».
  4. Вставьте новую рабочую таблицу или откройте новую рабочую книгу.
  5. На панели задач Windows (или на языковой панели, если она отображается) щелкните значок «Язык», а затем щелкните имя справа отлевый язык, который вы хотите использовать.
  6. Если вам нужно изменить направление текста, нажмите кнопку справа налево на вкладке «Данные» в группе «Выравнивание шрифта».

Кажется, JXL API не поддерживает эту функцию.Вы можете взглянуть на Apache Poi ( javadoc ) или JDcel TeamDev ( javadoc ), который больше подходит для такого рода требований,Реализация будет похожа на эти:

Путь пои:

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

О пои: 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;
0 голосов
/ 01 мая 2013

Чтобы установить направление справа налево при создании электронной таблицы:

  • Вручную создайте файл шаблона xls с направлением текста справа налево
  • Если вы хотите создать новую электронную таблицу в Jexcel:

    • открыть шаблон как рабочий лист
    • вызвать метод рабочего листа, чтобы создать новый рабочий лист как копию шаблона рабочего листа. Вот метод в классе Workbook:

      public static WritableWorkbook createWorkbook(java.io.File file,
                                                    Workbook in)
                                      throws java.io.IOException
      

      Создает доступную для записи рабочую книгу с заданным именем файла в качестве копии рабочей книги. передается. После создания содержимое записываемой книги может быть изменено

Чтобы изменить направление после создания:

  • вы можете вручную создать макрос Excel с именем AUTO_OPEN, который будет запускаться всякий раз, когда электронная таблица открыта:

        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
    

    Вы можете выполнить скрипт из Java с помощью Процесс

...