powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Долгая обработка текстовых данных в Экселе
25 сообщений из 172, страница 2 из 7
Долгая обработка текстовых данных в Экселе
    #36546547
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
motorwayЯ все-таки склоняюсь к мысли, что 20000 ячеек не так много, и для этого случая должны были уже изобрести какой-то нормальный способ. Ведь работают же с терабайтными базами. Если попробовать вставить данные из Аксесса (1500 строк и 13 столбцов), то это делается почти мгновенно. А здесь очень медленно

Вы не путайте, эксель не является СУБД и не оптимизирован на работу с данными

motorwayAntonariy,
ну, а допустим мы это строку будем записывать в БД сначала, а потом оттуда брать данные - так можно рассчитывать на нормальную скорость?

Нет.

Тормоза идут не при получении данных, а при работе с ячейками. Это (если в лоб) непреодолимое препятствие.
Поскольку исходными данными является строка, то нет смысла грузить ее в базу. То бишь, вы можете создать csv-файл (просто заменив "|" на ",", а "`" на конец строки. Это позволит очень быстро загрузить данные в эксель (не устраивая этот тормозной цикл). Но вы хотите красить ячейки на ходу - и вот тут начинается проблема тормозами.

Поскольку ваша задача не совсем ясна, да и часть кода вы нам не дали, мы не можем дать более точный совет. Возможно вам вообще не нужен эксель и можно обойтись аксессом или, скажем, веб-клиентом.
Всякие покраски можно тоже реализовать иначе (но, правда, для этого иначе должны формироваться исходные данные). Скажем, располагаться рядом ячейки со старым и новым значением. А покрасить изменившиеся можно (если не ошибаюсь) формулой или пробежаться макросом уже после загрузки данных. В общем, если хотите глобальных советов - придется вам развернуть контест как можно подробнее.
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36546571
motorway
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моя система состоит из Эксела и скрипта на сервере, производящего вычисления. Работает это по типу SaaS. Производятся некоторые вычисления, например, финансовые. Для этого данные из Эксела посылаются скрипту, он вычисляет всё и возвращает результат.
Эксел нужен для удобного ввода данных - формулы+значения+редактирование таблицы (стили, шрифты и т.п.). Т.е. почти все как в обычном Экселе, только данные посылаются скрипту.
Веб-клиентом я пробовал обойтись, но там не хватает многих функций Эксела. Именно Эксел вполне удобное средство для ввода данных и их просмотра.
Главное, чтобы все это работало с приемлемой скоростью. Та система, какая сделана сейчас - тормозит. Наверно, сюда можно приделать либо Аксесс, либо сохранять и загружать все данные из MySQL на сервере, но главное, чтобы тоже было быстро. И куда деться от этих тормозов? Основные вещи делают макросы...
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36546581
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, ну система понятна (значит варианты клиента, кроме экселя, не обсуждаем), но вы не уловили главного. Запись с помощью макроса такого объема данных - процесс долгий. Чтобы принципиально его ускорить - надо отказаться от записи ячеек макросом (один из вариантов - csv - я предложил). Но сложно предполагать, что там у вас с форматированием и т.п.

Кстати, вы упоминали о том, что можно было бы передавать только измененные данные - до какого количества ячеек это уменьшит объем передаваемых данных?
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36546587
motorway
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет того, что макросы долго все это делают, я уловил, конечно - потестил, и настроение подпортилось. В таблице может быть большое количество ячеек с разными шрифтами, стилями и примечаниями.
Вот, кстати, обработка примечаний - еще одна медленная вещь. Мне нужно скидывать иногда текст из примечаний в ячейки сами - и для такой таблицы это тоже долго очень. Тут уж вряд ли что-то поможет, может, у вас тоже идеи есть? :)
Если только изм. передавать - ну это смотря сколько менять на входе и сколько при этом меняется в результатах. Допустим, изменили 1 ячейку. При этом может измениться в результатах 1-10, а иногда может и много - может быть, даже 1000. А вот если менять штук 10-100, то может большая часть, около 50% измениться. То есть, сокращение может быть от 2 до 100 раз где-то, я думаю.
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36546637
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Основные тормоза в данном случае из-за кучи обращений к отдельным ячейкам (проверка цвета, присвоение значения, присвоение цвета). Присваивайте значения одной командой - через массив или Recordset. Аналогично надо сделать и с раскраской. В итоге все будет работать моментально.
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36546657
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вместо Range использовать Cells, будет быстрее.

