Особливості роботи з «українським» excel їм


Особливості роботи з «українським» Excel'ем

Особливості роботи з "українським" Excel'ем

Опис типів об'єктів, що застосовуються в прикладах:

У вас російська версія Excel?

Визначити наявність російської версії Excel можливо так:

Примітка:
в Office97 властивість LanguageSettings відсутня

Далі ми розглянемо прийоми роботи з "українським" Excel'ем.

Робота з властивістю об'єкта Range NumberFormat

Але, при спробі запису форматів з Delphi, з'ясовується, що NumberFormat і NumberFormatLocal поводяться ідентично, причому NumberFormat відповідає NumberFormatLocal (краще було б навпаки :). Тобто в російській версії все формати потрібно писати "по-російськи" (можна прямо в NumberFormat, в VBA - не можна).

Код на VBA (еталон): Код на Delphi:

Формат чисел. Роздільники. (DecimalSeparator, ThousendSeparator)

І це ще не все! Заходимо в настройки Excel'я "Сервіс / Параметри" переходимо на закладку "Міжнародні" і бачимо знову "Роздільник цілої та дробової частини", "Роздільник розрядів" і чекбокс "Використовувати системні роздільники". Тобто використання системних роздільників не може гарантувати правильного застосування при форматуванні чисел в Excel'е. Рішення: використовувати властивість ExcelApplication.International (про нього далі). Причому, навіть при встановленому властивості ExcelApplication.UseSystemSeparators = False і відмінних від системних ExcelApplication.DecimalSeparator і ExcelApplication.ThousandsSeparator, ExcelApplication.International відпрацює коректно.

Далі розглянемо приклади роботи (або не роботи), прийнявши "стандартні" настройки для українських Windows: Код на VBA (еталон): Код на Delphi:

Примітка:
в прикладах значення записуються в Value2 для запобігання форматування "на льоту" самим Excel'ем. Так число 123.45, записане в Value буде автоматично відформатовано Excel'ем в формат валюти, а привласнення Value = Date буде автоматично переведено в формат дати. Запис в Value2 "сприймає" значення як Double. Детальніше дивіться в довідці VBA для Excel'я.

Рішення (з використанням ExcelApplication.International):

Для отримання формату дати можна написати функцію: Для формату грошової одиниці:

Той же принцип можна застосувати до часу і іншим типам. Також дивіться інші індекси для властивості International (їх там багато) в довідці VBA. Наприклад, отримати "основний" (general) формат можна так:

Примітка:
встановити основний формат ще можна встановити, записавши в NumberFormat "порожню" рядок, тобто вказати, що немає форматування для чисел (дати): Range.NumberFormat: = '';

На жаль, не краща ситуація і з кольором в форматах. Тобто колір в Delphi можна задавати тільки по-російськи: Перелік кольорів по-російськи, які можна задавати в форматі: чорний, червоний, зелений, синій, фіолетовий, жовтий, білий. Список небагатий.

Формули на аркуші

На щастя, робота з властивостями Formula і FormulaLocal в VBA і Delphi ідентична і відповідають своїм назвам. Хочеться відзначити тільки один нюанс (це, до речі, дійсно і для VBA) - при написанні "українських" формул потрібно враховувати системну змінну ListSeparator. Так, якщо на іншому комп'ютері користувач змінить його зі стандартного для російської версії Windows символу ";" на "," (наприклад, як це роблю я :), то присвоєння Range.FormulaLocal: = '= округлі (A1 * B1; 2)'; викличе помилку! Тому, з урахуванням "роздільник елементів списку" потрібно писати так:

Тут приємніше і простіше користуватися англійськими формулами. Але, іноді, існує необхідність писати формули з вариантного масиву ...

Примітка:
системні змінні ListSeparator, DateSeparator описані в модулі System.

Запис формул з Variant-ного масиву

Запис в властивість Formula, FormulaLocal, Value, Value2 з Variant-ного масиву ідентична в українському Excel'е і при роботі з Delphi. Але, якщо ми хочемо вставляти формули прямо з масиву, всі вони повинні бути тільки українськими.

Примітка:
з прикладу видно, що під час запису з Variant-ного масиву в Formula, FormulaLocal, Value, Value2 не має значення, який стиль посилань використовується: A1 і R1C1 працюють ідентично. Але це не відноситься до властивостей FormulaR1C1 і FormulaR1C1Local, які приймають формули ТІЛЬКИ в стилі R1C1.

Давайте запустимо запис макросу створення колонтитула (меню в Excel "Сервіс / Макрос / Почати запис ..."). Тепер відкриємо параметри сторінки (меню "Файл / Параметри сторінки ..."). Створимо центральний нижній колонтитул "Лист [Сторінка] з [Сторінок] "шрифтом" Arial "," напівжирний "і розміром 8pt. Слова" Лист "і" з "з зображенням" звичайний ". Після" скорочення "макросу отримаємо:

Тобто при виведенні на друк ми хочемо, щоб в нижній колонтитул по центру виводився текст, наприклад "Лист 1 з 5".

Примітка:
якщо ви хочете побачити роботу вашого макросу в дії (щоб працював PrintPreview), обов'язково внесіть на лист хоч якісь дані.

Увага! Сумарна довжина тексту в нижньому або верхньому (лівий + по_центру + правий) колонтитулах не повинна перевищувати 250 символів (як і в комірці).

Висновок: при вставці кодів форматування з Delphi в український Excel повинні вставлятися тільки українські коди форматування. А де їх взяти? Ось список кодів форматування, отримані методом проби:

І ще один досвід:

Працює! Тобто накреслення (Style у класу TFont в Delphi) шрифтів можна впевнено писати по-англійськи. Або замінити на коди форматування:

Примітка:
для перекладу рядка в колонтитулі або осередку використовуйте симолів LF, ASCI код 10 (# 10):

При роботі з українським Excel'ем з Delphi необхідно дотримуватися таких правил:
  • при завданні форматів використовувати тільки українські формати чисел і дати;
  • при кольоровому форматуванні чисел вказувати кольори тільки російською мовою;
  • при записі формул з вариантного масиву використовувати тільки українські формули;
  • при створенні колонтитулів використовувати тільки українські коди форматування;
  • для сумісності з англійської версій необхідно перевіряти LCID інтрефейса користувача Excel'я і діяти відповідно.

Мені не вдалося знайти документацію, що стосується моментів описаних вище. Весь матеріал побудований чисто на власному досвіді. І ще: не було можливості перевірити на повністю англійських версіях Windows і Office.