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