Имя: Пароль:
1C
1С v8
Microsoft OLEDB + 1с = удаляет первую колонку
,
0 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
2 coding
 
03.11.17
15:12
(1) Проверял. Тоже самое
3 coding
 
03.11.17
15:37
Попробуйте кто-нибуть открыть программно у себя этот прайс.
4 Сияющий в темноте
 
03.11.17
15:47
аикод показать
может быть
везде теряется первая строка,просто в остальных местах в первой строке нет даных
5 coding
 
03.11.17
16:49
(4) Не очень понял..
Первая строка не теряется. А колонка - да!
Кода тут много.. Лучше попробуйте открыть файл у себя.
6 coding
 
03.11.17
17:26
нет больше вариантов?
7 LuciferArh
 
03.11.17
17:34
(6) Без твоего кода - нет. Никто не будет бесплатно тратить свое время, чтобы сделать решение за тебя и для тебя.
8 Филиал-msk
 
03.11.17
17:34
(6) Ты так настойчиво предлагаешь нам его загрузить, что это начинает пугать. Что ты туда вставил?

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

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

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

ТабДок = НОвый ТабличныйДОкумент;
ТабДок.Прочитать(СокрЛП(ФайлEXCEL));


всё.

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

Для ит = 1 ПО КолвоКолонокExcel Цикл        
        Поле = ADODBRecordset.Fields.Item(ит - 1);
27 coding
 
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 Цикл
        ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
    КонецЦикла;
    
    Возврат ТЗ;
КонецФункции
29 h-sp
 
06.11.17
06:50
(28) Excel.Application это сразу выбросьте - это не годится.

Microsoft OLEDB позволяет без установки excel
30 ВыборКогда Тогда
 
06.11.17
09:12
(29) Вам может и не годмтся, а у нас работает не первый год и все отлично.
31 coding
 
06.11.17
10:26
(28)
800 тис(!) строк за сколько времени прочитает?
OLEDB - думаю за минут 2 справиться
32 coding
 
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"";";
35 ptiz
 
08.11.17
10:43
(34) Microsoft убила Jet.OLEDB.4.0 c октябрьскими обновлениями win 7.
36 Ёпрст
 
08.11.17
10:47
(35) как-то пофигу, кто там чего "убил". Главное, на win2012х64 работает как надо и ладно
37 LuciferArh
 
08.11.17
11:52
(36) А ты обновления установи - сильно удивишься.
38 Ёпрст
 
09.11.17
08:10
(37) какие обновления ?
Сервер постоянно обновляется, всё норм
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.