Как создать лист excel с выравниванием справа налево с помощью JXL

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

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

щедрость находится справа налево, а не справа выравнивание

enter image description here

3 ответов


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

опция справа налево в диалоговом окне Параметры Excel ориентирует новое листы справа налево. Этот параметр не применяется к текущий лист отображается. Вы можете иметь листы, ориентированные вправо слева и слева направо в одной книге.

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

кажется, jxl api не поддерживает эту функцию. Вы можете посмотреть на Apache Poi (javadoc) или JExcel TeamDev (javadoc), что более подходит для такого рода требований. Реализация будет похожа на следующие:

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: 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;

В настоящее время 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 создайте эту часть файла 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 (который имеет геттер и сеттер...)

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

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

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


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

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

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

      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.офис.взаимодействие.превосходить.DLL-файла):

     Set xl = CreateObject("Excel.application")
     xl.Application.Workbooks.Open "yourworkbookpath\yourworkbook.xls"
     xl.DefaultSheetDirection = xlRTL
    

    вы можете выполнить скрипт с java через процесс