Вход | Регистрация


1С:Предприятие ::

Метки: 

Microsoft OLEDB + 1с = удаляет первую колонку

Я
   coding
 
03.11.17 - 13:30
Загружаю эксель через OLEDB - не видит первой колонки.
Строка подключения 

СonnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + СокрЛП(ФайлEXCEL) + ";Extended Properties=""Excel 12.0;HDR=NO;IMEX=1;""";

Другие файлы - загружаются хорошо. Именно прайс этого поставщика - нет. Если его открыть в екселе и просто сохранить - тоже начинает работать.
Сам прайс можно скачать здесь
http://dropmefiles.com/yWxUn
В чем может быть проблемма?
 
 
   Ёпрст
 
1 - 03.11.17 - 14:22
(0)
HDR=Yes;IMEX=1
   coding
 
2 - 03.11.17 - 15:12
(1) Проверял. Тоже самое
   coding
 
3 - 03.11.17 - 15:37
Попробуйте кто-нибуть открыть программно у себя этот прайс.
   Сияющий в темноте
 
4 - 03.11.17 - 15:47
аикод показать
может быть
везде теряется первая строка,просто в остальных местах в первой строке нет даных
   coding
 
5 - 03.11.17 - 16:49
(4) Не очень понял..
Первая строка не теряется. А колонка - да!
Кода тут много.. Лучше попробуйте открыть файл у себя.
   coding
 
6 - 03.11.17 - 17:26
нет больше вариантов?
   LuciferArh
 
7 - 03.11.17 - 17:34
(6) Без твоего кода - нет. Никто не будет бесплатно тратить свое время, чтобы сделать решение за тебя и для тебя.
   Филиал-msk
 
8 - 03.11.17 - 17:34
(6) Ты так настойчиво предлагаешь нам его загрузить, что это начинает пугать. Что ты туда вставил?

Код показывай. SELECT там, FROM разные...
   coding
 
9 - 03.11.17 - 18:26
СonnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + СокрЛП(ФайлEXCEL) + ";Extended Properties=""Excel 12.0;HDR=NO;IMEX=1;""";


 Попытка
        // Инициализация основного объекта ADODB.Connection. Открытие соединения.

        ADODBConnection = Новый COMОбъект("ADODB.Connection");
        ADODBConnection.ConnectionString =  СonnectionString;
        ADODBConnection.Open();
        // Импирически определенный параметр для правильного определения количества строк листа.

        ADODBConnection.CursorLocation = 3;    // По-умолчанию 2.

    Исключение
                 ТекОшибка = ОписаниеОшибки();
        //Сообщить(НСтр("ru = '"+ТекОшибка+"'"), СтатусСообщения.Внимание);

        Возврат Новый ТаблицаЗначений;    // В случае ошибки возвращаем пустую таблицу значений.

    КонецПопытки;


   ТекстЗапроса = "SELECT * FROM [" + ИмяЛистаСловами + "]";
  //   ТекстЗапроса = "SELECT * FROM [" + ИмяЛиста + "]";

    
    // Создание Recordset. Дочерний объект ADODBConnection. Набор записей по запросу.

 
        ADODBRecordset = Новый COMОбъект("ADODB.Recordset");
        ADODBRecordset.Open(ТекстЗапроса, ADODBConnection);



  
    // Параметр, возвращаемый в вызывающую процедуру.

    КолвоСтрокExcel = ADODBRecordset.RecordCount + 1;    // (+1) - учет Строки-Заголовока, которая "съедается".

    КолвоКолонокExcel = ADODBRecordset.Fields.Count;


    
    Для ит = 1 ПО КолвоКолонокExcel Цикл
        
        Поле = ADODBRecordset.Fields.Item(ит - 1);
        ИмяКолонки = "К_" + ит;
        Колонка = ТаблицаРезультат.Колонки.Добавить(ИмяКолонки, , СокрЛП(СтрЗаменить(Поле.Name, "#", ".")));

        // Замена "#" на ".", т.к. при считывании ADODB "." в имени колонки заменяется на "#".

        
    КонецЦикла;
   coding
 
10 - 03.11.17 - 18:27
В последнем цикле 
 Поле = ADODBRecordset.Fields.Item(0); - возваращет значение из второй (!) колонки, а не первой.
 
 Рекламное место пустует
   coding
 
11 - 03.11.17 - 18:29
(8) ничего я туда не пхал.
Просто как можно помочь, если не видеть проблемы?
код выше рабочий для всех 30 разных прайсов, кроме одного этого!
   Филиал-msk
 
12 - 03.11.17 - 18:33
(9) > Импирически
Бляяяяяя....

