Подтвердить что ты не робот

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

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

заблаговременно

Баунти - это выравнивание справа налево и неправильное выравнивание

enter image description here

4b9b3361

Ответ 1

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

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

  • Нажмите кнопку Microsoft Office и выберите "Параметры Excel" . Где кнопка "Параметры Excel" ?
  • Нажмите "Международный".
  • В поле "Право налево" и "По умолчанию" щелкните "Вправо-влево" и затем нажмите "ОК".
  • Вставьте новый лист или откройте новую книгу.
  • На панели задач Windows (или на панели "Язык", если она видна) щелкните значок "Язык", а затем щелкните имя справа налево, который вы хотите использовать.
  • Если вам нужно изменить направление текста, нажмите Кнопка "Право налево" на вкладке "Данные" в группе "Font Alignment".

Кажется, JXL api не поддерживает эту функцию. Вы можете взглянуть на Apache Poi (javadoc) или TeamDev JExcel (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));
            }
        });

О poi: 1, 2, 3.

Btw, если вы попробуете использовать 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;

Ответ 2

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

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

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

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

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

Ответ 3

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

  • Вручную создайте файл шаблона 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.office.interop.excel.dll):

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

    Вы можете выполнить script из java через Process