Форум программистов, компьютерный форум, киберфорум
Наши страницы

Visual Basic .NET

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Nickopoll
25 / 25 / 1
Регистрация: 10.06.2009
Сообщений: 134
#1

ОЧЕНЬ медленный доступ к данным в файлах Excel - Visual Basic .NET

27.03.2013, 13:56. Просмотров 1296. Ответов 15
Метки нет (Все метки)

Проблем, собственно, две, и обе касательно скорости работы приложения при чтении из Excel.
Использую позднее связывание - тащить левые библиотеки на каждый комп не вариант.

Первая.
При открытии документа .xls во второй строке
vb.net
1
2
Dim Exl As Object = CreateObject("Excel.Application")
Exl.Workbooks.Open(FileName).Activate()
запускается отдельный процесс EXCEL.EXE, что плохо, потому что компы закупались в эру динозавров, а MS Office стоит 2007, поэтому запуск еще одного процесса EXCEL.EXE при десятке уже открытых документов (что часто бывает у бухгалтеров) - 256 метров памяти забиты под завязку, проц - в ужасе... страх вообще. Да еще и пока начнется загрузка данных приложение - проходит секунд 30.
Если возможна работа без запуска EXCEL.EXE - очень хорошо, если нет - очень плохо. но все же не критично.

Вторая.
Как определить, остались ли еще данные на листе Excle, не перебирая все строки до 10645 и не проверяя на наличие данных в каждой ячейке?

ЗЫ Загрузить данные как базу (используя OleDBConnection) не конает - данные не жестко структурированы. Приходится проверять каждую ячейку на наличие необходимого значения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2013, 13:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос ОЧЕНЬ медленный доступ к данным в файлах Excel (Visual Basic .NET):

КАк получить доступ к данным в Grid? - .NET
На форме есть Grid, я его заполняю так: mdb = New OleDbConnection mdb.ConnectionString = 'Строка соединения с mdb-файлом' hist =...

Навигация по записям и доступ к данным в ячейке DataTable - Visual Basic .NET
Всем привет. По избитому шаблону подключаюсь к таблице БД и, заполнив DataTable данными, отключаюсь. И тут возник вопрос: "А как,...

Доступ к объединенным ячейкам в Excel - Visual Basic .NET
Имеется куча файлов Excel (анкет) требуется все их обработать и перегнать нужные данные в базу MS Access. Все это несложно. Пока возник...

Получить доступ к листу Excel и прочитать данные - Visual Basic .NET
На форме два текстбокса один баттон и один лабел. Как сделать так: ввожу имя в текстбокс1, фамилию в текстбокс2 нажимаю баттон и если в...

Заблокирован доступ в социальные сети, очень медленный интернет - Удаление вирусов
Перестали работать пароли в социальных сетях, электронной почте и т.д. Очень медленно работает интернет.

Доступ к данным другой книги Excel - VBA
Нужно, работая в одной книге, открыть другую книгу и работать с данными оттуда. Есть фрагмент кода: Dim wb As Workbook DirName...

15
Splinter_Cell
239 / 129 / 16
Регистрация: 26.12.2012
Сообщений: 267
27.03.2013, 15:19 #2
Цитата Сообщение от Nickopoll Посмотреть сообщение
Если возможна работа без запуска EXCEL.EXE
- без вариантов

Цитата Сообщение от Nickopoll Посмотреть сообщение
Как определить, остались ли еще данные на листе
- почему бы не писАть отдельный Log.txt и в нём следить за обработкой?
1
Nickopoll
25 / 25 / 1
Регистрация: 10.06.2009
Сообщений: 134
27.03.2013, 16:56  [ТС] #3
Цитата Сообщение от Splinter_Cell Посмотреть сообщение
- почему бы не писАть отдельный Log.txt и в нём следить за обработкой?
Вот этого не понял... Причем наличие данных к логу?
0
Splinter_Cell
239 / 129 / 16
Регистрация: 26.12.2012
Сообщений: 267
27.03.2013, 17:05 #4
Цитата Сообщение от Nickopoll Посмотреть сообщение
Причем наличие данных к логу?
Ааа, я наверное не так понял! Я думал что нужно отслеживать, сколько строк уже отработано
0
dev.Free
Заблокирован
28.03.2013, 06:49 #5
Nickopoll, Если эра динозавров, тогда можно найти в сервис центрах Б/У ОЗУ и купить за копейки ну и дополнить компьютер.

2007 офис заменить на 2003 с дополнением для чтения книг 2007 офиса. 2003 более мягок к работе с ОЗУ.
0
Апострофф
Заблокирован
28.03.2013, 07:14 #6
Цитата Сообщение от Nickopoll Посмотреть сообщение
запускается отдельный процесс EXCEL.EXE, что плохо
Nickopoll, подсказка в 7-9 строках кода - Как прочитать значение ячейки Excel
0
Nickopoll
25 / 25 / 1
Регистрация: 10.06.2009
Сообщений: 134
28.03.2013, 22:15  [ТС] #7
inv.DS, хы =) А кто мне даст эти "копейки" на память для 18 компов? И где найти за копейки DDR (именно DDR, а не DDR2 или DDR3, которая б/у-шная стоит чуть ли не в два раза дороже новенькой DDR3)...


Апострофф, не то. В 7-9 строках подразумевается "Если Объект не инициализирован, то инициализировать его" - , то есть, если EXCEL.EXE не запущен - запустить его.