>
ТекстЗапроса = "SELECT * FROM [" + ИмяЛистаСловами + "]"

Этот селект выбирает данные не только из листов, но и из именованных областей. Что внутри ИмяЛистаСловами?
   coding
 
13 - 03.11.17 - 22:12
(12)имя страницы. Для данного прайса "PITSTOP.COM.UA"
   h-sp
 
21 - 04.11.17 - 01:21
(20) вот чего фигней страдать? Делайте
ТабДок = НОвый ТабличныйДОкумент;
ТабДок.Прочитать(СокрЛП(ФайлEXCEL));


всё.

Что у вас там девятнадцатый век?
   Otark
 
23 - 04.11.17 - 09:46
(20)Не обращай внимания. Он так пишет в каждой ветке. Непонятно зачем. Или денег заработать пытается, или какие-то другие мотивы.
   МимохожийОднако
 
24 - 04.11.17 - 10:16
Попробуй
Для ит = 0 ПО КолвоКолонокExcel Цикл
   coding
 
25 - 04.11.17 - 23:18
(21)
Вариант не плохой..
Но по скорости в 5(!) раз хуже чем ADODB
   coding
 
26 - 04.11.17 - 23:20
(24) я же так и делаю.. с 0 по колКолонок -1
 Для ит = 1 ПО КолвоКолонокExcel Цикл        
        Поле = ADODBRecordset.Fields.Item(ит - 1);
   coding
 
27 - 05.11.17 - 23:23
Больше вариантов нет? :(
   ВыборКогдаТогда
 
28 - 06.11.17 - 00:12
(27) Следующий код читает за секунду.

&НаКлиенте
Процедура Прочитать(Команда)
    ПрочитатьДанные();
КонецПроцедуры

&НаСервере 
Процедура ПрочитатьДанные()
    ExcelApplication= Новый COMObject("Excel.Application");
    
    ExcelApplication.Workbooks.Open("C:\data\02.11.2017.xls");
    
    
    
    МассивДанныхЛистов=Новый Массив;
    
    Для НомерЛиста=1 По ExcelApplication.Worksheets.Count Цикл
        Лист = ExcelApplication.Worksheets(НомерЛиста);
        МассивДанныхЛистов.Добавить(ПрочитатьЛистExcel(Лист));
    КонецЦикла;
    
КонецПроцедуры

Функция ПрочитатьЛистExcel( ЛистЭксель ) Экспорт
    
    ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
    ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
    
    ТЗ=Новый ТаблицаЗначений;
    Для Счетчик = 1 По ВсегоКолонок Цикл
        ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
    КонецЦикла;
    
    Для Счетчик = 1 По ВсегоСтрок Цикл
        НоваяСтрока = ТЗ.Добавить();
    КонецЦикла;
    
    Область = ЛистЭксель.Range(ЛистЭксель.Cells(1,1), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
    Данные = Область.Value.Выгрузить();
    
    Для Счетчик = 0 По ВсегоКолонок-1 Цикл
        ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
    КонецЦикла;
    
    Возврат ТЗ;
КонецФункции
   h-sp
 
29 - 06.11.17 - 06:50
(28) Excel.Application это сразу выбросьте - это не годится.

Microsoft OLEDB позволяет без установки excel
   ВыборКогдаТогда
 
30 - 06.11.17 - 09:12
(29) Вам может и не годмтся, а у нас работает не первый год и все отлично.
   coding
 
31 - 06.11.17 - 10:26
(28)
800 тис(!) строк за сколько времени прочитает?
OLEDB - думаю за минут 2 справиться
   coding
 
32 - 08.11.17 - 10:10
Вариантов больше нет?
   Адинэснег
 
33 - 08.11.17 - 10:27
ADODB еще сырой
 
 
   Ёпрст
 
34 - 08.11.17 - 10:29
(0)
на вот. С такой строкой всё читает
        СтрокаПодключения="Provider=Microsoft.Jet.OLEDB.4.0; Data Source = "+ИмяФайлаЗагрузки+"; Extended Properties = "+"""Excel 8.0"+";HDR=NO;IMEX=1"";";
   ptiz
 
35 - 08.11.17 - 10:43
(34) Microsoft убила Jet.OLEDB.4.0 c октябрьскими обновлениями win 7.
   Ёпрст
 
36 - 08.11.17 - 10:47
(35) как-то пофигу, кто там чего "убил". Главное, на win2012х64 работает как надо и ладно
   LuciferArh
 
37 - 08.11.17 - 11:52
(36) А ты обновления установи - сильно удивишься.
   Ёпрст
 
38 - 09.11.17 - 08:10
(37) какие обновления ?
Сервер постоянно обновляется, всё норм



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует