04.09.2020, 18:52 | #1 |
Участник
|
Специальные именованные диапазоны 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> X++: <definedName name="_xlnm.Print_Titles" localSheetId="1">!$5:$5</definedName> <definedName name="Print_Titles" localSheetId="1">!$5:$5</definedName> |
|
04.09.2020, 19:09 | #2 |
Участник
|
Хотя, подумав, решил, что зря написал, что есть логика:
Цитата:
Вроде бы логично именно с таким наименованием он сохранен в файле
Где тут собака порылась? |
|
04.09.2020, 23:16 | #3 |
Участник
|
Когда по ctrl-t выгружается данные в excel то в коде явно выставляется lcid соответствующий английской версии. Так что независимо от того какая версия excel стоит, формулы =sum(...) прописываются корректно. Может вам попробовать сделать что то аналогичное.
|
|
|
За это сообщение автора поблагодарили: Raven Melancholic (2). |
05.09.2020, 11:20 | #4 |
Участник
|
Вчера дал неверную информацию, видимо в конце предотпускного дня помутнение нашло.
В файле результата как раз не X++: <definedName name="_xlnm.Print_Titles" localSheetId="1">!$5:$5</definedName> X++: <definedName name="Print_Titles" localSheetId="1">!$5:$5</definedName> В методе 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 |
Участник
|
Возможно "специальные" именованные диапазоны должны быть или в начале или в конце списка definedNames.
Обратите внимание как они экселем создаются, возможно надо заполнять когда то в том же порядке. |
|
|
За это сообщение автора поблагодарили: Raven Melancholic (2). |
08.09.2020, 16:25 | #6 |
Участник
|
Важность порядка следования понял при реализации аналога protected - там четко нужно разместить теги защиты после определенного тега.
Но в сучаае нужных мне тегов проще - в файле результата именованные диапазоны Print_Titles и Print_Area вообще единственные (остальные в шаблоне не привязаны к конкретному листу, соответственно, saveDefinedNames их пропускает). Попробовал на нескольких стандартных российских печатных формах, в которых устанавливается диапазон печати. У меня в них тоже записывается Print_Area, вместо _xlnm.Print_Area. Что же это за пропадание _xlnm. именно в моем окружении (все таки думаю, что в стандартном приложении установка области печати тестировалась и работает - пусть там нет установки "сквозных" строк, но установка-то области печати есть). Последний раз редактировалось Raven Melancholic; 08.09.2020 в 16:28. |
|