|
|
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
vlth, да, почти получилось с Chr(13), по крайней мере в массив построчно поместилось, далее уже можно обрабатывать. Только мне кажется, если строк много и они длинные, а не как в примере, то ворочать эту кучу будет небыстро. Я и тексты бывало сперва сразу целиком в массив загонял и затем анализировал, но когда знал, что объём не очень большой. В данном случае в коде выше текст построчно перекладываю в другой файл, выбирая только нужное. Хотя может разница и небольшая, тесты не делал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2010, 21:41 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
Заметил, что не всё "идеально". Исправленный фрагмент: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2010, 21:43 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
Hugo121, я на ru-board писал кому-то обработку текстового файла. Предполагая большое кол-во строк, организовал возможность его обработки частями по 3000 строк. Скорость выполнения в этом случае сокращалась примерно на 20%. Вот здесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2010, 21:57 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
vlth, Хотел заставить wsh скриптом сделать весь цикл от Ворд до Эксель - не получается ни в Ворде по строчкам пройтись, ни его в текст сохранить. Но если вручную сохранить данные в текст, то вполне перекладывает в текст.xls (все пробелы заменены на vbTAB, поэтому сразу разбивает по колонкам): Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2010, 22:30 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
Hugo121, доработал процедурку: теперь она должна работать при любом знаке окончания строки. Для пробы растиражировал записи Новенькой123 на 10923 страницы в Ворде. Пришлось ещё подправить переключение переноса данных на другие листы книги Excel. Код: 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. Что получилось по скорости выполнения (P IV-1700, 768 MB ОЗУ, XP SP3, 2003 SP3): со 10923 страниц Ворда создана строка длиной в 5308444 знака. Из них после очистки осталось 4980761. На присвоение значения строковой переменной (strT = oDoc.Content) ушла почти половина времени - 189 сек, общее время выполнения процедуры составило 400 сек (было заполнено 6 листов Excel по 65536 строк + ещё 2 записи на 7-м листе). Вечером, если получится, буду сравнивать это со скоростью работы Вашего скрипта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2010, 14:21 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
vlth, давай, интересно. Только в моём скрипте собственно нет операции занесения данных в лист Экселя, т.е. ещё можно сравнить время открытия Вашего итогового файла и моего псевдо-экселевского файла. Т.е. я думаю, Эксель мой файл будет дольше открывать. Или просто добавить в скрипт в конце процедуру открытия этого файла и мерить общее время. Только я там таймер по ошибке в самое начало поставил, т.е. мерится и время реакции оператора тоже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2010, 14:31 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
Hugo121...Только я там таймер по ошибке в самое начало поставил, т.е. мерится и время реакции оператора тоже Хм... это единственное, на что я обратил внимане ( - проверять скорость работы скрипта, учитывая отсутствие импорта данных в Excel, получается, смысла нет. Но сравнить скорость выполнения задачи, применяя другой подход, всё-таки хотелось. Поэтому написал процедуру с использованием fso: Код: 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. При раннем (не забываем добавлять ссылки на библиотеки) экономится ещё 14 сек (всего 82 сек) Необходимость создания новых листов здесь также не проверяется, так что нужно заранее побеспокоиться об их наличии. Или подкорректировать код процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2010, 12:53 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
vlth, я тоже пробовал (правда в wsh) Код: plaintext 1. Надо тоже попробовать из Экселя провернуть. А про проверку скорости - так там, после открытия файла, происходит работа по перекладыванию из одного файла в другой, с преобразованием строк. Вот это и хотел померить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2010, 13:05 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
Немного тоже скорость потестил: 612437 строк в Ворде (он уже сам и не показывает в статусе, по тексту смотрел). Сохранил вручную в текст. Моим wsh скриптом переложил в текст в 166152 строки за 21,18 сек. Открывается в Экселе практически сразу, но кричит, что всё не откроет - естественно, нет разбивки по страницам. Но автору наверное и не надо - вроде пока объём не настолько большой. Код vlth: Связывание переключил (раннее пока не стал налаживать) и переделал перекладывание строк, что-то вроде не так писал в файл (см. ниже). Тот-же файл Ворд перегрузил в Эксель за 30,27 сек. Но тут есть ремарка - при 512 мБ памяти ругался на её отсутствие, общее время работы было больше, как раз принесли ещё 512 - теперь сработал без возражений. Код: 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. 60. 61. 62. 63. 64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2010, 14:55 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
Hugo121, Так у меня получилось 91 сек вместо 96 - всё-таки листов в 2 раза меньше - 3, а не 6 Только автору по условию нужно было 3 столбца, а не 4? Или 3 - это промежуточный вариант ? Что-то непонятно... Код: plaintext Сейчас и проверять не стал - оставил. Выходит, зря не проверил. Кстати, нигде не нашёл описания этого параметра, а в хелпе сказано лишь, что он - "Optional Variant". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2010, 18:23 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
vlth, попробовал сейчас этот же Ваш код дома - что-то 1 гиг памяти не спасает - загрузка в пике доходит до 900 мБ и в итоге Эксель виснет. Так результата и не добился. Имхо на слабой машине надо работать с текстом. Можно его в отдельные файлы перекладывать. Ваш код у меня до зависона сделал Export2.txt и первый Tmp.txt. И вероятно на oTmpWB.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets(bytWSCount).Cells он и помер, или уже при открытии этого Tmp.txt (я его видел). А вообще можно и csv генерить, по 65536 строк каждый. И потом подгружать в листы, можно даже и кодом - количество и имена известны, тянуть как экспорт или копировать целиком из отдельных книг в общую - сейчас сделал вручную, без проблем и мнгновенно, не так, как через Cells.Copy. Но это уже теория, проверять не буду, уже неинтересно, да и проблема уже решена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2010, 23:58 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
Да, посмотрел подробнее, даже генерил сразу Tmp.txt.xls, этот файл открыл нормально, а на копировании "Недостаточно памяти"... Сейчас попробую лист целиком копировать, зацепило... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2010, 00:19 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
Сделал - 125 секунд 3.5 листа данных - копировал листы целиком - полёт нормальный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2010, 00:30 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
попробовал сейчас этот же Ваш код дома - что-то 1 гиг памяти не спасает Hugo121, у меня 768 MB, так что проблема, думаю, не в объёме памяти. Если копировать лист, вручную выделяя все его ячейки, что равносильно Cells.copy, зависание проявляется? А вообще можно и csv генерить, по 65536 строк каждый. И потом подгружать в листы, можно даже и кодом - количество и имена известны, тянуть как экспорт или копировать целиком из отдельных книг в общую - сейчас сделал вручную, без проблем и мнгновенно, не так, как через Cells.Copy Можно и целиком листы. Из того же .txt (принципиальной разницы с .csv нет). Кроме того, можно копировать только содержащие данные 3-4 столбца. Можно еще с помощью ADO, что наверное, будет быстрее всего. Всё это дело техники. Cells.copy в записи проще всего - 1 строка. Поскольку она у меня работает (а причины, по которой в данном случае может быть иначе, я не представляю), я её и оставил. Если автор топика, или кто-то иной, вновь обратится к этой теме, тогда и будет смысл реализовать что-то из вышеперечисленного, а так - согласен: задача решена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2010, 00:38 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
Hugo121Сделал - 125 секунд 3.5 листа данных - копировал листы целиком - полёт нормальный.Вот и ладно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2010, 00:40 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
Вот продукт совместного творчества, у меня работает без зависаний. Кнопка запуска кода остаётся на последнем листе. Должна быть доступна запись в папку, откуда открываете исходный документ. Немного некрасиво остаётся полузакрытое окно выбора файла, не получилось победить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2010, 01:46 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
Hugo121Вот продукт совместного творчества, у меня работает без зависаний. ... Немного некрасиво остаётся полузакрытое окно выбора файла, не получилось победить... Решается с помощью DoEvents Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2010, 02:32 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
[quot]Решается с помощью DoEventsquot] Или применить "родное" диалоговое окно Application.FileDialog(msoFileDialogOpen), что логичнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2010, 02:51 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
vlth, Да, про DoEvents я подумал, уже засыпая... Т.к. Application.FileDialog на 2000 не идёт, сделал с DoEvents. Ещё добавил и сократил StatusBar - стало инфомативней и меньше мелькать. В итоге время работы даже сократилось на 30%! Всё-же StatusBar здорово жрёт ресурсы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2010, 13:11 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
Hugo121, про Status Bar интересно: я так эту версию и не проверил, хотя хотел... Вот вариант с ADO. У меня получилось чуть более минуты (62-65 сек): Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2010, 01:02 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
vlth, ещё не пропал интерес? Поверяю - ругается на cnTXT.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ Не подскажете - что подключить или чем заменить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2010, 01:14 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
Не, заработало... просто я "Data SoulngRCrse=" исправил на "Data Sourse=" ... Ещё недочёт - у меня 3 листа, а ему 4 подавай... смотрю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2010, 01:24 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
Да, с АДО побыстрее - 48-66 сек. в зависимости от активности антивируса наверное. Тот мой/наш последний вариант 79-93 сек. соответственно. Статусбары отключил для объективности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2010, 01:47 |
|
||
|
Из Ворда в Эксель
|
|||
|---|---|---|---|
|
#18+
Hugo121Не, заработало... просто я "Data SoulngRCrse=" исправил на "Data Sourse=" ... Это я, уже в окне сообщения, вставляя переменную strFIlesPath вместо абсолютного пути... Но как ТАКОЕ могло получиться - не понимаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2010, 10:43 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=36572018&tid=2178254]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
153ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 443ms |

| 0 / 0 |
