Создание колонтитулов
Давайте запустим запись макроса создания колонтитула (меню в Excel "Сервис/Макрос/Начать запись…"). Теперь откроем параметры страницы (меню "Файл/Параметры страницы…"). Создадим центральный нижний колонтитул "Лист &[Страница] из &[Страниц]" шрифтом "Arial", "полужирный" и размером 8pt. Слова "Лист" и "из" с начертанием "обычный". После "сокращения" макроса получим:
Sub Макрос1() ' ActiveSheet.PageSetup.CenterFooter = _ "&""Arial""&8Лист &""Arial,полужирный""&P" & _ "&""Arial,обычный"" из &""Arial,полужирный""&N" End SubТ.е. при выводе на печать мы хотим, чтоб в нижний колонтитул по центру выводился текст, к примеру "Лист 1 из 5".
Примечание:
если вы хотите увидеть работу вашего макроса в действии (чтоб работал PrintPreview), обязательно внесите на лист хоть какие-нибудь данные.
Вроде бы все ясно, осталось только переписать его под 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):
#10'Вторая строка'; ASheet.Range['A1', EmptyParam].Value := 'Первая строка'
#10'Вторая строка';