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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.09.2006, 18:47   #1  
mmm is offline
mmm
Участник
 
33 / 43 (2) +++
Регистрация: 10.07.2002
Адрес: Ukraine
Экспорт в Excel с помощью OWC.Spreadsheet
Добрый день!

Имееться шаблон документа с табличной частью. Заранее неизвесто количество строк в табличной части, поэтому в шаблоне строка одна.

Как сделать так, что бы в формируемом документе, в табличной части повторялись строки нужное мне количество раз, и заполнялись данными из запроса. Желательно обращаться к ячейкам и строкам по имени.

Поделитесь мыслями.
Старый 27.09.2006, 09:17   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от mmm
Имееться шаблон документа с табличной частью. Заранее неизвесто количество строк в табличной части, поэтому в шаблоне строка одна.
Что у Вас понимается здесь под шаблоном: заранее заготовленный файл xls (xlt) или сам лежащий на форме ActiveX с одной инициализированной строкой?
Цитата:
Сообщение от mmm
Как сделать так, что бы в формируемом документе, в табличной части повторялись строки нужное мне количество раз, и заполнялись данными из запроса
Ну, в цикле, конечно . Варианта я вижу два:
1. Выводите все строки данных, потом формат первой строки копируете на все имеющиеся.
или
2. (изощренно-извращенный) Все время вставляете в первую строку, остальные смещаются вниз, зато сразу с форматом (напоминает строительство дома, когда все время строится первый этаж и подпихивается под остальные). Если в запросе была сортировка, то в этом случае она соответственно при выводе изменяется на противоположную, т.е. это нужно учитывать.
Цитата:
Сообщение от mmm
Желательно обращаться к ячейкам и строкам по имени.
Настоятельно рекомендую (с прицелом на будущее) всё же обращаться по числовым индексам строки и столбца, т.е. вместо "A1" ориентироваться на пару значений [row,col] = [1,1]

P.S. Вроде поиск по форуму по слову "Spreadsheet" дает довольно много тем... + что-то уже сразу есть в "Похожих темах" внизу этой страницы...

Последний раз редактировалось Gustav; 27.09.2006 в 09:29.
Старый 27.09.2006, 11:39   #3  
mmm is offline
mmm
Участник
 
33 / 43 (2) +++
Регистрация: 10.07.2002
Адрес: Ukraine
Шаблон форматата xml, где имееться шапка документа, плюс отформатированная строка, формат которой и должен быть у всех строк документа.
Так же имееться нижняя часть документа, которая выводиться после вывода всех строк.
Старый 27.09.2006, 11:50   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от mmm Посмотреть сообщение
Шаблон форматата xml
Тогда, может быть, к AndyD?
Старый 27.09.2006, 15:44   #5  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от mmm Посмотреть сообщение
...Как сделать так, что бы в формируемом документе, в табличной части повторялись строки нужное мне количество раз, и заполнялись данными из запроса...
Когда-то я дублировал строки (пустые, с форматированием) в шаблоне - пользовался ComExcelocument_RU.insertRow(...)
Для Spreadsheet можно сделать анологичным образом (см. вышеуказанный метод)
Старый 03.10.2006, 13:50   #6  
mmm is offline
mmm
Участник
 
33 / 43 (2) +++
Регистрация: 10.07.2002
Адрес: Ukraine
Цитата:
Сообщение от Gustav Посмотреть сообщение
Ну, в цикле, конечно . Варианта я вижу два:
1. Выводите все строки данных, потом формат первой строки копируете на все имеющиеся.
или
2. (изощренно-извращенный) Все время вставляете в первую строку, остальные смещаются вниз, зато сразу с форматом (напоминает строительство дома, когда все время строится первый этаж и подпихивается под остальные). Если в запросе была сортировка, то в этом случае она соответственно при выводе изменяется на противоположную, т.е. это нужно учитывать.
1. Не подскажите, как мне формат первой строки скопировать на остальные, что то не получаеться...

2. (изощренно-извращенный) метод дал потерю в скорости, но не большую, самое неприятное, что вставлять пришлось используя буфер, в результате, пока формируется отчет, курсор мышки как бешенный мерцает...
Старый 03.10.2006, 15:59   #7  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от mmm Посмотреть сообщение
1. Не подскажите, как мне формат первой строки скопировать на остальные, что то не получаеться...
Да, вынужден признать, что замечательного excel'ного метода PasteSpecial (чтобы скопировать только формат первой строки на все остальные) я у OWC.Spreadsheet, увы, не нашёл. Совет мой имел, конечно, "чисто эксельные корни"...

Тем не менее предлагаю следующую альтернативу - развертывать формат на следующую строку в цикле по мере вывода данных, т.е.

- стираете содержимое 1-й строки (если в ней есть какие-то старые или шаблонные данные)
- копируете 1-ю строку во 2-ю (поскольку 1-я пустая, то копируется только формат)
- выводите данные в 1-ю строку
- копируете 2-ю строку в 3-ю
- выводите данные в 2-ю строку
- копируете 3-ю строку в 4-ю
- и т.д. до последней записи в наборе данных
- по окончании можно удалить последнюю пустую строку после последней строки данных (в случае, если была цветная заливка или бордеры, иначе - можно и не удалять)
Цитата:
Сообщение от mmm Посмотреть сообщение
2. ...пока формируется отчет, курсор мышки как бешенный мерцает...
Попробуйте победить так:

Spreadsheet.ScreenUpdating( false );
..... (выводим данные).................
Spreadsheet.ScreenUpdating( true );

(для способа 1 это, кстати, тоже актуально!)


P.S. Вопрос "на засыпку": А где и с какой целью используете именно Spreadsheet для такого сложного форматирования? Может быть, обычный Excel подойдёт?

Последний раз редактировалось Gustav; 03.10.2006 в 16:11.
Старый 03.10.2006, 16:19   #8  
mmm is offline
mmm
Участник
 
33 / 43 (2) +++
Регистрация: 10.07.2002
Адрес: Ukraine
Цитата:
Сообщение от Gustav Посмотреть сообщение
Да, вынужден признать, что замечательного excel'ного метода PasteSpecial (чтобы скопировать только формат первой строки на все остальные) я у OWC.Spreadsheet, увы, не нашёл. Совет мой имел, конечно, "чисто эксельные корни"...

Тем не менее предлагаю следующую альтернативу - развертывать формат на следующую строку в цикле по мере вывода данных, т.е.

- стираете содержимое 1-й строки (если в ней есть какие-то старые или шаблонные данные)
- копируете 1-ю строку во 2-ю (поскольку 1-я пустая, то копируется только формат)
- выводите данные в 1-ю строку
- копируете 2-ю строку в 3-ю
- выводите данные в 2-ю строку
- копируете 3-ю строку в 4-ю
- и т.д. до последней записи в наборе данных
- по окончании можно удалить последнюю пустую строку после последней строки данных (в случае, если была цветная заливка или бордеры, иначе - можно и не удалять)
Я пользовался таким методом:
- В шаблоне присвоил имена, тем ячейкам, в которые нужно выводить информацию.
- Шаблон открывается отдельно, лист отчета отдельно.
- Вывожу первую строку данных в шаблон.
- Копирую ее и вставляю в лист отчета.
- Вывожу вторую строку данных в шаблон.
- Копирую ее и вставляю в лист отчета.
и т.д. до последней строки.

Цитата:
Сообщение от Gustav Посмотреть сообщение
Попробуйте победить так:

Spreadsheet.ScreenUpdating( false );
..... (выводим данные).................
Spreadsheet.ScreenUpdating( true );

(для способа 1 это, кстати, тоже актуально!)
уже пробывал не помогло, это видать где то в Windows нужно отключать, т.к. мерцание мыши происходит при вставке любых данных в Excel, только что проверил...
Старый 03.10.2006, 16:28   #9  
mmm is offline
mmm
Участник
 
33 / 43 (2) +++
Регистрация: 10.07.2002
Адрес: Ukraine
Цитата:
Сообщение от Gustav Посмотреть сообщение
P.S. Вопрос "на засыпку": А где и с какой целью используете именно Spreadsheet для такого сложного форматирования? Может быть, обычный Excel подойдёт?
Spreadsheet использую, так как изначально хотел использовать ComExcelDocument_RU, но почитав отзывы на форуме выбрал именно этот ActiveX компонент.
Старый 03.10.2006, 16:45   #10  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от mmm Посмотреть сообщение
Spreadsheet использую, так как изначально хотел использовать ComExcelDocument_RU, но почитав отзывы на форуме выбрал именно этот ActiveX компонент.
угу... понятненько... три вопроса:
1. Вы сам Spreadsheet где-то визуально отображаете или результат видите только уже в нормальном Excel'е? (хотя, наверное, отображаете, раз мышка скачет... )
2. Как используете его: обычно только пишете в него из Axapta или и читаете тоже?
3. Какова получается скорость вывода на лист - сколько строк-полей за сколько секунд?
Старый 03.10.2006, 17:20   #11  
mmm is offline
mmm
Участник
 
33 / 43 (2) +++
Регистрация: 10.07.2002
Адрес: Ukraine
Цитата:
Сообщение от Gustav Посмотреть сообщение
угу... понятненько... три вопроса:
1. Вы сам Spreadsheet где-то визуально отображаете или результат видите только уже в нормальном Excel'е? (хотя, наверное, отображаете, раз мышка скачет... )
Результат вижу уже в нормальном Excel'e.

Цитата:
Сообщение от Gustav Посмотреть сообщение
2. Как используете его: обычно только пишете в него из Axapta или и читаете тоже?
В основном пишу, чтение только шаблона.

Цитата:
Сообщение от Gustav Посмотреть сообщение
3. Какова получается скорость вывода на лист - сколько строк-полей за сколько секунд?
С момента старта до момента вывода Excel, для документа на 100 строк - 5 сек., для докумнета на 1000 строк - 53 сек.
Старый 03.10.2006, 17:36   #12  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от mmm Посмотреть сообщение
для докумнета на 1000 строк - 53 сек.
А тему, на которую я Вам выше ссылку дал, смотрели?
Цитата:
Сообщение от Gustav Посмотреть сообщение
Тогда, может быть, к AndyD?
Конкретно на это сообщение AndyD'а я "посылал" по причине XML, но вся-то тема как раз скорости посвящена, этим самым секундам...

Последний раз редактировалось Gustav; 03.10.2006 в 17:38.
Старый 03.10.2006, 18:12   #13  
mmm is offline
mmm
Участник
 
33 / 43 (2) +++
Регистрация: 10.07.2002
Адрес: Ukraine
Цитата:
Сообщение от Gustav Посмотреть сообщение
А тему, на которую я Вам выше ссылку дал, смотрели?
Конкретно на это сообщение AndyD'а я "посылал" по причине XML, но вся-то тема как раз скорости посвящена, этим самым секундам...
Смотрел, конечно же!
Просто в этой теме никто не задавался вопросом, а если мне нужно выгружать данные с определенным форматированием, не ухти каким, но все же форматированием, ради этого форматирования, я готов даже немного потерять во времени формирования отчета.

XML шаблон использовался, только из-за того что OWC.Spreadsheet с другими работать не может.
Старый 03.10.2006, 18:34   #14  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от mmm Посмотреть сообщение
Просто в этой теме никто не задавался вопросом, а если мне нужно выгружать данные с определенным форматированием, не ухти каким, но все же форматированием, ради этого форматирования, я готов даже немного потерять во времени формирования отчета.
Ну так мы там думали об этом "между строк" (а у AndyD'а там даже где-то есть какая-то красивая "тельняшка" через строку)

mmm, рекомендую:

1. возьмите нормальный Excel
2. откройте в нём свой шаблон (допустим, первая строка данных размещается в диапазоне A2:K2 - и эта строка у Вас заранее отформатирована)
3. выведите все свои данные, начиная с этой 2-й строки вниз по листу (допустим все данные разместятся в диапазоне A2:K1001 - 1000 строк)
4. после вывода всех данных выполните команды примерно такие (пока на VBA):

Range("A2").EntireRow.Copy
Range("A3:A1001").EntireRow.PasteSpecial xlPasteFormats
Application.CutCopyMode = False

(хм... при целых строчках EntireRow даже правая граница массива данных - столбец К - не потребовалась)

Всё! Переведите в X++ и всё замечательно получится
Старый 03.10.2006, 18:40   #15  
mmm is offline
mmm
Участник
 
33 / 43 (2) +++
Регистрация: 10.07.2002
Адрес: Ukraine
Ок, попробую сейчас потестить через Excel.
Теги
spreadsheet

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Экспорт в Excel exodus DAX: Программирование 1 23.01.2008 09:35
автоматическая выгрузка в Excel из SpreadSheet 11 NetBus DAX: Программирование 11 29.05.2007 17:56
Экспорт из Excel... soin DAX: Администрирование 10 24.01.2007 21:32
Использование OWC.Spreadsheet для ускорения экспорта/импорта в/из Excel. storer DAX: Программирование 24 28.03.2005 19:10
Экспорт в Excel через WorkBooks.OpenText() Владимир Максимов DAX: Программирование 2 09.04.2004 17:16

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

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

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