powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обработка больших массивов из excel
29 сообщений из 29, показаны все 2 страниц
Обработка больших массивов из excel
    #32721799
letun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня всем !
При разработке системы обработки excel документов столкнулся с такой проблемкой, при обработке прайса размером 240 колонок и 3000 строк, система лопатит его примерно около 25 минут, чтение из excela идет по ячейкам в таблицу dasaset. В самом прайсе всего 10 колонок с информацией, остальные пустышки, связи с чем если у кого предложения как необрабатывать пустые колонки а потом их создать программно в datagrid, или как получить из excel, что колонка пустая. Нужно в datagrid отобразить excel документ как есть.
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32721828
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может лучше сразу все в память загнать?
кусок на c# выдран из кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
Excel.Range r1 = worksheet.get_Range("A10", objMissing);
r1.CurrentRegion.Select();
int colCount = r1.CurrentRegion.Columns.Count-2;
int rowCount = r1.CurrentRegion.Rows.Count;
			
object fromExcel;
fromExcel = r1.CurrentRegion.Value2;
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32721858
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, забыл:
protected object objMissing = System.Reflection.Missing.Value;
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32721860
letun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да неохота мне лопатить пустышки даже если я их загружу в память. К стати сделал два вложенных цикла на 1 лимон проходов в которых по строчке кода на увеличение переменной и отображение их в texbox, скорость работы меня не впечатлила, может быть в этом дело ?
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32721888
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
objMissing - это и есть пустышка...
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32721904
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не знаю, что там за обработка, но у меня файл 10000 строк 10 столбцов + обработка на лету 3-х столбцов занимает меньше секунды...
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32721918
letun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если можно исходничек по подробней можно? Обработка достаточно банальна, открывается excel документ через объектную переменную, берется количество колонок и столбцов, и в цикле по ячейкам идет считывание в таблицу DataSet вот и все.
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32721954
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще раз обращаю внимание на CurrentRegion (CurrentRegion - область, ограниченная не пустыми ячейками):
код на c#, но я думаю и так все понятно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Excel.ApplicationClass excelApp =  new ApplicationClass();
_Workbook workbooks = excelApp.Workbooks;
_Workbook workbook = workbooks.Open(.....);
Sheets sheets = workbook.Worksheets;
_Worksheet worksheet = (Excel._Worksheet)sheets.get_Item(1);

Excel.Range r1 = worksheet.get_Range("A1", objMissing);  //выбирается область, ограничивающая ячейку A1 не пустыми ячейками 
object fromExcel = r1.CurrentRegion.Value2;  //считываем данные в массив 
r1.CurrentRegion.Select();  //это только для того, что бы убедится, что выбрана вся область 

 //а дальше теми же циклами обрабатывать массив fromExcel  

...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32721979
letun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в том, что я изначально не знаю какой регион выделить т.к. документ идет рваный, одна колонка заполнена, две пустых, следующая колонка опять заполнена и т.д., если бы данные были заполнены например с А1 по С10 без пустышек, тогда полнустью согласен можно было зацепить через регион.
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32721996
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда мне не понятно, как формируется цикл по строкам и столбцам?
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32722020
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
???
Код: plaintext
1.
Excel.Range r1 = worksheet.get_Range(worksheet.Cells[1,1],worksheet.Cells[240,3000]);
object fromExcel = r1.Value2;
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32722043
letun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК, попробуем предложенный вариант, посмотрим, что из этого получится
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32722121
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только в код закралась описочка:
worksheet.Cells[3000, 240] (Cells[rowIndex,columnIndex])
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32722237
letun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попутно вылезла еще одна проблемка, если в excele есть скрытые столбцы, то они выводется как пустые, что делать, предложения. Вопрос к profil через регион можно зацепить скрытые столбцы, обращение по ячейкам не как не катит.
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32722289
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно.
+ можно отобразить все столбцы, примерно так:
r1.EntireColumn.Hidden = false;
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32722376
letun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кусочек примера для последователей

Dim objWB As Excel.Workbook
Dim oWS As Excel.Worksheet = DirectCast(objWB.Worksheets("Лист1"), Excel.Worksheet)
Dim rng As Excel.Range
' Открываем скрытые колонки
oWS.Cells().EntireColumn.Hidden() = False

' Получаем количество реально заполненных колонок без пустышек
Dim iColumns As Integer
rng = xlApp.ActiveCell
iColumns = rng.Column

