|
Очень долгий перебор строк в цикле
|
|||
---|---|---|---|
#18+
я вижу копипасту внутри цикла Markovich21 Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2021, 19:32 |
|
Очень долгий перебор строк в цикле
|
|||
---|---|---|---|
#18+
Shocker.Pro, тут работает таким образом, что таблица в ворд уже полностью вставлена, а t номер строки (берущийся из экселя), в которой нужно объединить ячейки. Сначала какое то общее наименование (оно находится во втором столбце), которое должно быть в объединенной строке копируется в буфер, ячейки строки очищаются, объединяются и наименование вставляется обратно в уже объединенную ячейку. У меня родился такой вот алгоритм работы, другой как то в голове не складывается. Можно как то по другому лучше сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2021, 20:39 |
|
Очень долгий перебор строк в цикле
|
|||
---|---|---|---|
#18+
Shocker.Pro, Скажите, пожалуйста, вставить диапазон ячеек в таблицу ворд, не используя буфер обмена, а через переменную теоретически возможно? у меня при попытках что то подобное сделать выпадают либо ошибки, либо ничего не вставляется, хотя по одной ячейке вставка в ячейку таблицы ворд через переменную происходит без проблем. Предполагаю, что выделение диапазона ячеек в ворде таким образом: Код: vbnet 1.
не подходит для вставки переменной. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 10:08 |
|
Очень долгий перебор строк в цикле
|
|||
---|---|---|---|
#18+
Вставить текст можно через переменную или прямо напрямую, присвоив значение свойства Text. Но форматирование не сохранится ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 12:08 |
|
Очень долгий перебор строк в цикле
|
|||
---|---|---|---|
#18+
Но вообще я этот код тестировал на прошлой неделе, там львиная часть времени уходит не на цикл, а на вставку приличного размера данных из буфера обмена ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2021, 12:11 |
|
Очень долгий перебор строк в цикле
|
|||
---|---|---|---|
#18+
Shocker.Pro, спасибо за помощь. по Вашему совету избавился от копирования в цикле, использовав переменную и массив. Никак не получается вставлять данные минуя буфер обмена (через переменную), значение свойства Text. применять пробовал. Подскажите, пожалуйста, имеет ли смысл пытаться вставлять данные через переменную, будет ли на этом прирост скорости? На данный момент рабочий код выглядит так: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 13:10 |
|
Очень долгий перебор строк в цикле
|
|||
---|---|---|---|
#18+
Через переменную можно перенести текст, но не полностью набор ячеек и строк со всем форматированием и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 13:21 |
|
Очень долгий перебор строк в цикле
|
|||
---|---|---|---|
#18+
Shocker.Pro, создаю переменную: Код: vbnet 1.
вместо копирования в буфер строка: Код: vbnet 1.
и в строке ошибка: Код: vbnet 1.
Получается сделал я примерно так как работало бы в экселе. С вордом так не работает, как Вы говорите, передается только текст. Еще помимо вставки из буфера значимую часть времени занимает объединение ячеек, что тоже, наверное, не ускоришь. Выходит, что в плане оптимизации и увеличения скорости больше особо ничего не выжмешь и можно оставить код как есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 14:04 |
|
Очень долгий перебор строк в цикле
|
|||
---|---|---|---|
#18+
Markovich21 Получается сделал я примерно так как работало бы в экселе. С вордом так не работает, как Вы говорите, передается только текст. Markovich21 Выходит, что в плане оптимизации и увеличения скорости больше особо ничего не выжмешь и можно оставить код как есть? Antonariy Индексированные свойства тормозят. Потому что при обращении по индексу где-то внутри происходит перебор. Чтобы не тормозило, нужно использовать for each. Можно покурить "слияние", оно вроде как предназначено для того, чтобы перекидывать данные в такой ситуации. Сам не работал с ним. Можно попытаться работать со стороны Ворда (то есть чтобы код был не в экселе, а в ворде, затянуть данные из экселевского файла через ADODB, обработать их в памяти и вывести в таблицу) Можно сформировать html-файл и открыть его в ворде. Я делал так универсальные отчеты, которые можно было открывать в браузере, ворде и экселе, при этом они выглядели более-менее одинаково. Там, правда, очень странная интерпретация html, например в тэге в атрибуте класса может быть только один класс, остальные игнорируются, поэтому для документа приходилось создавать персональную таблицу классов, но в целом удавалось объединять и раскрашивать ячейки таблицы и осуществлять кое-какое форматирование Так что есть куда копать, всё зависит от времени и желания ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 15:26 |
|
Очень долгий перебор строк в цикле
|
|||
---|---|---|---|
#18+
Shocker.Pro, спасибо, за наметки. Запуск макроса со стороны ворда отпадает, под мой случай не подходит, а вот другие варианты буду изучать ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 17:48 |
|
Очень долгий перебор строк в цикле
|
|||
---|---|---|---|
#18+
В конце-концов можно напрямую формировать docx-файл, так как это просто zip-архив с кучкой xml-внутри. Но без какой-нибудь OpenXML-библиотеки, которая упростит формирование файлов - это адский труд. Да и с библиотекой не сахар, в общем-то. Зато это точно будет самый быстрый вариант )) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 18:22 |
|
|
start [/forum/topic.php?fid=60&msg=40087857&tid=2154713]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
20ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 124ms |
0 / 0 |