Delphi - сбориник статей


Создание колонтитулов


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

Sub Макрос1() ' ActiveSheet.PageSetup.CenterFooter = _ "&""Arial""&8Лист &""Arial,полужирный""&P" & _ "&""Arial,обычный"" из &""Arial,полужирный""&N" End Sub

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

Примечание:
если вы хотите увидеть работу вашего макроса в действии (чтоб работал PrintPreview), обязательно внесите на лист хоть какие-нибудь данные.

Внимание! Суммарная длина текста в нижнем или верхнем (левый + по_центру + правый) колонтитулах не должна превышать 250 символов (как и в ячейке).

Вроде бы все ясно, осталось только переписать его под Delphi:

ASheet.PageSetup.CenterFooter := '&"Arial"&8Лист &"Arial,полужирный"&P' + '&"Arial,обычный" из &"Arial,полужирный"&N';

Проверяем в Excel'е "Предварительный просмотр" - оба, и не работает! А как же должно работать?

Припоминая русификацию еще Excel'я 4-й версии, напишем русские эквиваленты:

ASheet.PageSetup.CenterFooter := '&"Arial"&8Лист &"Arial,полужирный"&С' + //
Страница - Page '&"Arial,обычный" из &"Arial,полужирный"&К'; //
Количество - Number

Сработало! Ну, и теперь добавим распознавание русской версии:



if XL.LanguageSettings.LanguageID[msoLanguageIDUI] = $0419 then ASheet.PageSetup.CenterFooter := //
русские коды форматирования '&"Arial"&8Лист &"Arial,полужирный"&С' + '&"Arial,обычный" из &"Arial,полужирный"&К' else ASheet.PageSetup.CenterFooter := //
английские коды форматирования '&"Arial"&8Лист &"Arial,bold"&P' + '&"Arial,normal" из &"Arial,bold"&N';

Вывод: при вставке кодов форматирования из Delphi в русский Excel должны вставляться только русские коды форматирования. А где их взять? Вот список кодов форматирования, полученных методом пробы:

Format codeРусский код форматирования Описание
&L Выравнивает последующие символы влево.
&C -"- по центру.
&R -"- вправо.
&E Двойное подчеркивание (double-underline) вкл. или выкл.
&X Верхний индекс (superscript) вкл. или выкл.
&Y Нижний индекс (subscript) вкл. или выкл.
&B Жирный (bold) вкл. или выкл.
&I Наклонный (italic) вкл. или выкл.
&U Подчеркнутый (underline) вкл. или выкл.
&S Зачеркнутый (strikethrough) вкл. или выкл.
&D Текущая дата.
&T Текущее время.
&F Имя документа (книги).
&A Имя листа.
&P Номер страницы.
&P+number &С+число Номер страницы + указанное число.
&P-number &С-число Номер страницы - указанное число.
&& && Одиночный ampersand.
& "fontname" &"ИмяШрифта[,начертание]" Печать указанным шрифтом [и начертанием] (не обязательно). Обязательно указывать в двойных кавычках.
&nn &nn Печать шрифтом указанного размера.
&N Общее количество страниц.


И еще один опыт:

ASheet.PageSetup.CenterFooter := '&"Arial"&8Лист &"Arial,bold"&С&"Arial,normal"
из &"Arial,bold"&К';

Работает! Т.е. начертания (Style у класса TFont в Delphi) шрифтов можно уверенно писать по-английски. Или заменить на коды форматирования:

ASheet.PageSetup.CenterFooter :=
'&"Arial"&8Лист &Ж&С&Ж из &Ж&К';

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

ASheet.PageSetup.CenterFooter := 'Первая строка'
#10'Вторая строка'; ASheet.Range['A1', EmptyParam].Value := 'Первая строка'
#10'Вторая строка';

Содержание раздела