Имя: Пароль:
1C
 
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 - спасибо огромное
все оказалось намного проще - дело не в адо а в моем кривом коде