powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Оптимизировать обработку таблицы Ворда
43 сообщений из 43, показаны все 2 страниц
Оптимизировать обработку таблицы Ворда
    #38137302
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, подскажите что можно предпринять, таблицу за 12 часов обрабатывает только 6000 строк, ужас
делов то узнать в таблице чтобы.... указано в тексте TextError, код:
Код: 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.
For q = 1 To Количество_строк_в_таблице

            s1 = Trim$(.Rows(q).Range)

            Курсив = .Rows(q).Range.Font.Italic
         
                      If .Rows(q).Range.HighlightColorIndex = wdYellow _
               And s1 Like "*[её]*" = False Then TextError = "В строке имеется выделение жёлтым цветом, но не имеется буквы ""её""": GoTo Выход_из_цикла
           
            If Курсив = -1 And s1 Like "*[её]*" = False Then TextError = "В строке имеется курсив, но не имеется буквы ""её""": GoTo Выход_из_цикла

                     If .Rows(q).Range.HighlightColorIndex <> wdYellow _
               And Курсив = -1 Then TextError = "В строке имеется курсив, но она не выделена жёлтым цветом": GoTo Выход_из_цикла

                      If Курсив = -1 _
               And .Rows(q).Range.HighlightColorIndex <> wdYellow Then TextError = "В строке имеется курсив, но она не выделена жёлтым цветом": GoTo Выход_из_цикла

            ''''парность строк
         
            If .Rows(q).Range.HighlightColorIndex = wdYellow _
               Or Курсив = -1 Then Парность_строки = Парность_строки + 1

                       If Парность_строки Mod 2 <> 0 Then

                               If .Rows(q).Range.HighlightColorIndex = wdYellow _
                   And .Rows(q + 1).Range.HighlightColorIndex <> wdYellow Then TextError = "В строке имеется выделение жёлтым цветом, но в следующая строке нет выделения жёлтым цветом": GoTo Выход_из_цикла

                               If Курсив = -1 _
                   And .Rows(q + 1).Range.Font.Italic <> -1 Then TextError = "В строке имеется курсив, но в следующей строке не имеется курсива": GoTo Выход_из_цикла
            End If

        Next q



Спасибо
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38137392
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Dim r As Range
Dim q As Long
q = 1
For  Each r In Книга.Лист.Rows
    s1 = Trim$(r)
    Курсив = r.Font.Italic
    ...
    With Книга.Лист.Rows(q + 1)
        ...
        If r.HighlightColorIndex = wdYellow And .HighlightColorIndex <> wdYellow Then TextError = "В строке имеется выделение жёлтым цветом, но в следующая строке нет выделения жёлтым цветом": GoTo Выход_из_цикла
        ...
    End With
    q = q + 1
    If q = Количество_строк_в_таблице Then Exit For
Next
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38137482
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
понял For Each r In - рулит? странно почему???
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38137494
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что последовательный проход по коллекции итератором быстрее, чем обращение к произвольному элементу по индексу. С массивами наоборот, хотя разница гораздо менее значительна. Кроме того, обращение .Rows(q).Range происходило не один раз за итерацию, а целых семь.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38137502
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, ясность полная, как бы это не забыть...
щас Шокер скажет, что надо записать в тетрадку... :)
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38137635
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, спасибо, вопрос жесть
последовательный проход по коллекции итератором быстрее, чем обращение к произвольному элементу по индексу
что такое итератор?? блин не знаю...
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38137697
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For x In — переменная x называется итератором, объектом, в котором содержится ссылка на очередной элемент коллекции/массива
for x = — переменная x называется индексом, порядковым номером произволного элемента коллекции/массива
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38137735
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, познавательно, спасибо!!!!
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139290
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я так понял, что
если таблица обычная из одного столбца, тогда вместо
Код: vbnet
1.
Dim q As Row

указываем
Код: vbnet
1.
Dim q As Cell


Но здесь
Код: vbnet
1.
For Each g In ActiveDocument.Tables(1).Rows


или
Код: vbnet
1.
For Each g In ActiveDocument.Tables(1)
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139294
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как бы понятно, на
Код: vbnet
1.
For Each g In ActiveDocument.Tables(1)


ругается
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139330
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё одна не понятка вылезла, в строке
wdYellow = (g.Range.HighlightColorIndex = wdYellow)
Код: vbnet
1.
где Dim q As Cell


и работает в строке
Код: vbnet
1.
For Each g In ActiveDocument.Tables(1).Rows


отрабатывает как = True в момент когда это не так, в чём ошибка???
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139445
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот опять фирменные проблемы с формальной логикой от Эндрю. Наверное тут таки эффективней использовать тетрадку.

Иерархия экселя такова: Excel.Application -> Workbooks -> Workbook -> Worksheets -> Worksheet -> Rows -> Row -> Cells -> Cell.
Никаких исключений вроде этого
я так понял, что
если таблица обычная из одного столбцане допускается. Поэтому For Each Workbook In Workbook s , Worksheet In Worksheet s и т.д, никаких Cell In Rows.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139475
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, какие Worksheet In Worksheets если ветка: Оптимизировать обработку таблицы Ворда
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139489
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофа,
Код: vbnet
1.
2.
3.
4.
разные буквы [SIZE=5]g/q[/SIZE]
wdYellow = (g.Range.HighlightColorIndex = wdYellow)

где Dim q As Cell
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139496
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофаAntonariy, какие Worksheet In Worksheets если ветка: Оптимизировать обработку таблицы Ворда Пофиг. В ворде другие объекты тот же принцип.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139521
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКА, нашёл проблемс нужно было не называть переменную wdYellow а хотя бы wdYelloww ну или русскими словами
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139527
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В каком контексте использовано выражение
Код: vbnet
1.
wdYellow = (g.Range.HighlightColorIndex = wdYellow)

? Если прямо так вставить, то Compile error: Assignment to constant not permitted.

Файл с таблицей и кодом в студию.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139540
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
wdYellow = (g.Range.HighlightColorIndex = wdYellow)

Это лажа какая-то.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139582
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy
Код: vbnet
1.
wdYellow = (g.Range.HighlightColorIndex = wdYellow)

Это лажа какая-то.
конечно, вот это wdYelloww = (g.Range.HighlightColorIndex = wdYellow) - другое дело
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139626
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофаAntonariy
Код: vbnet
1.
wdYellow = (g.Range.HighlightColorIndex = wdYellow)

Это лажа какая-то.
конечно, вот это wdYelloww = (g.Range.HighlightColorIndex = wdYellow) - другое делоПотому что не используешь option explicit, а вместе с ним тоже лажа.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143051
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, уже использую
Код: vbnet
1.
option explicit

, но не пойму
чтобы реализовать мысль
если таблица обычная из одного столбца, тогда вместо Dim g As Row указываем Dim g As Cell
кстати она верная??
получаю ошибку объект не поддерживает этот метод на строке
Код: vbnet
1.
For Each g In ActiveDocument.Tables(1)


как нужно?
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143261
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати она верная??Нет, она тупая. Она дважды тупая, потому что один раз я уже об этом сказал: 13882195

Код: vbnet
1.
For Each g In ActiveDocument.Tables(1)

Первая таблица сама должна угадать, какую из ее коллекций ты хочешь посмотреть?

Толстый намек: Tables -> Table.Rows -> Row.Cells -> Cell.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143361
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
For Each g In ActiveDocument.Tables(1).Range.Cells
так?
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143397
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет. Читай эту строчку до потери сна и аппетита, до умопомрачения: Tables -> Table.Rows -> Row.Cells -> Cell
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143417
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
Tables -> Table.Rows -> Row.Cells -> Cell
ну а где тут скобки () для вставки индексов?
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143445
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофаAntonariy,
Tables -> Table.Rows -> Row.Cells -> Cell
ну а где тут скобки () для вставки индексов?Заодно правильно расставь скобки.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143454
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
я не знаю, в других кодах ничего подобного не замечал.... вообще новость, поэтому придётся гадать
Tables -> Table.Rows -> Row.Cells -> Cell
Код: vbnet
1.
For Each g In ActiveDocument.Tables(1).Rows(g).Cells(1)


так?
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143472
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если тебе нужна первая ячейка каждой строки, то правильно.
Только g в такой записи должно быть числом.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143705
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyЕсли тебе нужна первая ячейка каждой строки, то правильно.
Только g в такой записи должно быть числом.
я же говорю:
если таблица Ворда обычная из одного столбца
Dim g As Cell
For Each g In ActiveDocument.Tables(1).Rows(g).Cells(1)
и что станет g числом???
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143746
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
катастрофаAntonariy,
я не знаю, в других кодах ничего подобного не замечал.... вообще новость, поэтому придётся гадать
Tables -> Table.Rows -> Row.Cells -> Cell
Код: vbnet
1.
For Each g In ActiveDocument.Tables(1).Rows(g).Cells(1)


так?авторЕсли тебе нужна первая ячейка каждой строки, то правильно.
Только g в такой записи должно быть числом.

А ничего, что в ворде не Cell s , а Cell ? :))
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143773
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища, даже если исправить по Вашему совету
А ничего, что в ворде не Cells, а Cell ? :))
выделяет .Rows - тип мис матч
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143825
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотищаА ничего, что в ворде не Cell s , а Cell ? :))
Property Cells As Cells
read-only
Member of Word.Row

Что не так?

катастрофаDim g As Cell
For Each g In ActiveDocument.Tables(1).Rows(g).Cells(1)
и что станет g числом??

выделяет .Rows - тип мис матчЯ не по-русски выражаюсь? Или ты специально издеваешься? Двести раз говорили, tables(xxx), rows(xxx) и cells(xxx) принимают индексы, а ты что туда пихаешь блеать?
Ну что за тупица, терпения не хватает.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143866
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, делаю так: For Each g In ActiveDocument.Tables(1).Rows(g).Cells(1)
пихаю Dim g As Cell и получаю тоже самое: выделяет .Rows - тип мис матч
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143891
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты САМ написал Tables(1) - это по твоему что означает? Почему ты не пишешь Tables(g), к примеру???
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143901
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, Почему ты не пишешь Tables(g), к примеру - потому, что я соображаю, что обращаюсь к первой таблице
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143912
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофаобращаюсь к первой таблицеА какой строке ты обращаешься, когда пишешь Rows(g) ???

Ты сам аналогию провести не можешь?
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143938
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, так бред получится выше строки For Each g In ActiveDocument.Tables(1).Rows(g).Cells(1)
строить конструкцию Фор еах а ниже g = g + 1, масло масляное....
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143948
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сейчас остановился на
Код: vbnet
1.
2.
Dim g As Cell
For Each g In ActiveDocument.Tables(1).Range.Cells


таблицу с 15000 строк обрабатывает за 25 минут, ещё лучше можно??????? как???????
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143953
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты обпределить ЧТО ИМЕННО ты хочешь перебрать в цикле?
Все ячейки таблицы? Все ячейки строки? Все ячейки всех таблиц? Одну ячейку каждой строки?
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143954
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, таблица из одного столбца, значит все строки или все ячейки для меня это одно и тоже
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143956
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и перебирай Cells, нафига тебе Rows?
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143963
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProТак и перебирай Cells, нафига тебе Rows?
так это
For Each g In ActiveDocument.Tables(1).Range.Cells
разве не так??
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38150124
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё вариант - С таблицами скорости прибавляет цикл Do...Loop вместо For Each, это верно????
и пример:
Код: vbnet
1.
2.
3.
4.
5.
6.
Dim oCell As Cell
    Set oCell = ActiveDocument.Tables(1).Range.Cells(1)
    Do Until oCell Is Nothing
    'Делаешь что нужно
        Set oCell = oCell.Next
    Loop
...
Рейтинг: 0 / 0
43 сообщений из 43, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Оптимизировать обработку таблицы Ворда
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]