|   |   | 
| 
 | 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) какие обновления ?
 Сервер постоянно обновляется, всё норм | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |