|
|
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
приходится делать крупный тчет в эксель это график занятости 200 сотрудников по 2 годам с точностью до дня промеры скорости показывают что 95% времени - управление экселом ( форматирование ячеек, вставка примечаний ) вот что уже использую: Set XL = CreateObject("excel.Application") XL.Calculation = -4135 ' xlManual XL.Interactive = False XL.DisplayAlerts = False XL.ScreenUpdating = False все равно медленно. может еще способы есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 16:19:32 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
Сократить до минимума обращения к OLE-объектам. Например, ячейки с одинаковым форматированием обрабатывать не по одельности, а одной командой(скопом, так сказать). Или вообще использовать книгу-шаблон, которая сама себя будет форматировать(т.е. будет содержать в себе форматирующий код)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 16:29:27 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
АлексейК <...> промеры скорости показывают что 95% времени - управление экселом ( форматирование ячеек, вставка примечаний ) <...> я бы сказал - 95% времени - управление "полем печати", буде оно затрагивается. РЗЫ совет PA абсолютно универсально правильный. Вариация на тему - копировать форматы с образцов на фактические диапазоны альтернативы - 1) пробовать owc.Spreadsheet.10 с последующим сохранением в книгу. (плюс - inprocess dll) 2) ваять файл напрямую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 16:43:32 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
АлексейКXL.Calculation = -4135 ' xlManual Формулы, наверное, есть? АлексейКпромеры скорости показывают что 95% времени - управление экселом Из них 80% - работа самого Ёкселя по расчетам формул. Наверное, все, что можно считать jet'ом, лучше им и считать. Кстати, .Calculation не оказывает влияния, по крайней мере, если вставлять формулы после заполнения ячеек, которые они считают. А вот и пример (запускать макрос "run me" или отчет - последний работает по результатам макроса): ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 21:15:07 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
Выложу и график. Ордината - время работы екселя. Абсцисса - количество заполняемых ячеек, от 100 до 6000 с шагом 100. График "значений" показывает время заполнения числами и форматирования диапазона из соответствующего числа ячеек. График "формул" - вставки соответствующего количества формул, суммирующих такое же количество ячеек с числами. График "формул без пересчета" - то же, что и предыдущее, только с .Calculation=-4135. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 21:28:01 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
да уж, гео научно подошел к вопросу.... в самом деле у меня формул на листе все го порядка 200 - 300 выходит , но по любому лучше их будет вставлять в конце скрипта. насчет форматирования скопом это хорошо , но в конкретном случае существенно усложнит алгоритм - сейчас идет последовательный анализ четырех источников данных и лист форматируется в соответствии с этим. наверное можно результат накапливать в массивах а потом выносить в эксел скопом, но это еще надо придумать как сделать... а вот по owc.Spreadsheet.10 идея нова для меня. этот контрол обладает всем функционалом ёкселя? примечания поддерживает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2004, 09:14:51 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
так же: - убрать нафиг все надстройки - книга будет окрыватся гораздо быстрей (помню после установки промпта с екцелевской надстройкой и включном антивирусе - файл окрывался около 30 сек) - отключить антивирус - проверить сам екцелевский файл (был у меня один такой: все аналогичные ему открываются 1 сек, этот более 5. Оказалось (почему-то) что при загрузке он окрывает панель отправка почты и грузит компоненты отлука (видно по SPY++). Далее оптимизация по коду: (может ты это и так пресно знаешь, но все же...): - работать с ецелем гораздо (на порядок) быстрей с объектом Range в котором находится массив обрабатываемых строк. Т.е. удалять и форматировать не построчно, а сразу кучей строк. >>наверное можно результат накапливать в массивах а потом выносить в эксел скопом, но это еще надо придумать как сделать... Лучше через CopyFromRecordSet ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2004, 09:42:13 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
авторЛучше через CopyFromRecordSet проблема в том что не столько много данных сколько раскраска, формат, вставка примечаний предполагаю что именно примечания тормозят вывод вот фрагментик чтоб было представление о чем речь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2004, 10:06:38 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
Есть подозрение, что АлексейК имеет случай, когда формулы стоящие в ячейках есть выражение ссылающееся на другие ячейки, которые представляют собой тоже формулы и так достаточно большой уровень вложенности, если это так так к примеру у меня такой случай привёл к таким показателям скорости выгрузки 120 записей, 4 уровня вложенности - получение нужного массива я для выгрузки 2 сек, передача в Excel - 20 сек (форматирование ячеек и сама передача + группировка), в моём случае шаблон не применим из-за варируемости входных данных, т.е. форматирование ячеек при экспорте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2004, 10:20:12 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
2 Proga вовсе нет, формулы простейшие. в каждом ряду в первой ячейке сумма строки разберусь - сообщу результаты. думаю должно помочь вставка формул последним действием - после вставки значений ЗЫ приятно что мой вопрос вызвал столько откликов. Не думал что можно что - то оптимизировать а тут столько решений .. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2004, 10:56:40 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
owc.spreadsheet комментариев не поддерживает. а медленно - это СКОЛЬКО времени? грубо - больше 7-10 сек или меньше? Если меньше - я бы сначала отдышался, прежде чем "опимизировать", если больше 30 - точно засучивать рукава надо. Есть правда запятая с комментариями - это фактически шейпы, создавать их относительно дорого - время твоего форматирования скорее всего временем создания шейпов определяется. Если у тебя количество (межпроцессных) передач данных порядка количества заполняемых ячеек - НЕМЕДЛЕННО выкинуть и переделать. - За вычетом времени подъема екселя выиграешь порядки по времени. идти надо строго по дороге PA вот как, например, можно задать цвет столбцам с нерабочими днями (стиль ссылок A1C1) With Range("B:C,H:I,M:N") .Font.ColorIndex = 3 With .Interior .ColorIndex = 36 .Pattern = 1 'xlSolid .PatternColorIndex = -4105 'xlAutomatic End With End with все-таки, попробуй сократить для начала суммарное количество вызовов по присвоению значений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2004, 11:39:20 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
по времени сейчас: грубо если отчет на один лист (по полугодию) и по группе из 10 человек - около 10 сек если порядка 300 человек и 4 листа (за 2 года) то до 30 минут сейчас пробую оптимизацию формул. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2004, 11:58:54 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
О-го!! Тогда целиком присоединяюсь к словам PA и Виктоши. Уменьши количество обращений к экселю. Формируй строки обращений в акцессе ("A:B, F:G, L:M") и обрабатывай диапазоны скопом. То, что ставится по умолчанию (xlSolid и т.п.), не переставляй еще раз. Все, что можно ставить CopyFromRecordset, им и ставь. Лучше сделать несколько запросов, если в один данные не влазят, и из них группами покласть. Посчитал на медленной машине: заполнение и форматирование 1000 ячеек ёкселя по одной из акцесса на небыстрой машине - 32.6 сек, заполнение и форматирование 10 раз по 100 ячеек - 0.74 сек. Формулы, тем более несложные, такого влияния не окажут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2004, 12:34:30 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
А никто не пробовал ХМЛ слепить типа <?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"><?xml version="1.0"?> .... а потом скормить его Excel'ю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2004, 12:46:51 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
Alexey ShА никто не пробовал ХМЛ слепить типа <?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"><?xml version="1.0"?> .... а потом скормить его Excel'ю? пробовал, оч. карашо,ОЧ. Могло бы заменить трансфер с усбехом, но 1) нет времени привести в приличный вид 2) разница в размерах файла с "родным" форматом нелинейно растет при увеличении числа заполненных клеток. что-то типа - xls - 400К, xml - 2M При этом на коротких таблицах из нескольких клеток - ровно наоборот - xml заметно компактнее xls. 3) с картинками, кажется, проблема. баловался в начале года, подробностей не помню. 4) усбех начиная с ексель2002, в 2000, все-таки, похоже надо html ваять, и формат его (того html-a) кажется умирающим. Примечания, между прочим, точно сохраняются. Нет уверенности, что доделаю, однако интерес есть, т.к. может оказаться в некоторых ситуациях наилучшим решением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2004, 15:41:48 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
снова засада вместо форматирования по ходу кода решил собрать для одинаковых типов ячеек строковые переменные со списком ячеек региона и трабл параметр метода range и функции convertformula не может быть больше 256 символов Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. блин придется бить строку на куски ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2004, 10:22:02 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
про длинную строку - отдельно, про стиль ссылок отдельно про стиль - просто установи нужный на этапе вычислений dim oldStyle oldStyle=XL.ReferenceStyle XL.ReferenceStyle = -4150 'xlR1C1 'много вычислений '... 'возвращаем 'XL.ReferenceStyle = 1 'xlA1 XL.ReferenceStyle =oldStyle про длину строки в любом случае 'типа : R9C4,R9C5,R9C6,R9C7,R9C8,R9C9,R9C10,R9C11,R9C12,R9C13,R9C14,R9C15,R9C16 лучше привести к виду 'типа : R9C4:R9C16 у тебя же клетки в строке подряд идут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2004, 11:17:24 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
Добавлю и я что ли пару строчек от себя. Самому приходится постоянно работать с выводом отчетом в Excel. Тут все правильно сказали, что главный тормоз - это обращение к Excel (как вариант уменьшения кол-ва раз обращений к Excel через макс. общие инструкции уже предлагали).... обращение к Excel именно через OLE-COM. Знакомая многим фишка в том, что макрос запускаемый из Access (через CreateObject(Excel.Application)) работает медленнее чем если бы этот же макрос запускали в САМОМ Excel'е. Однако не многие наверное знают, что для при частых обращениях в макросе к Excel через OLE, эта разница может быть в разы. Как вариант можно предложить АлексейК засунуть этот макрос в Excel и сообщить нам за сколько он отработал. Если разница будет очень ощутимой, можно подумать о том, чтобы не заниматься управлением Excel'ем через OLE, а просто запускать макрос в самом Excel'е. Макрос может быть уже записан там (в том же Personal.xls) или записать его в Excel на лету через библу VBIDE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2004, 11:57:45 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
Я видел библиотеки для формирования файла экселя напрямую, но 2года назад разобраться, как их правильно использовать, было ОЧЕНЬ не просто, зато скорости (с чухих слов) в сотни раз больше. IMHO, Mon$te® ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2004, 13:02:34 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
давайт попросим АлексейК довести до результата вариант Ускорение формирования экселовского отчета и Ускорение формирования экселовского отчета ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2004, 13:35:28 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
2 SergeySV разница БУДЕТ ощутимой, без если. Однако, ЕСЛИ ему уастся прийти к приемлемым временам через автоматизацию, то это и будет самый быстрый вариант макроса для непосредственного исполнения в эксель :) типа такое мое скромное мнение... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2004, 13:56:00 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
пока сделал функцию которой скармливаю диапазон ячеек в формате R1C1 и нужный формат она бъет регион на куски порядка 200 символов и применяет к глобальному обекту эксел сейчас лист из порядка 300 * 200 ячеек разрисовывает и заполняет данными около 10 секунд супротив 15 минут в предыдущем варианте существенный прогресс можно конечно подумать о оптимизации диапазонов: R1C1,R1C2,R1C3 - > R1C1:R1C3 но пока ничего быстрого не приходит в голову Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. в данный момент мне быстрее и не надо так как планирую запихнуть форматирование эксела в область ожидания ассинхронной загрузки данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2004, 15:44:28 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
2 АлексейК Поздравляю прогрессом ;) Дальше улучшения, конечно, не так заметны будут, но, все-таки как-то нездорово у тебя со строкой диапазонов вышло... Может, покажешь код, которым набираешь строку с диапазоном? Там наверно, что-то бегающее по рекордсету... Может кака мысь посетит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2004, 16:02:37 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
по рекордсету сотрудников по месяцам полугодия дням рекодсета месяца текущего сотрудника проверка условий на форматирование и набор строк типа: if .. FormatYelow = FormatYelow & "," & "R" & CRow & "C" & foundcol else FormatGreen = FormatGreen & "," & "R" & CRow & "C" & foundcol в конце вызов процедуры форматирования этих диапазонов: Call ExcelOut(FormatYelow, "", 36) Call ExcelOut(FormatGreen, "", 4) Call ExcelOut(FormatGrayMinus, "-", 15) Call ExcelOut(Format8, "8", "") Call ExcelOut(FormatSUMH, "=SUM(RC[1]:RC[222])", "") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2004, 16:48:35 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
авторпо рекордсету сотрудников по месяцам полугодия дням рекодсета месяца текущего сотрудника вопрос: это один запрос с джойном или 3 вложенных цикла? там еще комментарии с именами пректов проскакивали. вечером поковыряю в носу. Все таки полный код на тек. момент лучше было бвидеть. Ну, что-нибудь придумается.... (на вопрос: можно и не отвечать, если выложить структуру базы с примером заполнения на 2-3 строки, или тестовый файлик с кодом с прмером заполнения- если вырезается недолго) как накладываются 8 36 4 15 на данные 8 - видимо работал(?) 36 - выходной? 4-15 прогул-бюллетень? ЗЫ по заявленному, делал, наверно бы так - 1) сваял левый джойн календарной таблицы на сотрудников и табель 2) вычитал его в массив за раз (ADODB.Recordset.GetRows) 3) по размеру получившегося массива посчитал бы границы диапазона 4) типа MyRange.VAlue = XL.WorksheetFunction.Transpose(MyArrayFromDB) 5) добавил бы итоговый столбец 6) форматировал - возможно, хватило бы условного форматирования. где-то рядом перекресные таблицы со сводными запросами лежали - тоже можно поковырять, но на бегу очевидного предложения пока нет. Между прочим, xml-выгрузка тоже должна хорошо смотреться. Хотя по совокупности, может и не обгонит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2004, 18:05:43 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
2 Виктоша автор по рекордсету сотрудников по месяцам полугодия дням рекодсета месяца текущего сотрудника все гораздо более сложно чем может показаться на первый взгляд. 1 Учитываются выходные дни и праздники и переносы праздников по компании 2 учитывается прием на работу сотрудника его увольнение и периоды когда он был уволен а потом принят снова 3 учитывается занятость сотрудника в раздичных проектах вычисление каждого из этих факторов заложено в соответствующую хранимую процедуру - алгоритм расчета может меняться со временем а весь остальной код также базируется на этих процедурах. дабы дать понятие о составе процедурки вот пример сбора данных о занятости сотрудника в проекте по конкретному дню : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. можно конечно сделать процедуру собирающую данные из других процедур, но часть логики пока на клиенте (не всегда нужен отчет по всем сотрудникам и иногда вообще ой алгоритм ...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2004, 09:57:03 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
А вот это Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2004, 11:26:48 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
если динамически и зациклить - код красивее если статически - работает быстрее мне нужна в данном случае скорость ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2004, 12:29:41 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
2 АлексейК про перенос массива напрямую - это я просто глупость написал, в предположении, что дни занятости расположены по строкам. в целом твой вариант именно заполнения выглядит как оптимальный в своей идее. Cильно он мине приглянулся… Вот только с перечислением рядом сидящих диапазонов захотелось всё-таки разобраться. Вот сваял набросок класса для формирования адресной строки. Назвал его clsAddressFormatter метод Function AddCellToAdrRow(tRow As Long, tCol As Long) As Boolean 'tRow - номер строки 'tCol - номер столбца Предназначен для добавления клетки с указанным номером строки и столбца к текущему набору адресов. возвращает логическое значение. Если ложь, значит, класс не сумел добавить переданные координаты клетки по причине того, что итоговая длина строки адреса оказывается больше 255 символов. (Я просто поверил, что 255 – граница) Метод getWorkSheetRange возвращает диапазон Ексель, применив адресную строку к полученной в качестве параметра объектную переменную рабочего листа Ексель. Метод getAddrString возвращает строку адреса для внешнего пользователя, чтобы он сам с ней обошелся по своему усмотрению Метод ClearAddress очищает внутренние структуры, подготавливая объект для формирования новой адресной строки У меня просьба большая к тебе, - если не сильно затруднит – опробовать его на своей задаче. И как-то сообщить – насколько что ухудшилось по времени, иполучилось ли в обмен хоть какое-нибудь удобство . Как мне понялось, клетки ты набираешь поштучно, поэтому вставил только метод добавления одной клетки по номеру строки и столбца. Хотя для добавления диапазона все готово. Чистую работу твоего алгоритма он замедлит, возможно, наполовину, но позволит не заботиться по крайней мере о сплошном диапазоне в строке или столбце. Он может и прямоугольные диапазоны формировать, но делает это весьма неэффективно (мне любопытно было идею увидеть в действии) Вот на таком скрипте время работы меньше 3 сек Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. Извинения за некоторое количество (закладочной) грязи Все сильно наспех. Класс требует объявления структуры Код: plaintext 1. 2. 3. 4. 5. 6. 7. (на всякий случай – в 97 «это» работать не будет) Текст класса прикладывается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2004, 13:34:46 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
пока не пробовал пара вопосов : нужно чтоб класс запоминал различные типы форматов цвет, значение, примечание то есть добавить ячейку с цветом зеленый или значением 8 или с комментарием "qwer" чтоб класс группировал эти диапазоны по видам формата может я просто не могу усмотреть где это делается? а проблему с длинной в 255 можно наверное решить автовыводом результата когда накапливается скажем больше 200 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2004, 13:54:44 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
АлексейКпока не пробовал пара вопосов : нужно чтоб класс запоминал различные типы форматов цвет, значение, примечание то есть добавить ячейку с цветом зеленый или значением 8 или с комментарием "qwer" чтоб класс группировал эти диапазоны по видам формата может я просто не могу усмотреть где это делается? а проблему с длинной в 255 можно наверное решить автовыводом результата когда накапливается скажем больше 200 класс предназначен ТОЛЬКО для того, чтобы сформировать набор (строго юнион) адресных диапазанов В ВИДЕ СТРОК из тех номеров клеток, которые были отданы ему в виде номера строки и номера столбца. Он может отдать адресную строку или сформировать диапазон на отданной ему как параметр странице. Все остальное - значение (или массив значений) для этого диапазона - внешнее по отношению к классу знание. Ты можешь накапливать по каким-то критериям набор диапазонов (или коллекцию таких классов, или пользоваться одним экземпляром последовательно) , которому соответствуют те или иные значения и цвета. Ты можешь при помощи этого класса сформировать объект диапазона. НО ПРИСВОИТЬ ЗНАЧЕНИЯ И ОТФОРМАТИРОВАТЬ должен сам/ :) НО ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2004, 14:07:32 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
без НО ;)) (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2004, 14:08:47 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
авторнужно чтоб класс запоминал различные типы форматов цвет, значение, примечание я так понимяу, надо открывать по экземпляру класса на каждый тип обработки диапазона. А с возвращаемыми диапазонами делать, что хотелось. 2виктоша что именно не влезет в 97? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2004, 16:43:28 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
буду посмотреть <...> 2виктоша что именно не влезет в 97? млжет и будет - плохо помню уже как он там обходился с приемом/возвратом пользовательских типов. остальное влезет. если с типами проблема, то поменять на вариант и влезет. ....эх, вот только медленный он получился. за ускорением в апи лезть придется, или ваять библиотеку типов. Второе лучше первого но тоже не без проблем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2004, 16:52:22 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
А диапазон возвращается в виде строки? Т.е. потом нужно что-то вроде Range(RetAddress).Font.Bold=true? Просто дело в том что у Ёкселя есть ограничение на количество Area в диапазоне. Поэтому даже выделить(просто тыкая мышкой и держа ctrl, без vba) некое количество несвязанных ячеек не выйдет. А выдать строку с неким набором ячеек можно в принципе проще, самим Ёкселём. Только если она достигнет некоего предела, обработать ее будет нельзя. Единственный выход - разбивать лист на поддиапазоны и их обрабатывать отдельно, но мне кажется это уже криво как-то. Правда если предположить, что количество несвязанных областей невелико (а судя по примеру так и есть), то может и прокатит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2004, 18:18:41 |
|
||
|
Ускорение формирования экселовского отчета
|
|||
|---|---|---|---|
|
#18+
Много написали, возможно я повторюсь (побежал по диагонали). Позвольте мои 2 копейки. Я в своих программах делаю следующее: в Excel-шаблоне - набор стандартных функций (их 3: для регистрации, для заполнения, для закачки в БД из книги). В приложении соответственные вызовы. Вызываем регистрацию - Excel возвращает массив заначений, повествующий о том что этому шаблону нужно для настройки. Сохраняем в базе и даем юзеру возможность настроить (минус - юзер настраивает, плюс - однотипные решения накрываются одним шаблоном). Заполнение - вызываем Excel, создаем документ на основании шаблона, вызываем функцию заполнения - туда в качестве входных параметров, где зарегистрирован (соответственно как настроен), с какой базой работаем, ну и что вам там нужно. Весь код сидит в самом Excele - соответственно количество межпроцессовых взаимодействий минимально (в пределе только вызов функции заполнения). С базами связываться - баз проблем через ADO. Да, если тормозит сильно, еще дополнительно отключаем обновление экрана. Закачка в БД из отработанного документа (к сожалению бывает и такое) - опасно делать сразу, поэтому делаю в 2 прохода - при первом вызове - есть ли лист ПРОВЕРКИ, если нет - создаем и пишем в него все несуразности, которые обнаружили в процессе эмуляции закачки. Что-то увидели, кроме технологических сообщений - в проверку отдельную книгу, лист удаляем и шлем пользователю - будте добры разбираться, почему такое наваяли. Все нормально - повторный проход с реальной закачкой. На мой взгляд такой подход позволяет максимально отвязать отчеты от базы и приложения, не загромождая ни то ни другое. Если немного не в тему, прошу извинить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2004, 18:56:30 |
|
||
|
|

start [/forum/topic.php?all=1&fid=45&tid=1671055]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
70ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 187ms |
| total: | 332ms |

| 0 / 0 |
