![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
![]()
Доброго времени суток.
У меня появились большие проблемы при работе с большими таблицами (около 20000 ячеек). Во-первых, кто-нибудь знает, какова макс. длина текста в ячейке в Экселе 2010? У меня в приложении при работе с большими моделями в ячейку нужно записывать много текста, возможно, где-то до 200 кб. Но, похоже, это не лучший вариант, т.к. там может не все уместиться. И при этом скорость работы просто ужасная - мне нужно обрабатывать много данных, получается просто безбожно по скорости (20 минут обрабатывало, и в конце получилась ошибка). Стоит ли записывать эти данные в файл, а не в ячейки, нормальная ли скорость работы с файлами будет? Основная проблема вот в чем: вначале данные из ячеек (~20000) собираются в строку и отсылаются на сервер, дальше приходит ответ с сервера с результатами тоже в виде строки. Их надо обработать и раскидать новые значения по ячейкам. Строка имеет вид "данные для 1 ячейки - разделитель - для 2 ячейки - разделитель" и т.п. Даже сама эта обработка получается очень медленной - происходит парсинг строки и присвоение ячейкам новых значений (напр., B2=30, B3=40, B4=50...). Есть ли способ как-то ускорить такой парсинг, или при таком числе ячеек не стоит надеяться на приемлемую скорость (макс. 0,5-1 мин)? Желательно принципиально ускорить. Пример файла не даю по нек-рым причинам - тут важен не сам файл, а общая картина. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]()
Самый, на мой взгляд, рациональный способ, который может оказаться в десятки (а то и сотни) раз быстрее, это не работать с ячейками листа.
Например, с помощью FileSystemObject считывать данные из текстового файла в переменную (или массив), обработать так, как Вам требуется (опять же, бкз использования ячеек рабочего листа), получить результат в виде массива, и только потом, одной командой, поместить данные на лист. Естественно, не зная конкретной задачи, ответ в очень общих чертах. P.S. С Excel 2010 дела не имел.
Чем шире угол зрения, тем он тупее.
Последний раз редактировалось SAS888; 25.03.2010 в 07:40. |
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
![]()
Спасибо за ответ. Но проблема именно в том, что ячейки нужны для ввода данных в таблицу. В нее вводятся значения и формулы, затем формируется длинная строка из них и посылается на сервер. Полученный результат парсится и помещается в таблицу. Дело усложняется наличием примечаний к ячейкам.
У меня есть подозрение насчет времени - в цикле для каждой ячейки ищется ее содержимое и прибавляется к посылаемой строке result: result=result+Cell.Value (примерно так). И вот когда строка уже большая, наверно, каждый раз происходит чтение текущего ее значения, а затем к ней дописывается новое значение. Соотв-но, если 20000 ячеек, а строка удлиняется, то каждый раз гоняются килобайты, и из-за этого все тормозит. Правда, не знаю, можно ли по-другому... |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 24.06.2008
Сообщений: 516
|
![]()
У меня обрабатывается около 3 млн. ячеек и все это дело вставляется на лист секунд за 15-20. Правда там в основном числа, ячеек с текстом около 1 тыс. Но все равно. А метод использую то что указал SAS888. Так что лучше подготовь файл без конфиденциальной информации и выкладывай...
Можно сделать все! Было бы время, да деньги...
|
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
![]()
Сам файл довольно долго переделывать - там еще много макросов, и код надо подчищать, чтобы убрать лишнее.
Пока что остановлюсь на проблемной функции парсинга полученного от сервера ответа (она для ~8600 ячеек занимает больше 1 минуты, строка поступает размером 213 кБ, малозначимые части кода убраны): Код:
Все-таки для такого объема это несусветно много по времени, а планируется работать с 20000 ячеек. Там-то вообще может 20 минут тормозить. И пример поступающей строки прикладываю. |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 02.05.2009
Сообщений: 3,907
|
![]()
Посмотрите мой вариант.На примере вашего Текстовика порядка 30 секунд.Справедливо в диапазоне A-Z
Файл 2007
Анализ,обработка данных Недорого
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 02.05.2009
Сообщений: 3,907
|
![]()
В моем старом варианте нагородил огород,полагал.что обращение к ячейке через индекс столбца будет быстрее.На практике это не подтвердилось.Попробуйте этот вариант.Так как есть условие замены цвета.то к ячейкам все равно надо обращаться
Код:
Анализ,обработка данных Недорого
|
![]() |
![]() |
![]() |
#8 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
![]()
Попробую. А у меня появилась мысль - может, это можно через Аксесс провернуть? Данные с сервера скидывать в .mdb файл, а потом макросом вставлять в таблицу. Так не быстрее будет? Правда, важно, чтобы при этом никуда не делись примечания к ячейкам и остальные вещи типа стилей.
|
![]() |
![]() |
![]() |
#9 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
![]()
Ведь, к примеру, в Экселе 2007 есть функция "Данные из Аксесс". Там они вставляются довольно быстро, правда, не знаю насчет 20000 ячеек, но вроде бы это типичная ситуация для БД, так что должно работать быстро - не 20 минут же. Хотя для 20000 и моего приложения и 1,5 мин много.
|
![]() |
![]() |
![]() |
#10 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
![]()
Также есть возможность записать рез-ты работы скрипта на сервере в MySQL, чтобы подключаться к ней из Эксела и отображать полученные данные. Это реально и лучше ли?
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Обработка текстовых файлов | Маринка777 | Общие вопросы .NET | 2 | 22.12.2009 17:37 |
Обработка данных с помощью приложения Microsoft Excel | Pugoffka | Помощь студентам | 0 | 03.12.2009 10:42 |
Обработка символьных данных и текстовых файлов | Skrip | Общие вопросы C/C++ | 7 | 17.06.2009 21:54 |
Обработка символьных данных и текстовых файлов | Skrip | Общие вопросы C/C++ | 13 | 10.06.2009 20:51 |
Обработка текстовых файлов | Frenki | Помощь студентам | 4 | 17.05.2009 14:52 |