26.09.2006, 18:47 | #1 |
Участник
|
Экспорт в Excel с помощью OWC.Spreadsheet
Добрый день!
Имееться шаблон документа с табличной частью. Заранее неизвесто количество строк в табличной части, поэтому в шаблоне строка одна. Как сделать так, что бы в формируемом документе, в табличной части повторялись строки нужное мне количество раз, и заполнялись данными из запроса. Желательно обращаться к ячейкам и строкам по имени. Поделитесь мыслями. |
|
27.09.2006, 09:17 | #2 |
Moderator
|
Цитата:
Сообщение от mmm
Имееться шаблон документа с табличной частью. Заранее неизвесто количество строк в табличной части, поэтому в шаблоне строка одна.
Цитата:
Сообщение от mmm
Как сделать так, что бы в формируемом документе, в табличной части повторялись строки нужное мне количество раз, и заполнялись данными из запроса
1. Выводите все строки данных, потом формат первой строки копируете на все имеющиеся. или 2. (изощренно-извращенный) Все время вставляете в первую строку, остальные смещаются вниз, зато сразу с форматом (напоминает строительство дома, когда все время строится первый этаж и подпихивается под остальные). Если в запросе была сортировка, то в этом случае она соответственно при выводе изменяется на противоположную, т.е. это нужно учитывать. Цитата:
Сообщение от mmm
Желательно обращаться к ячейкам и строкам по имени.
P.S. Вроде поиск по форуму по слову "Spreadsheet" дает довольно много тем... + что-то уже сразу есть в "Похожих темах" внизу этой страницы... Последний раз редактировалось Gustav; 27.09.2006 в 09:29. |
|
27.09.2006, 11:39 | #3 |
Участник
|
Шаблон форматата xml, где имееться шапка документа, плюс отформатированная строка, формат которой и должен быть у всех строк документа.
Так же имееться нижняя часть документа, которая выводиться после вывода всех строк. |
|
27.09.2006, 11:50 | #4 |
Moderator
|
Тогда, может быть, к AndyD'у?
|
|
27.09.2006, 15:44 | #5 |
Developer
|
Цитата:
Для Spreadsheet можно сделать анологичным образом (см. вышеуказанный метод) |
|
03.10.2006, 13:50 | #6 |
Участник
|
Цитата:
Сообщение от Gustav
Ну, в цикле, конечно . Варианта я вижу два:
1. Выводите все строки данных, потом формат первой строки копируете на все имеющиеся. или 2. (изощренно-извращенный) Все время вставляете в первую строку, остальные смещаются вниз, зато сразу с форматом (напоминает строительство дома, когда все время строится первый этаж и подпихивается под остальные). Если в запросе была сортировка, то в этом случае она соответственно при выводе изменяется на противоположную, т.е. это нужно учитывать. 2. (изощренно-извращенный) метод дал потерю в скорости, но не большую, самое неприятное, что вставлять пришлось используя буфер, в результате, пока формируется отчет, курсор мышки как бешенный мерцает... |
|
03.10.2006, 15:59 | #7 |
Moderator
|
Цитата:
Тем не менее предлагаю следующую альтернативу - развертывать формат на следующую строку в цикле по мере вывода данных, т.е. - стираете содержимое 1-й строки (если в ней есть какие-то старые или шаблонные данные) - копируете 1-ю строку во 2-ю (поскольку 1-я пустая, то копируется только формат) - выводите данные в 1-ю строку - копируете 2-ю строку в 3-ю - выводите данные в 2-ю строку - копируете 3-ю строку в 4-ю - и т.д. до последней записи в наборе данных - по окончании можно удалить последнюю пустую строку после последней строки данных (в случае, если была цветная заливка или бордеры, иначе - можно и не удалять) Попробуйте победить так: Spreadsheet.ScreenUpdating( false ); ..... (выводим данные)................. Spreadsheet.ScreenUpdating( true ); (для способа 1 это, кстати, тоже актуально!) P.S. Вопрос "на засыпку": А где и с какой целью используете именно Spreadsheet для такого сложного форматирования? Может быть, обычный Excel подойдёт? Последний раз редактировалось Gustav; 03.10.2006 в 16:11. |
|
03.10.2006, 16:19 | #8 |
Участник
|
Цитата:
Сообщение от Gustav
Да, вынужден признать, что замечательного excel'ного метода PasteSpecial (чтобы скопировать только формат первой строки на все остальные) я у OWC.Spreadsheet, увы, не нашёл. Совет мой имел, конечно, "чисто эксельные корни"...
Тем не менее предлагаю следующую альтернативу - развертывать формат на следующую строку в цикле по мере вывода данных, т.е. - стираете содержимое 1-й строки (если в ней есть какие-то старые или шаблонные данные) - копируете 1-ю строку во 2-ю (поскольку 1-я пустая, то копируется только формат) - выводите данные в 1-ю строку - копируете 2-ю строку в 3-ю - выводите данные в 2-ю строку - копируете 3-ю строку в 4-ю - и т.д. до последней записи в наборе данных - по окончании можно удалить последнюю пустую строку после последней строки данных (в случае, если была цветная заливка или бордеры, иначе - можно и не удалять) - В шаблоне присвоил имена, тем ячейкам, в которые нужно выводить информацию. - Шаблон открывается отдельно, лист отчета отдельно. - Вывожу первую строку данных в шаблон. - Копирую ее и вставляю в лист отчета. - Вывожу вторую строку данных в шаблон. - Копирую ее и вставляю в лист отчета. и т.д. до последней строки. уже пробывал не помогло, это видать где то в Windows нужно отключать, т.к. мерцание мыши происходит при вставке любых данных в Excel, только что проверил... |
|
03.10.2006, 16:28 | #9 |
Участник
|
Spreadsheet использую, так как изначально хотел использовать ComExcelDocument_RU, но почитав отзывы на форуме выбрал именно этот ActiveX компонент.
|
|
03.10.2006, 16:45 | #10 |
Moderator
|
Цитата:
1. Вы сам Spreadsheet где-то визуально отображаете или результат видите только уже в нормальном Excel'е? (хотя, наверное, отображаете, раз мышка скачет... ) 2. Как используете его: обычно только пишете в него из Axapta или и читаете тоже? 3. Какова получается скорость вывода на лист - сколько строк-полей за сколько секунд? |
|
03.10.2006, 17:20 | #11 |
Участник
|
Цитата:
Цитата:
С момента старта до момента вывода Excel, для документа на 100 строк - 5 сек., для докумнета на 1000 строк - 53 сек. |
|
03.10.2006, 17:36 | #12 |
Moderator
|
А тему, на которую я Вам выше ссылку дал, смотрели?
Цитата:
Сообщение от Gustav
Тогда, может быть, к AndyD'у?
Последний раз редактировалось Gustav; 03.10.2006 в 17:38. |
|
03.10.2006, 18:12 | #13 |
Участник
|
Цитата:
Просто в этой теме никто не задавался вопросом, а если мне нужно выгружать данные с определенным форматированием, не ухти каким, но все же форматированием, ради этого форматирования, я готов даже немного потерять во времени формирования отчета. XML шаблон использовался, только из-за того что OWC.Spreadsheet с другими работать не может. |
|
03.10.2006, 18:34 | #14 |
Moderator
|
Цитата:
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 |
Участник
|
Ок, попробую сейчас потестить через Excel.
|
|