|
|
|
Как ускорить работу ActiveDocument.Words
|
|||
|---|---|---|---|
|
#18+
К сожалению, код вида Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Хотя и работает, но очень медленно. Тормоза, как я понял, на доступе к отдельным словам, потому что, если загнать текст в одну переменную и парсить её на выделение слов работает с приемлемой скоростью. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Но хотелось бы работать именно с Words, хотя бы потому что отказ от них приводит к другим неудобствам для меня, связанным с тем, что длина переменной, полученной из Selection и .Characters.Count изредка на некоторых документах не совпадают. Так вот, есть ли способ как-то ускорить работу .Words? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2009, 11:59 |
|
||
|
Как ускорить работу ActiveDocument.Words
|
|||
|---|---|---|---|
|
#18+
> Автор: СтаниславК > К сожалению, код вида а если попробовать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2009, 12:19 |
|
||
|
Как ускорить работу ActiveDocument.Words
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос а если попробовать так: Type mismatch на For Each rPar In ActiveDocument.Paragraphs Если заменить в определении Range на Variant тогда сообщение о невозможной операции над объектом в For Each rSent In rPar.Sentences. Но сейчас попробую через индексы, хотя сомневаюсь уже, что будет быстрее, но попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2009, 12:54 |
|
||
|
Как ускорить работу ActiveDocument.Words
|
|||
|---|---|---|---|
|
#18+
Короче, всё равно Type mismatch на rPar = ActiveDocument.Paragraphs(p1) и на rPar = ActiveDocument.Paragraphs(p1).Range тоже своя ошибка. Там как-то надо диапазон задавать. Короче, полно возни на ровном месте, вдобавок мне всё-равно надо отслёживать номер слова, хотя бы для позиционирования курсора и индикации процента выполненной работы. Ладно, спасибо за попытку помочь, но наверное, продолжу возню с Sel$=Selection. Там уже многое отлажено, хотя и через одно место. Я думал с ActiveDocument.Words(i) есть какое-нибудь шаманство, ну там может отключить какой параметр неочевидный или ещё чего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2009, 13:13 |
|
||
|
Как ускорить работу ActiveDocument.Words
|
|||
|---|---|---|---|
|
#18+
Dim rPar As Paragraph For Each rSent In rPar.Range.Sentences ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2009, 13:27 |
|
||
|
Как ускорить работу ActiveDocument.Words
|
|||
|---|---|---|---|
|
#18+
ActiveDocument.Words(i) тормозит потому что доступ к элементу коллекции происходит по индексу. Нужно ее перебирать через For Each. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2009, 13:28 |
|
||
|
Как ускорить работу ActiveDocument.Words
|
|||
|---|---|---|---|
|
#18+
AntonariyActiveDocument.Words(i) тормозит потому что доступ к элементу коллекции происходит по индексу. Нужно ее перебирать через For Each. Спасибо, хотя проверю потом, сейчас с Selectuon пытаюсь доделать. Мне ведь как-то надо ещё навести курсор на слово, которое выбрано через For Each. Есть способ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2009, 13:38 |
|
||
|
Как ускорить работу ActiveDocument.Words
|
|||
|---|---|---|---|
|
#18+
> Автор: СтаниславК > Type mismatch на For Each rPar In ActiveDocument.Paragraphs Да, виноват, поторопился набросать идею и не проверил на типы. К сожалению(или к счастью) с вордом практически не приходится работать Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2009, 14:20 |
|
||
|
Как ускорить работу ActiveDocument.Words
|
|||
|---|---|---|---|
|
#18+
> Автор: СтаниславК > Мне ведь как-то надо ещё навести курсор на слово, которое выбрано через For Each. Есть способ? Код: plaintext Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2009, 14:22 |
|
||
|
Как ускорить работу ActiveDocument.Words
|
|||
|---|---|---|---|
|
#18+
Тогда уж ещё ошибка: Sentences есть у ActiveDocument, но нет у Paragraphs Ладно, попробую все же и так тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2009, 14:35 |
|
||
|
Как ускорить работу ActiveDocument.Words
|
|||
|---|---|---|---|
|
#18+
А нифига. Несмотря на иерархию Documents --> Paragraphs --> Sentences --> Words --> Characters нет вложенности. На уровне документа доступен любой подуровень, но любой подуровень не имеет доступа к своим подуровням. То есть, у Paragraphs нет ни Sentences, ни Words, ни Characters, как и у остальных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2009, 14:41 |
|
||
|
Как ускорить работу ActiveDocument.Words
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос Код: plaintext Спасибо! В общем заработало. Цикл один Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Тогда всё быстро. Правда, может быть понадобится изменить способ выделения слов, скажем не выделять или наоборот выделять как целое слово символ с подстрочным индексом. И тогда другой вариант (с Selection) все же гибче. Или есть способ указать Word терминальные символы для Words? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2009, 15:01 |
|
||
|
Как ускорить работу ActiveDocument.Words
|
|||
|---|---|---|---|
|
#18+
> Автор: СтаниславК > Тогда всё быстро. Правда, может быть понадобится изменить способ выделения слов, скажем не выделять или наоборот > выделять как целое слово символ с подстрочным индексом. И тогда другой вариант (с Selection) все же гибче. Посмотри на метод SetRange класса Range. Я думаю он с успехом заменит Selection > Или есть способ указать Word терминальные символы для Words? Вот этого не знаю. Я так думаю, что терминальные символы для слова это пробел, знаки препинания и все служебные символы и я так думаю, что это жёстко зашито Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2009, 15:06 |
|
||
|
Как ускорить работу ActiveDocument.Words
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос Посмотри на метод SetRange класса Range. Я думаю он с успехом заменит Selection Я так думаю, что терминальные символы для слова это пробел, знаки препинания и все служебные символы и я так думаю, что это жёстко зашито Да нет, SetRange ведь только внутри текущего слова подействует. Но это уже мелочь, без неё можно и обойтись. Хотя навёл на мысль, интересно, а если захотеть фон отдельных букв в выделенном слове подкрасить в разные цвета, получится ли? Хотя то, что терминальные символы жестко забиты очень вероятно, жаль. Возможно не понадобится их менять, потому что сейчас всё получается и быстро и хочется надеяться, что надёжно, в смысле устойчиво к глюкам. Ещё раз, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2009, 15:16 |
|
||
|
Как ускорить работу ActiveDocument.Words
|
|||
|---|---|---|---|
|
#18+
СтаниславКТо есть, у Paragraphs нет ни Sentences, ни Words, ни Characters, как и у остальных.Paragraphs. Range .Sentences, читайте внимательней. Элементом коллекции Paragraphs является объект Paragraph, а элементом остальных коллекций — Range. В свою очередь Range имеет и Paragraphs и Words и Characters. Range — базовая единица текста ворда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2009, 15:18 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=36015504&tid=2160918]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
77ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 408ms |

| 0 / 0 |
