Интересно, могу ли я задать направление листа excel справа налево... Я использую JXL Api.
заблаговременно
Баунти - это выравнивание справа налево и неправильное выравнивание
Интересно, могу ли я задать направление листа excel справа налево... Я использую JXL Api.
заблаговременно
Баунти - это выравнивание справа налево и неправильное выравнивание
Это можно сделать вручную (из поддержки 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));
}
});
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;
В настоящее время 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.
Чтобы задать направление справа налево при создании электронной таблицы:
Если вы хотите создать новую таблицу в 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