Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Запись через ADO в Excel (число прочтений - 4769 )
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Запись через ADO в Excel
03. Июля 2013 :: 11:21
Печать  
Народ, помогите кто сталкивался.
Суть в том, что все работает если рКод числовой, а вот если нет, пишет о несовпадении типов, что не пытался делать, не хочет менять тип. Если зайти в этот ексель, тип там текстовый Печаль
РС.Fields(14).Value=Строка(рКодК); тут пишет несоответствие типов Печаль  Но РС.Fields(14).Type =5 это число, хоть убейся.

Код
Выбрать все
ФЕШ = СоздатьОбъект("ADODB.Connection"); //шаблон

    СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0;Data source="+СокрЛП(ордер)+";Extended Properties=""Excel 8.0;HDR=No;""";
    Попытка
        ФЕШ.Open(СтрокаПодключения); // IMEX=1 tell the driver to always read "intermixed" data column as text READ-ONLY

    Исключение
        Предупреждение("Не смогли подключиться к файлу "+СокрЛП(ордер)+" возможно сеть или файл недоступен!",10);
        СтатусВозврата(0);
        Возврат;
    КонецПопытки;
    Catalog    = CreateObject("ADOX.Catalog");
    Catalog.ActiveConnection=ФЕШ;
    СписокЛистов = СоздатьОбъект("СписокЗначений");
    Для кк=0 по Catalog.Tables.Count-1 Цикл
        ИмяЛиста=СокрЛП(Catalog.Tables(кк).Name);
        Если Найти(ИмяЛиста,"$_")=0 Тогда
            Если СокрЛП(ИмяЛиста)="Прайс$" Тогда
                СписокЛистов.ВставитьЗначение(1,ИмяЛиста);
            Иначе
                СписокЛистов.ДобавитьЗначение(ИмяЛиста);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    ИмяЛиста = СписокЛистов.ПолучитьЗначение(1);
    РС                    = СоздатьОбъект("ADODB.RecordSet");  
    РС.ActiveConnection = ФЕШ;
    РС.CursorType        = 3;// 'Статический курсор.

    РС.LockType            = 2;// 'Пессимистическая блокировка.

    РС.Source            = "Select * From ["+ИмяЛиста+"]";
    //РС.Fields(14).Type    = 202;

    //РС.Fields(0).Type    = 202;

    РС.Open();
    Сч=0;
    колСтр=РС.RecordCount;
    
    //Сообщить(РС.Supports());

    рКодК=рКодКА;
    Пока РС.EOF()=0 Цикл  
        Сч=Сч+1;
        процент=""+Окр(Сч/колСтр*100,0)+"%";
        Состояние("Обработано: "+процент);
        РКод=РС.Fields(0).Value;
        РТМЦ = ПолучитьПустоеЗначение("Справочник.ТМЦ");
        Если СпрТМЦ.НайтиПоКоду(СокрЛП(РКод))=1 Тогда
            РТМЦ = СпрТМЦ.ТекущийЭлемент();
        КонецЕсли;
        Если Сч=1 Тогда
            //Сообщить(РС.Fields(14).Type);

            //РС.Fields(14).Type = 129;

            РС.Fields(14).Value=Строка(рКодК);
            РС.Update();
        ИначеЕсли Сч=2 Тогда
            //Сообщить(РС.Fields(0).Type);

            РС.Fields(0).Value=рКодК;
            РС.Update();
        КонецЕсли;
        Если (скидки=0) И (сч>3) Тогда
            Прервать;
        КонецЕсли;
КонецЦикла;
 

  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Запись через ADO в Excel
Ответ #1 - 14. Августа 2013 :: 10:04
Печать  
  
Наверх
 
IP записан
 
fally
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 05. Апреля 2017
Пол: Мужской
Re: Запись через ADO в Excel
Ответ #2 - 05. Апреля 2017 :: 02:55
Печать  
Спасибо!
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать