|
|
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
Добрый день. У меня есть необходимость создавать и сохранять большое количество(около 500) файлов XLS. Для этого был написан следующий макрос: Private Sub MakeReportXLS(tData() As tWB_Data, Payee As String) Dim wb As Workbook Dim i As Integer Dim rRow As Double Dim r As Range On Error Resume Next Application.ScreenUpdating = False Set wb = Workbooks.Add wb.Sheets("Sheet1").Range("A1").CurrentRegion.Delete Shift:=xlUp Set r = wb.Sheets("Sheet1").Range("A1") '*******************Format Sheet*********************** заполнение листа информацией '*******************Format Sheet*********************** форматирование листа '************************************************************* wb.Sheets("Sheet1").Name = "Data" Application.DisplayAlerts = False wb.Sheets("Sheet2").Delete wb.Sheets("Sheet3").Delete wb.SaveAs Filename:=ThisWorkbook.Path & "\Reports\" & Payee & " SW Report " & _ Format(Date, "ddmmyyyy") & ".xls", FileFormat:=xlExcel8 Application.DisplayAlerts = True wb.Close Set wb = Nothing Application.ScreenUpdating = True End Sub Проблема состоит в том, что в процессе выполнения скорость создания/выполнения файлов падает, причем очень ощутимо. Пожалуйста, подскажите мои недочеты и возможные пути устранения этой проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 11:32 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
Catyara, Мне кажется, что тормоза накапливаются в тех нам невидимых частях. Но попробуйте - я чуть исправил код на свой вкус: Код: vbnet 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 11:59 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
Hugo121Catyara, Мне кажется, что тормоза накапливаются в тех нам невидимых частях. [/src] Ок, тогда привожу код целиком: Код: vbnet 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. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 12:11 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
Попробуйте оценить время выполнения частей кода Проще всего для этого - поместить debug.print Now() в начале процедуры и после каждого интересующего куска кода Так вы увидите на чём именно тормозит выполнение. Сказать что-то ещё затруднительно, т.к. ничего неизвестно о размерах файлов, способах наполнения и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 12:14 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
ElenHimПопробуйте оценить время выполнения частей кода Сама процедура отрабатывает довольно быстро. Дело в том, что проблемы начинаются после создания некоторого кол-ва файлов. После этого начинает тормозить именно на этапе Код: vbnet 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 12:19 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
А, теперь ясно. вы вставляете данные поячеечно. Гораздо быстрее сразу диапазон вставлять. Ну и форматируете вы тоже в циклах (когда цвет задаёте) . Это тоже можно без цикла сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 12:21 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
Ну а размер файла какой получается? Если мегабайт 200 - тогда и удивляться нечего ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 12:22 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
ElenHimСказать что-то ещё затруднительно, т.к. ничего неизвестно о размерах файлов, способах наполнения и т.д. В переменной tData() As tWB_Data передается массив с максимальным кол-вом записей около 2000. Следовательно и в файле заполняется 2000 строк(максимум, где-то и 1-2). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 12:24 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
ElenHimНу а размер файла какой получается? Если мегабайт 200 - тогда и удивляться нечего Средний размер файлов 25 KB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 12:25 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
> ElenHim > Ну и форматируете вы тоже в циклах (когда цвет задаёте) . Это тоже можно без цикла сделать Каким образом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 12:30 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
Я бы массив делал двумерным, сразу в массиве выставлял все эти флаги, затем одним действием вываливал массив на лист. Так не будет работы с ячейками, что долго. С форматироанием сложнее, но тоже можно как-то сгруппировать диапазон и покрасить одним действием. Можно через union, а может кто оптимальнее подскажет, что-то сразу ничего на ум не приходит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 12:37 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
Кстати, красит уже в 2 раза быстрее так: Код: vbnet 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 12:43 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
скукотища, на скорую руку, например, так(вложение) Можно ещё быстрее/эффективнее. Но теперь, когда я указал направление, думаю, и сами догадаетесь как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 13:28 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
ElenHim, Это не по-спортивному :) Но т.к. во всех случаях процесс занимает доли секунды на имеющиеся 2000 строк - это не решает проблему... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 13:55 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
Hugo121, Странные у вас критерии по-спортивному/не по-спортивному. Это был ответ на конкретный вопрос - как без циклов. Тут уж неважно, 2000 строк или 200000 (понятно, что формула из примера будет считаться дольше и Intersect соответственно, но они тут для примера .SpecialCells, можно без них). И да, ещё есть .PasteSpecial, но область применения .SpecialCells, имхо, гораздо шире. Мораль очень проста - чем лучше владеешь своим предметом, тем больше возможностей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 14:12 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
ElenHim, я думаю, что писать на лист критерий отбора не всегда возможно. Да и свободного столбца может и не быть. Я кстати тоже думал в этом направлении... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 14:26 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
Hugo121Да и свободного столбца может и не быть. Это результат бездарного проектирования Hugo121писать на лист критерий отбора не всегда возможно С этим можно согласится. Но опять, же зависит от конечных целей. Обычно недостаточно чтобы работало. Нужно непременно чтобы работало быстро, правильно (красиво, с определённым функционалом и т.д.) Возвращаясь к теме, 0,5k файлов по 2k строк - это 1kk строк. Они ведь откуда-то берутся?Если из БД, то и раскидывать их по файлам быстрее из самой БД. Если не из БД, тогда у вас всё очень грустно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 14:48 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
Спасибо, большое за эти улучшения. Но к сожалению основную проблему это не решает. Первые несколько десяток книг создаются и сохраняются очень быстро, а потом начинаются тормоза, причем чем дальше тем хуже =( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 14:51 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
> Автор: Catyara > Спасибо, большое за эти улучшения. Но к сожалению основную проблему это не решает. А кто такой Код: vbnet 1. ? Может он не освобождается и на каждую книгу создается новый? Тогда получается что 11 столбцов умножить на 2000 строк и умножить на 4 байта(для лонга) и умножить на 500 книг получим внушительную цифру. Можете выложить полный код формирования отчетов? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 15:51 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
> ElenHim > на скорую руку, например, так(вложение) Красиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 17:48 |
|
||
|
Как улучшить процесс создания/сохранения файлов XLS.
|
|||
|---|---|---|---|
|
#18+
Catyara, попробуйте закомментировать заполнение и форматирование листа. Оставьте только создание (и сохранение книги). Посмотрите, сохранится ли тенденция "затормаживания". Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Немного может ускорить заполнение не новой книги, а подготовленного шаблона (цвета строк, границы, форматы ячеек). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 17:54 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=37766035&tid=2175784]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
156ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
36ms |
get tp. blocked users: |
2ms |
| others: | 210ms |
| total: | 428ms |

| 0 / 0 |
