|
1с + ado + excel - не грузится инфа после пустых строк ₽ | ☑ | ||
---|---|---|---|---|
0
smolbars
07.10.08
✎
12:38
|
Всем доброго времени суток
Ситуация вот какая на обработине написанной на 77 гружу данные из excel Вот код db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ стрПолноеИмяФайла +";Extended Properties=""Excel 8.0;HDR=NO;IMEX=1;"""; db.Open(); obj_oleExcel.ActiveConnection = db; obj_oleExcel.CursorType = 3; obj_oleExcel.LockType = 2; obj_oleExcel = createobject("ado.recordset"); obj_oleExcel.source = "select * from " + нужный лист; obj_oleExcel.open(); obj_oleExcel.movefirst(); Пока obj_oleExcel.Eof() = 0 Цикл Итер = Итер + 1; // условия выхода из цикла - если пройдено больше строк чем //последняя строка Если Итер > строка до которой грузим Тогда Прервать; КонецЕсли; Если Итер >= строка откуда грузим тогда стр = СокрЛП(obj_oleExcel.Fields(НужнаяКолонка-1).Value); ... далее код конецесли; obj_oleExcel.movenext(); конеццикла; естетвенно я не писал приводил исключительных ситуаций тут - ну и вообще весь код И такой момент - если перед нужной колонкой стоит пустая колонка - код ее тож игнорирует т е если моя колонка вторая а перед ней пустая то имено моя колонка считается первой юзать оле не вариант - в офисе нет ms офиса только оо |
|||
1
ТелепатБот
гуру
07.10.08
✎
12:38
|
||||
2
FN
07.10.08
✎
12:41
|
Если не принципиально АДО - то бери ВК Йоксел
|
|||
3
big
07.10.08
✎
12:43
|
Встречал варианты чтения из екселя с заведомо бОльшим числом итераций цикла. По строкам стояло тупо 65536. По колонкам ессно меньше.
|
|||
4
smolbars
07.10.08
✎
12:56
|
2 - на адо уже все написано
но подумаю как вариант 3 - а при чем тут циклы итераций - он у меня не воспринимает именно инфу после пустых строк |
|||
5
Злопчинский
07.10.08
✎
13:02
|
бери йоксель...
в адо у мну тупо не весь файл читало... причем файл - "плоский".. забороть н е смог.. |
|||
6
smolbars
07.10.08
✎
13:07
|
ёксель не реально - в фирме нету купленного ms office и не будет (решаю не яче покупать че не покупать)
|
|||
7
774816
07.10.08
✎
13:11
|
(0) наименовании есть у колонок?
условие кол.строк можно включить в запрос "select top 150 * from " + нужный лист; |
|||
8
smolbars
07.10.08
✎
13:25
|
а причем тут кол-во строк - у меня и так все видны. у меня почему то после получения первой пустой строки остальные тож пустыми идут
наименование колонок юзать не реально - оно любое загрузчик универсальный |
|||
9
774816
07.10.08
✎
13:46
|
попробуй подключиться через
ODBC "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=C:\MyExcel.xls;DefaultDir=c:\mypath;" сколько строк в рекордете стока же сколько в листе? Сообщить(obj_oleExcel.RecordCount()) |
|||
10
smolbars
07.10.08
✎
14:18
|
7 - не катит
8 - через рекодркаунт все ок показывает и все равно не работает со строками после пустой |
|||
11
774816
07.10.08
✎
14:23
|
покажи весь код котрый
|
|||
12
Kolyasik
07.10.08
✎
14:24
|
а через ком цепляться не пробовал? вдрук проще ;)
|
|||
13
774816
07.10.08
✎
14:26
|
(11) покажи весь код
(12) для кома ексель нужен см (6) |
|||
14
smolbars
07.10.08
✎
15:39
|
Попытка
db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ стрПолноеИмяФайла +";Extended Properties=""Excel 8.0;HDR=NO;IMEX=1;"""; db.Open(); obj_oleExcel.ActiveConnection = db; obj_oleExcel.CursorType = 3; obj_oleExcel.LockType = 2; Исключение // если не получается открыть файл // выдать сообщение Предупреждение("Не удалось открыть файл!",15); Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; obj_oleExcel.Source = "Select * from [" + ИмяЛиста + "]"; // прописать хапрос для выбора нужной страницы Попытка // попытаться открыть лист excel obj_oleExcel.open(); Исключение Предупреждение("Не правильно введен лист " + ОписаниеОшибки()); Возврат; КонецПопытки; obj_oleExcel.movefirst(); Пока obj_oleExcel.Eof() = 0 Цикл Итер = Итер + 1; Состояние("Обработка. Осталось строк: " + (поле_чслКолвоСтрок1 - Итер)); // условия выхода из цикла - если пройдено больше строк чем последняя строка Если Итер > поле_чслКолвоСтрок1 Тогда Прервать; КонецЕсли; Если Итер >= поле_чслКолвоСтрок Тогда стрАртикул = СокрЛП(obj_oleExcel.Fields(КолонкаАртикул-1).Value); Если ПустоеЗначение(стрАртикул) = 1 Тогда Сообщить("пустой артикул в строке " + Строка(Итер)); Продолжить; КонецЕсли; // далее КонецЕсли; obj_oleExcel.MoveNext(); КонецЦикла; obj_oleExcel.close(); db.Close(); |
|||
15
smolbars
07.10.08
✎
15:39
|
вот примерно такой код
|
|||
16
774816
07.10.08
✎
16:00
|
так попробуй
стрАртикул = СокрЛП(obj_oleExcel.Fields(КолонкаАртикул-1).Value); Если Итер >= поле_чслКолвоСтрок Тогда Если ПустоеЗначение(стрАртикул) = 1 Тогда Сообщить("пустой артикул в строке " + Строка(Итер)); Продолжить; КонецЕсли; |
|||
17
smolbars
07.10.08
✎
16:52
|
16 - неа не помогает эффект тот же
через диапазон можно обращаться или не рекомендуется |
|||
18
PaulBC
07.10.08
✎
17:01
|
Если ПустоеЗначение(стрАртикул) = 1 Тогда
Сообщить("пустой артикул в строке " + Строка(Итер)); obj_oleExcel.MoveNext(); Продолжить; КонецЕсли; |
|||
19
774816
07.10.08
✎
17:04
|
можно, смысл ограничений в диапазоне какой? может как то в запросе установить условия на пустые значение поля артикул если это нужно
|
|||
20
smolbars
07.10.08
✎
17:17
|
19 - спасибо огромное
все оказалось намного проще - дело не в адо а в моем кривом коде |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |