1

Тема: VB*: Формирование колонтитулов в книге Excel(номера страниц).

Столкнулся с маленькой проблемой при генерации рабочей книги из VB.NET - колонтитулы("Страница &P из &N") прописанные как в сгенерированнм макросе не отрабатывались(выводилось "Страница  из "). Оказалось проблема известна и связана с особенностями локализации различных версий офиса.
Печать офисных документов:Колонтитулы.
Суть решения в том чтобы прописать варианты и для русского кода и для английского:


.CenterFooter = "Страница &С&P из &К&N"

Неправильные с точки зрения конкретной версии офиса коды игнорируются и на выходе получаем "Страница 1 из 351".

P.S. В целом весьма любопытная статья по генерации html-документа для открытия в офисе - может кому-нибудь окажется полезна.
P.P.S. Отдельная анонимная благодарность пользователям SQL.RU, в чьём обсуждении я наткнулся на эту замечательную ссылку

2

Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).

BeS Yara, если не затруднит, напишите суть проблемы с примером кода, а также решение с комментарием. И тогда можно будет пополнить замечательную Коллекцию :-)

3 (изменено: BeS Yara, 2011-06-29 12:28:16)

Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).

Суть проблемы в том, что русский офис(2003) несмотря на то что генерирует в макрос коды для страницы и кол-ва страниц в колонтитула на английском, при добавлении этих кодов из VB.NET(судя по найденным тамам проблема общая и для других языков, на SQL.RU вообще делфи обсуждали ) колонтитулы не отображаются верно. А ведь запись макроса с последующей адоптацией в скрипт для многих основной метод получения знаний(по крайней мере для меня он первый, а уже потом хэлп, MSDN, яндекс).
Например записываем макрос с добавлением "Страница X из Y". После удаления всего лишнего остаётся:


Sub Макрос1()
    With ActiveSheet.PageSetup
        .CenterFooter = "Страница &P из &N"
    End With
End Sub

Что примечательно, в конструкторе колонтитула это выглядит иначе: "Страница &[Страница] из &[Страниц]"
В VB.NET кусок выглядит аналогично(я использовал для работы с экселем сборку Microsoft.Office.Interop.Excel). Из офиса макрос работает нормально, а вот при создании книги из VB.NET вместо "Страница 1 из 371" получается "Страница   из  " хотя если зайти в создание колонтитула видим законные(согласно записанному макросу) "Страница &P из &N"

Как выяснилось при прочтении статьи, локализованный офис не всегда принимает нелокализованные коды(формула в ячейке, кстати, тоже чувствительна к локализации - если попробовать в русском офисе использовать английскую функцию для суммы, например, можно в этом убедиться).
Так как приложение возможно будет запускаться не только с 2003-м и не только с руссифицированным, то вариант подставлять локализованные коды не подходит. Так вот в статье и предлагается указывать и английские коды и локализованные. В этом случае эксель игнорирует(и не отображает) те что не знает и отрабатывает знакомые:
Приводить всю процедуры смысла нет - проблема с конкретным свойством.


With oExcel.ActiveSheet.PageSetup
  .CenterFooter = "Страница &С&P из &К&N"
End With

и - буквы русские!

В конструкторе теперь получается "Страница &[Страница]&P из &[Страниц]&N"
На выходе при печати - "Страница 1 из 371"

P.S. Не знаю насколько тянет на коллекцию, хотя несколько ценных часов на поиск этого решения я потратил, так что лишним не будет(как часть Вашей темы "WSH: преобразуем макрос VBA в скрипт VBScript" ).

_____________________
Источник решения - SQL.RU> Delphi> Нумерация страниц в Excel

4

Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).

Отлично, спасибо. Перемещаю тему в раздел по VBA.

5

Re: VB*: Формирование колонтитулов в книге Excel(номера страниц).

Учитывая что как раз в офисе(в VBA) нормально работает с одними английскими кодами, эта информация более актуальна для VBS(VB.NET etc)
Например здесь WSH: преобразуем макрос VBA в скрипт VBScript @ JSman или здесь WSH: преобразуем макрос VBA в скрипт VBScript @ alexii. Да и объединить бы информацию из этих одноимённых тем в одну(в коллекцию) было бы полезно.