Однако, чем, собственно, не устраивает генерация уже готового и раскрашенного файла на сервере?
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36546689
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Набросал простенький примерчик - 50 тыс строк заносятся и форматируются примерно за секунду:

Код: 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.
Public Sub ttt()
    Dim r As New ADODB.Recordset, i As Long
    
    r.Fields.Append "ID", adInteger, , adFldUpdatable
    r.Fields.Append "Text", adVarChar,  50 , adFldUpdatable
    r.Open
    
    For i =  1  To  50000 
        r.AddNew
        r( 0 ) = i
        r( 1 ) = "Text " & i
    Next i
    r.MoveFirst
    
    Cells( 2 ,  2 ).CopyFromRecordset r
    
    With Range("C2:C" & r.RecordCount).FormatConditions
        .Delete
        .Add Type:=xlExpression, Formula1:="=ОСТАТ(RC[-1];3)=0"
        With .Item( 1 ).Interior
            .PatternColorIndex = xlAutomatic
            .Color =  49407 
            .TintAndShade =  0 
        End With
        .Item( 1 ).StopIfTrue = False
    End With
End Sub
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36546711
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProПоскольку исходными данными является строка, то нет смысла грузить ее в базу. То бишь, вы можете создать csv-файл (просто заменив "|" на ",", а "`" на конец строки. Это позволит очень быстро загрузить данные в эксель (не устраивая этот тормозной цикл). Но вы хотите красить ячейки на ходу - и вот тут начинается проблема тормозами.

Есть, кстати, еще один примитивный способ быстрого создания и заполнения Excel-евского файла, кроме того что я привел чуть выше. Просто создаем htm-файл с таблицей, заполняя его нужными строками с нужным форматированием, потом открываем его Excel-ем, делаем окончательную обработку/форматирование и сохраняем его уже в формате Excel. Дюже просто и сердито.
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36546949
motorway
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyОднако, чем, собственно, не устраивает генерация уже готового и раскрашенного файла на сервере?
Допустим, пользователь считает какую-то финансовую модель и нажимает кнопку "Вычислить". При этом он ожидает сразу увидеть результаты, а не скачивать еще один файл с результатами. Так будет долго и неудобно.

А насчет Recordset - получится ли быстро считать около 10000 примечаний и поместить их в ячейки и наоборот, из ячеек в примечания? И раскраска - красятся же отдельные ячейки, можно ли их быстро закрасить таким способом, чтобы было за секунду?
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36546951
motorway
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrF, а что нужно дополнительно сделать, чтобы ваш пример работал? Пишет "User-defined type not defined" про Recordset
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36546955
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
motorwayAndrF, а что нужно дополнительно сделать, чтобы ваш пример работал? Пишет "User-defined type not defined" про Recordset

Добавить референс на Microsoft ActiveX Data Objects
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36547020
motorway
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сначала пробовал добавить, но другую - ADO. Получилось. А можно примерно таким же образом добавлять примечания или формулы в ячейку?
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36547076
motorway
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пока что не очень понял, будет ли такой способ нормально работать, если у нас есть список ячеек, который хотим обновить и значения для них (либо второй вариант - формулы, третий - примечания)?
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36547218
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
motorwayЯ пока что не очень понял, будет ли такой способ нормально работать, если у нас есть список ячеек, который хотим обновить и значения для них (либо второй вариант - формулы, третий - примечания)?

Надо разбираться. По крайней мере для тупого заполнения таблицы и раскраски ее по формуле пример я привел. Остальное за так делать хоть и не столь сложно, но уже и не интересно ;)
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36547228
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у 2007-го еще проще - посмотрел сейчас структуру xlsx-файла (можно открыть тем же WinRar-ом) - с ней вполне можно разобраться даже без описания. По крайней мере это явно не сложней чем chm-файлы, которые когда-то приходилось создавать из программы...
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36547271
motorway
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По сути, вот, что мне нужно - просто надежные способы:
1) быстро считать содержимое большого кол-ва ячеек, так чтобы его можно было послать на сервер/сохранить в файл.
2) быстро изменить содержимое большого кол-ва ячеек - присвоить значения (здесь может подойти вариант с csv или др.).
3) быстро считать содержимое большого кол-ва примечаний, чтобы можно было на основании их изменить содержимое ячеек/либо сохранить все примечания в файл.
4) быстро изменить большое кол-во примечаний.
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36547309
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
motorwayПо сути, вот, что мне нужно - просто надежные способы:
1) быстро считать содержимое большого кол-ва ячеек, так чтобы его можно было послать на сервер/сохранить в файл.
2) быстро изменить содержимое большого кол-ва ячеек - присвоить значения (здесь может подойти вариант с csv или др.).
3) быстро считать содержимое большого кол-ва примечаний, чтобы можно было на основании их изменить содержимое ячеек/либо сохранить все примечания в файл.
4) быстро изменить большое кол-во примечаний.