Да ладно, черт с этим EXCEL.EXE. Больше раздражает то, что книга открывается очень долго, особенно если весит она порядка 2-4 метров. Может, такой тормоз происходит из-за позднего связывания? Побегал по форумам, заглянул в википедию - упоминается об Open XML, но я не совсем въехал, что это и поможет ли оно мне решить проблему.
0
Pavel55
808 / 269 / 84
Регистрация: 27.10.2006
Сообщений: 627
28.03.2013, 22:33 #8
А если переписать на раннее связывание (т.е. подключение библиотеки Microsoft.Office.Interop.Excel) ?
0
Nickopoll
25 / 25 / 1
Регистрация: 10.06.2009
Сообщений: 134
28.03.2013, 22:38  [ТС] #9
Pavel55, так вот я об этом и спрашиваю =) Но самому пробовать, если чесно, лень . По этому хочу узнать мнение тех, кто уже так делал.
0
Pavel55
808 / 269 / 84
Регистрация: 27.10.2006
Сообщений: 627
29.03.2013, 08:44 #10
по-моему мнению должно быть быстрее и удобнее
0
Апострофф
Заблокирован
29.03.2013, 10:01 #11
Цитата Сообщение от Nickopoll Посмотреть сообщение
запускается отдельный процесс EXCEL.EXE, что плохо, потому что компы закупались в эру динозавров, а MS Office стоит 2007, поэтому запуск еще одного процесса EXCEL.EXE при десятке уже открытых документов (что часто бывает у бухгалтеров) - 256 метров памяти забиты под завязку, проц - в ужасе... страх вообще
Как раз это и есть решение, непонятно, чем оно не устроило?-
Цитата Сообщение от Nickopoll Посмотреть сообщение
В 7-9 строках подразумевается "Если Объект не инициализирован, то инициализировать его" - , то есть, если EXCEL.EXE не запущен - запустить его.
а если запущен, открывать новый документ в НЁМ!
0
Nickopoll
25 / 25 / 1
Регистрация: 10.06.2009
Сообщений: 134
29.03.2013, 21:56  [ТС] #12
Цитата Сообщение от Апострофф Посмотреть сообщение
Как раз это и есть решение, непонятно, чем оно не устроило?-
Тем, что, во-первых, при загрузке в НЕГО очередной книги, увеличивается и количество памяти, пожираемое процессом - то есть, сам процесс (оболочка) Excel весит около 20 метров, плюс данные из самих файлов - 3-4 метра, а если еще паралельно будет загружатся не одна книга?.. Получаем частый вылет системного сообщения о нехватке памяти. Во-вторых, при каждой загрузке книги в процесс Excel, этот процесс занимает практически все процессорное время (70-90%), к тому же, открытие почти каждой книги занимает 20-30 секунд, а потому что-либо еще делать бухгалтер не сможет во время работы приложения в фоне, тем более, работать с какими-то "левыми" таблицами Excel...

Еще один минус (хотя такое возникновения маловероятно, но все же...) в том, что если бухгалтеру взбредет в голову открыть файл, находящийся в обработке, вручную, то Excel выдаст предупреждение о том, что повторное открытие может привести к потери данных. Но даже если бугхалтер смекнет не открывать, и нажмет на кнопку "Нет" (не открывать), то книга все равно будет открыта - то есть показана пользователю визуально и дальнейшая работа приложения будет продолжаться, но окно Excel будет постоянно видно пользователю, со всеми загрузками и выгрузками книг, обработкой и прочим.
0
Юпатов Дмитрий
1611 / 1123 / 224
Регистрация: 23.12.2010
Сообщений: 1,494
29.03.2013, 23:19 #13
Посмотри тут: http://www.codeproject.com/Articles/42504/ExcelFormat-Library
и тут: http://www.codeproject.com/Articles/...MS-Office-2007
1
Nickopoll
25 / 25 / 1
Регистрация: 10.06.2009
Сообщений: 134
30.03.2013, 00:03  [ТС] #14
Цитата Сообщение от Юпатов Дмитрий Посмотреть сообщение
Вторая ссылка порадовала понял, че такое Open XML - жаль, что к xls формату не применимо, так бы решило кучу проблем.
А первая ссылка... эх, прийдеться си-шные указатели переваривать
0
Юпатов Дмитрий
1611 / 1123 / 224
Регистрация: 23.12.2010
Сообщений: 1,494
30.03.2013, 00:08 #15
Цитата Сообщение от Nickopoll Посмотреть сообщение
А первая ссылка... эх, прийдеться си-шные указатели переваривать
ну чем богаты... кстати, я на том ресурсе искал по "xls" и выбрал результаты поиска только на первых 3-4 страничках. Так что попробуй и ты еще поискать, вдруг на vb есть что-то подобное.
0
30.03.2013, 00:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2013, 00:08
Привет! Вот еще темы с ответами:

Доступ к данным Excel с помощью ADO.NET - C#
Подкиньте плиз примерчик, если кто сталкивался

Как получить доступ к данным в новом окне excel? - VBA
Добрый день, форумчане! Возникла следующая проблема. Имеется 1 запущенный файл с макросом. Далее через специальное ПО выгружается новая...

Как считать Excel файл и получить доступ к данным? - Java
Пожалуйста, кому не жалко, скинте примерчик как считать Excel'евский файл и получить доступ к данным, а может и после изменений как...

Очень медленный интернет через WI-FI - Удаление вирусов
Здравствуйте, очень нужна помощь. Ноутбук подключен к интернету через WI-FI однако скорость ужасно медленная. Проверяю скорость через сайт...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru