Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обработка больших массивов из excel / 25 сообщений из 29, страница 1 из 2
04.10.2004, 11:27
    #32721799
letun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
Доброго дня всем !
При разработке системы обработки excel документов столкнулся с такой проблемкой, при обработке прайса размером 240 колонок и 3000 строк, система лопатит его примерно около 25 минут, чтение из excela идет по ячейкам в таблицу dasaset. В самом прайсе всего 10 колонок с информацией, остальные пустышки, связи с чем если у кого предложения как необрабатывать пустые колонки а потом их создать программно в datagrid, или как получить из excel, что колонка пустая. Нужно в datagrid отобразить excel документ как есть.
...
Рейтинг: 0 / 0
04.10.2004, 11:40
    #32721828
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
Может лучше сразу все в память загнать?
кусок на 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
04.10.2004, 11:50
    #32721858
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
да, забыл:
protected object objMissing = System.Reflection.Missing.Value;
...
Рейтинг: 0 / 0
04.10.2004, 11:51
    #32721860
letun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
Да неохота мне лопатить пустышки даже если я их загружу в память. К стати сделал два вложенных цикла на 1 лимон проходов в которых по строчке кода на увеличение переменной и отображение их в texbox, скорость работы меня не впечатлила, может быть в этом дело ?
...
Рейтинг: 0 / 0
04.10.2004, 11:59
    #32721888
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
objMissing - это и есть пустышка...
...
Рейтинг: 0 / 0
04.10.2004, 12:04
    #32721904
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
не знаю, что там за обработка, но у меня файл 10000 строк 10 столбцов + обработка на лету 3-х столбцов занимает меньше секунды...
...
Рейтинг: 0 / 0
04.10.2004, 12:10
    #32721918
letun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
Если можно исходничек по подробней можно? Обработка достаточно банальна, открывается excel документ через объектную переменную, берется количество колонок и столбцов, и в цикле по ячейкам идет считывание в таблицу DataSet вот и все.
...
Рейтинг: 0 / 0
04.10.2004, 12:28
    #32721954
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
еще раз обращаю внимание на 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
04.10.2004, 12:42
    #32721979
letun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
Проблема в том, что я изначально не знаю какой регион выделить т.к. документ идет рваный, одна колонка заполнена, две пустых, следующая колонка опять заполнена и т.д., если бы данные были заполнены например с А1 по С10 без пустышек, тогда полнустью согласен можно было зацепить через регион.
...
Рейтинг: 0 / 0
04.10.2004, 12:48
    #32721996
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
тогда мне не понятно, как формируется цикл по строкам и столбцам?
...
Рейтинг: 0 / 0
04.10.2004, 12:59
    #32722020
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
???
Код: plaintext
1.
Excel.Range r1 = worksheet.get_Range(worksheet.Cells[1,1],worksheet.Cells[240,3000]);
object fromExcel = r1.Value2;
...
Рейтинг: 0 / 0
04.10.2004, 13:11
    #32722043
letun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
ОК, попробуем предложенный вариант, посмотрим, что из этого получится
...
Рейтинг: 0 / 0
04.10.2004, 13:49
    #32722121
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
только в код закралась описочка:
worksheet.Cells[3000, 240] (Cells[rowIndex,columnIndex])
...
Рейтинг: 0 / 0
04.10.2004, 14:34
    #32722237
letun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
Попутно вылезла еще одна проблемка, если в excele есть скрытые столбцы, то они выводется как пустые, что делать, предложения. Вопрос к profil через регион можно зацепить скрытые столбцы, обращение по ячейкам не как не катит.
...
Рейтинг: 0 / 0
04.10.2004, 14:51
    #32722289
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
можно.
+ можно отобразить все столбцы, примерно так:
r1.EntireColumn.Hidden = false;
...
Рейтинг: 0 / 0
04.10.2004, 15:22
    #32722376
letun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
Кусочек примера для последователей

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
05.10.2004, 11:02
    #32723450
letun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
В это новый день, хочется выразить благодарность доктору PROFI по поводу лечения больного, спасибо доктор ноги стали отрастать ! А теперь по делу, методика копирования данных в память и их обработка из массива, дала примерно 70% прирост производительности, но не как 100000 записей в секунду, может у PROFI стоит супер-пупер комп, у нас он по проще. Остались пока проблемы с выделением областей, сегодня испробуем предложения PROFI, и еще одна проблемка стала лезть, после закрытия объекта excel стали лесть запросы на сохранение документа, где то мне попадалась ссылка по данной теме, но вот, где, склерос хуже соплей.
...
Рейтинг: 0 / 0
05.10.2004, 11:13
    #32723500
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
letun... после закрытия объекта excel стали лесть запросы на сохранение документа...А сохранять то надо?
workbook.Save()
workbook.SaveAs()
...
Рейтинг: 0 / 0
05.10.2004, 11:16
    #32723513
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
зы. profil
...
Рейтинг: 0 / 0
05.10.2004, 11:19
    #32723525
letun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
Сохранять не надо, да и сохранять нечего в документ же не чего не пишу. Где то попадались мне эти грабли, только вот где ?
...
Рейтинг: 0 / 0
05.10.2004, 11:25
    #32723549
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
открывай документ только для чтения
workbook = workbooks.Open(ExcelOpenDialog.FileName,objMissing,true,objMissing,...);
...
Рейтинг: 0 / 0
05.10.2004, 11:31
    #32723569
letun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
Примерчик через OpenDialog ?
...
Рейтинг: 0 / 0
05.10.2004, 11:43
    #32723599
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
а в чём проблема?
Код: 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
05.10.2004, 13:00
    #32723841
letun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
PROFI дык у меня тоже самое, и лекарство не помогает, не дело в чем-то другом и лезит он именно при закрытие документа.
...
Рейтинг: 0 / 0
05.10.2004, 13:49
    #32723969
letun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка больших массивов из excel
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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обработка больших массивов из excel / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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