1 и 2 проблем вообще нет - см выше, там было показано. Как и с форматированием зависящим от значений ячеек все примитивно.

Самое сложное тут 3 и 4 - доступ к примечаниям по одному через объектную модель по одному будет все дико тормозить, а иначе вроде и невозможно.

Так что если они действительно нужны, то реализовать все быстро можно только через самостоятельное создание xlsx/xlsm файла, разобравшись в его структуре - оно достаточно просто даже без изучения документации. Заодно и без Excel-я на компе тогда можно будет обойтись (если не конвертировать в старые версии Excel)... Для упрощения работы можно использовать заготовку, просто добавляя в нее нужные строчки...
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36547311
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще здесь почитать...
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36547681
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrFТак что если они действительно нужны, то реализовать все быстро можно только через самостоятельное создание xlsx/xlsm файлаЛучше чистого xml (Сохранить как — Таблица XML), с зипом заморачиваться не надо.
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36548300
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyAndrFТак что если они действительно нужны, то реализовать все быстро можно только через самостоятельное создание xlsx/xlsm файлаЛучше чистого xml (Сохранить как — Таблица XML), с зипом заморачиваться не надо.

Ему примечания нужны, а как их запихнуть в чистый XML мне не ведомо...
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36548500
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrFЕму примечания нужны, а как их запихнуть в чистый XML мне не ведомо...Так ить "Сохранить как — Таблица XML"…
Имеем результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
...
<Cell>
    <Data ss:Type="String"> это значение </Data>
    <Comment ss:Author="Antonariy">
        <ss:Data xmlns="http://www.w3.org/TR/REC-html40">
            <B>
                <Font html:Face="Tahoma" x:CharSet="204" html:Size="8" html:Color="#000000"> это примечание </Font>
            </B>
        </ss:Data>
    </Comment>
</Cell>
...
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36548546
motorway
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё-таки XML мне не очень подходит - результат должен появляться в том же открытом файле Эксела. Если уж совсем ничего не будет получаться, я могу это попробовать, но это крайний вариант.
И потом, у меня файл .xlsm.
Примечания - довольно критичная для меня вещь, они используются по полной программе. И обновлять их и получать данные из них нужно быстро. :(
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36548567
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
motorwayВсё-таки XML мне не очень подходит - результат должен появляться в том же открытом файле Эксела. Если уж совсем ничего не будет получаться, я могу это попробовать, но это крайний вариант. И потом, у меня файл .xlsm. Примечания - довольно критичная для меня вещь, они используются по полной программе. И обновлять их и получать данные из них нужно быстро. :(

Так формируешь файл XML (тупо текстом), и только потом открываешь его Excel-ем, далее сохраняешь уже в нужном формате...
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36548573
motorway
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. вы имеете в виду перезапись - вместо текущего файла подставляется XML сгенерированный?
...
Рейтинг: 0 / 0
Долгая обработка текстовых данных в Экселе
    #36548645
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: motorway

Почитав всю переписку, для себя я пришёл к следующему выводу. что для ускорения общей работы нужно
- выбросить Ексель, вместо него написать специальную программу
- перестроить схему работы следующим образом: Передача данных на сервер вычислителю -> вычислитель складывает
обработанные данные в БД -> Программа выбирает данные для отображения и изменения из БД.

Потому что вам нужно не просто отображение данных, а чуть-ли не on-line мониторинг, изменение и практически
индивидуальное отображение каждого параметра. Ексель, со всей своей объектной структурой, не предназначен для
мгновенного отклика.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25 сообщений из 172, страница 2 из 7
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Долгая обработка текстовых данных в Экселе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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