P.S.: Продолжение следует............
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32723450
letun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В это новый день, хочется выразить благодарность доктору PROFI по поводу лечения больного, спасибо доктор ноги стали отрастать ! А теперь по делу, методика копирования данных в память и их обработка из массива, дала примерно 70% прирост производительности, но не как 100000 записей в секунду, может у PROFI стоит супер-пупер комп, у нас он по проще. Остались пока проблемы с выделением областей, сегодня испробуем предложения PROFI, и еще одна проблемка стала лезть, после закрытия объекта excel стали лесть запросы на сохранение документа, где то мне попадалась ссылка по данной теме, но вот, где, склерос хуже соплей.
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32723500
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
letun... после закрытия объекта excel стали лесть запросы на сохранение документа...А сохранять то надо?
workbook.Save()
workbook.SaveAs()
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32723513
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы. profil
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32723525
letun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сохранять не надо, да и сохранять нечего в документ же не чего не пишу. Где то попадались мне эти грабли, только вот где ?
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32723549
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
открывай документ только для чтения
workbook = workbooks.Open(ExcelOpenDialog.FileName,objMissing,true,objMissing,...);
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32723569
letun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерчик через OpenDialog ?
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32723599
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в чём проблема?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
OpenFileDialog ExcelOpenDialog = new OpenFileDialog();
ExcelOpenDialog.Multiselect = false;
ExcelOpenDialog.Title = "Выберете файл для конвертирования данных";
ExcelOpenDialog.Filter = "Таблицы Excel (*.xls)|*.xls";
if(ExcelOpenDialog.ShowDialog() == DialogResult.OK)
{
	 //... 
	workbook = workbooks.Open(ExcelOpenDialog.FileName,objMissing,true,objMissing,...);
	 //там куча параметров, но они все пустые 
	 //... 
}
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32723841
letun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PROFI дык у меня тоже самое, и лекарство не помогает, не дело в чем-то другом и лезит он именно при закрытие документа.
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32723969
letun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim xlApp As Excel.Application = New Excel.Application
Dim objWB As Excel.Workbook

А вот подоспела и вакцинка:
'Функция для открытия файлов Excel
Public Function OpenFile() As String
Dim oOpenDialog As OpenFileDialog = New OpenFileDialog
oOpenDialog.Multiselect = False
oOpenDialog.Title = "Select Excel Style Change File"
oOpenDialog.Filter = "Style Change Files (*.xls)|*.xls"
If oOpenDialog.ShowDialog = DialogResult.OK Then
Return oOpenDialog.FileName 'возвращается полный путь и имя открываемого файла
Else
Return ""
End If
----------------------------------------------------------------------
Открываем книгу

'Получить имя файла через диалог

If (Me.TextBox1.Text <> "") Then
objWB = xlApp.Workbooks.Open(FileName:=OpenFile )
......
' тут ваш код
......

End If

' А вот так закрываем книгу без лишних вопросов
xlApp.Workbooks(1).Close(SaveChanges:=False, FileName:=strFilename)
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32723990
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
excelApp.DisplayAlerts = false;
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32724005
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поясню: это другая вакцина. Она подавляет все предупреждения со стороны Excel'я
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32724079
letun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я как тот мухамор из рекламы микояновской колбасы с телека:
П О Д Т В Е Р Ж Д А Ю !!!

Рекомендовано Минздравом.
...
Рейтинг: 0 / 0
Обработка больших массивов из excel
    #32724161
letun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот дошли руки и до выделения областей. Рассмотрим для примера такой код:

Dim oWS As Excel.Worksheet = DirectCast(objWB.Worksheets("Лист1", Excel.Worksheet)
' Открываем скрытые колонки
oWS.Cells().EntireColumn.Hidden() = False
' Получаем количество реально заполненных колонок без пустышек
Dim objMissing As Object = System.Reflection.Missing.Value
Dim r1 As Excel.Range = oWS.Range("A15", objMissing)
r1.CurrentRegion.Select()
iColumns = r1.CurrentRegion.Columns.Count
iRows = r1.CurrentRegion.Rows.Count
Dim fromExcel As Object
fromExcel = r1.CurrentRegion.Value2

а проблема в этой строчке oWS.Range("A15", objMissing), ранее я говорил, что область рванная, нельзя сразу сказать сколько будет пустых строк от начала документа и нет гарантии, что на строке А15 не будет пустой строки, а отсюду вытекает если к примеру взять начальную точку А1 пустую (встроен графический объект), она и возвращает область пустых данных. Конечно можно оставить и так, что - бы А15 поподала в область данных, но как то уж кривовато. Твое мнение и предложения PROFI.
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обработка больших массивов из excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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