AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.09.2020, 18:52   #1  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Специальные именованные диапазоны Excel и работа с ними в DAX2012 при помощи OXML
Для использования в наследнике XmlExcelReport_RU стандартным образом создаю файл, который загружаю в ресурс, на его основе формируется отчет.
Мне нужно чтобы определенная строка повторялась на каждой странице при печати, для этого в настройках параметров страницы задаю «Сквозные строки». В диспетчере имен появилась строка с именем «Заголовки для печати» и нужным диапазоном.
Файл сохраняется, в его структуре в workbook.xml в узле <definedNames> появился узел
X++:
<definedName name="_xlnm.Print_Titles" localSheetId="1">!$5:$5</definedName>
То есть, все хорошо, открываем этот файл, в диспетчере имен так и есть «Заголовки для печати», в параметрах страницы сквозные строки заполнены.
В самом наследнике XmlExcelReport_RU с этим диапазоном не делаю вообще ничего. Движок считал из файла-образца (ну по стандарту – из ресурса сохранил во временный файл, открыл его, обработал) в том числе движок, поняв что есть именованный диапазон _xlnm.Print_Titles, при завершении работы (сохранении сформированного файла в темповый) именно с этим же именем и диапазоном и создал нужный узел.
Но при открытии параметров страницы оказалось, что поле сквозных строк пустое. Диспетчер имен показывает, что есть именованный диапазон, но он теперь называется не «Сквозные строки», а «Print_Titles». Вроде бы логично, именно с таким наименованием он сохранен в файле, но теперь Excel не воспринимает его как специальный диапазон для сквозных строк. В структуре файла все так же: в узле <definedNames> есть узел
X++:
<definedName name="_xlnm.Print_Titles" localSheetId="1">!$5:$5</definedName>
Делаю уже в файле результата опять настройку сквозных строк, в диспетчере имен появляется «Сквозные строки», имя «Print_Titles» остается, сохраняю файл, в его структуре теперь два узла:
X++:
<definedName name="_xlnm.Print_Titles" localSheetId="1">!$5:$5</definedName>
<definedName name="Print_Titles" localSheetId="1">!$5:$5</definedName>
Есть подозрение, что все это из-за локализованного Excel, но что с этим делать? Файл прошел через движок работы с OpenXML DAX2012 и сломался. Как заставить сформированный файл использовать специальные именованные диапазоны из образца?
Старый 04.09.2020, 19:09   #2  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Хотя, подумав, решил, что зря написал, что есть логика:
Цитата:
Вроде бы логично именно с таким наименованием он сохранен в файле
И в исходном файле и в файле результата name="_xlnm.Print_Titles", но при открытии в Excel исходного файла локализованное имя диапазона "Сквозные строки", а при открытии файла результата "Print_Titles".
Где тут собака порылась?
Старый 04.09.2020, 23:16   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Когда по ctrl-t выгружается данные в excel то в коде явно выставляется lcid соответствующий английской версии. Так что независимо от того какая версия excel стоит, формулы =sum(...) прописываются корректно. Может вам попробовать сделать что то аналогичное.
За это сообщение автора поблагодарили: Raven Melancholic (2).
Старый 05.09.2020, 11:20   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Вчера дал неверную информацию, видимо в конце предотпускного дня помутнение нашло.
В файле результата как раз не
X++:
<definedName name="_xlnm.Print_Titles" localSheetId="1">!$5:$5</definedName>
а
X++:
<definedName name="Print_Titles" localSheetId="1">!$5:$5</definedName>
Вторая строка с правильным name уже после установки сквозных строк вручную появилась.
В методе saveDefinedNames класса OxmlWorkBook_RU нужный definedName добавляется с именем _xlnm.Print_Titles, но в файле этот _xlnm. "съедается".
Понять бы почему и что нужно подкрутить.
PS: кстати, у _xlnm.Print_Area тоже _xlnm. пропадает в файле, остается только Print_Area.
О, только что заметил - внутри тегов XPP почему-то не все отображается - там в тексте Заказы!$5:$5, а отображает !$5:$5

Последний раз редактировалось Raven Melancholic; 05.09.2020 в 11:23.
Старый 07.09.2020, 14:13   #5  
VORP is offline
VORP
Участник
Аватар для VORP
 
146 / 95 (4) ++++
Регистрация: 26.05.2006
Возможно "специальные" именованные диапазоны должны быть или в начале или в конце списка definedNames.
Обратите внимание как они экселем создаются, возможно надо заполнять когда то в том же порядке.
За это сообщение автора поблагодарили: Raven Melancholic (2).
Старый 08.09.2020, 16:25   #6  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Важность порядка следования понял при реализации аналога protected - там четко нужно разместить теги защиты после определенного тега.
Но в сучаае нужных мне тегов проще - в файле результата именованные диапазоны Print_Titles и Print_Area вообще единственные (остальные в шаблоне не привязаны к конкретному листу, соответственно, saveDefinedNames их пропускает).
Попробовал на нескольких стандартных российских печатных формах, в которых устанавливается диапазон печати. У меня в них тоже записывается Print_Area, вместо _xlnm.Print_Area.
Что же это за пропадание _xlnm. именно в моем окружении (все таки думаю, что в стандартном приложении установка области печати тестировалась и работает - пусть там нет установки "сквозных" строк, но установка-то области печати есть).

Последний раз редактировалось Raven Melancholic; 08.09.2020 в 16:28.
Теги
excel, open xml

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axforum blogs: Excel OXML Book Protection Blog bot DAX Blogs 0 21.07.2015 01:13
Работа с Excel через COM и ошибка 0x800A03EC (Range.AutoFilter) gl00mie DAX: Программирование 15 30.03.2007 18:37
Сколько записей можно импортировать при помощи шаблонов Excel& Penguin DAX: Функционал 13 17.08.2005 13:36
COM и работа с шаблонами Excel skvach DAX: Программирование 6 04.12.2003 16:58
Совместная работа OLAP и Excel 2000 Lenin DAX: Прочие вопросы 1 09.07.2003 13:24

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:33.