Создание колонтитулов
Давайте запустим запись макроса создания колонтитула (меню в 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'Вторая строка';