Имя: Пароль:
1C
1C 7.7
v7: ADO и чтение из excel
,
0 eshtrey
 
02.09.19
09:53
Как прочитать более 255 колонок из excel файла средствами ADO?
<pre>
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ПутьКФайлу + ";Extended Properties=""Excel 8.0;HDR=NO;IMEX=1""";
ADODBConnection = СоздатьОбъект("ADODB.Connection");  
ADODBConnection.CursorLocation = 3;
ADODBConnection.ConnectionString = ConnectionString;
ADODBConnection.Open();
ADODBCommand = СоздатьОбъект("ADODB.Command");
ADODBCommand.ActiveConnection = ADODBConnection;
ADODBCommand.CommandType = 1;
ADODBCommand.CommandText = "SELECT * FROM [" + ИмяЛиста + "$]";
ADODBRecordset = ADODBCommand.Execute();
</pre>
Ошибка: Microsoft JET Database Engine: Определено слишком много полей.
1 NorthWind
 
02.09.19
09:54
(0) > Provider=Microsoft.Jet.OLEDB.4.0
провайдера более свежего может попробовать?
2 eshtrey
 
02.09.19
09:54
Задача: прочитать данные из колонок с номерами более 255
3 NorthWind
 
02.09.19
09:54
4 NorthWind
 
02.09.19
09:56
так может у свежего провайдера нет ограничения на 255. Если есть - ну тогда никак.
5 Кирпич
 
02.09.19
09:58
наверное в Excel 8.0 не было столько колонок
6 Кирпич
 
02.09.19
10:00
7 Кирпич
 
02.09.19
10:02
меняй провайдера вобщем
8 Hillsnake
 
02.09.19
10:42
все мои строки дарю


Функция ПолучитьСтрокиСоединенияADODB(Знач ФайлEXCEL)
    Перем СonnectionString;
    
    СonnectionString = Новый Структура;
      HDR_YES_NO="YES";
    //
    СonnectionString.Вставить("ACE_OLEDB_16_0_EXCEL_12_0_XML"    , "Provider=Microsoft.ACE.OLEDB.16.0;Data Source= " + СокрЛП(ФайлEXCEL) + ";Extended Properties=""EXCEL 12.0 XML;HDR="+HDR_YES_NO+";IMEX=1;""");
    СonnectionString.Вставить("ACE_OLEDB_16_0_EXCEL_12_0"        , "Provider=Microsoft.ACE.OLEDB.16.0;Data Source= " + СокрЛП(ФайлEXCEL) + ";Extended Properties=""EXCEL 12.0;HDR="+HDR_YES_NO+";IMEX=1;""");
    СonnectionString.Вставить("ACE_OLEDB_12_0_EXCEL_12_0_XML"    , "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + СокрЛП(ФайлEXCEL) + ";Extended Properties=""EXCEL 12.0 XML;HDR="+HDR_YES_NO+";IMEX=1;""");
    СonnectionString.Вставить("ACE_OLEDB_12_0_EXCEL_12_0"        , "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + СокрЛП(ФайлEXCEL) + ";Extended Properties=""EXCEL 12.0;HDR="+HDR_YES_NO+";IMEX=1;""");
    СonnectionString.Вставить("ACE_OLEDB_12_0_EXCEL_8_0"        , "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + СокрЛП(ФайлEXCEL) + ";Extended Properties=""EXCEL 8.0;HDR="+HDR_YES_NO+";IMEX=1;""");
    
    //
    СonnectionString.Вставить("Jet_OLEDB_4_0_EXCEL_8_0"            , "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= "  + СокрЛП(ФайлEXCEL) + ";Extended Properties=""EXCEL 8.0;HDR="+HDR_YES_NO+";IMEX=1;""");
    СonnectionString.Вставить("Jet_OLEDB_4_0_EXCEL_9_0"            , "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= "  + СокрЛП(ФайлEXCEL) + ";Extended Properties=""EXCEL 9.0;HDR="+HDR_YES_NO+";IMEX=1;""");
    
    //
    СonnectionString.Вставить("EXCEL_Driver_16_0"                , "Driver={Microsoft EXCEL Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=" + СокрЛП(ФайлEXCEL) + ";Extended Properties=""EXCEL 16.0;HDR="+HDR_YES_NO+";IMEX=1;""");
    СonnectionString.Вставить("EXCEL_Driver_12_0"                , "Driver={Microsoft EXCEL Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=" + СокрЛП(ФайлEXCEL) + ";Extended Properties=""EXCEL 12.0;HDR="+HDR_YES_NO+";IMEX=1;""");
    СonnectionString.Вставить("EXCEL_Driver_97_2000"            , "Driver={Microsoft EXCEL Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=" + СокрЛП(ФайлEXCEL) + ";Extended Properties=""EXCEL 97-2000;HDR="+HDR_YES_NO+";IMEX=1;""");
    СonnectionString.Вставить("EXCEL_Driver_5_0_95"                , "Driver={Microsoft EXCEL Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=" + СокрЛП(ФайлEXCEL) + ";Extended Properties=""EXCEL 5.0/95;HDR="+HDR_YES_NO+";IMEX=1;""");
    СonnectionString.Вставить("EXCEL_Driver_5_0"                , "Driver={Microsoft EXCEL Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=" + СокрЛП(ФайлEXCEL) + ";Extended Properties=""EXCEL 5.0;HDR="+HDR_YES_NO+";IMEX=1;""");
    СonnectionString.Вставить("EXCEL_Driver_4_0"                , "Driver={Microsoft EXCEL Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=" + СокрЛП(ФайлEXCEL) + ";Extended Properties=""EXCEL 4.0;HDR="+HDR_YES_NO+";IMEX=1;""");
    СonnectionString.Вставить("EXCEL_Driver_3_0"                , "Driver={Microsoft EXCEL Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=" + СокрЛП(ФайлEXCEL) + ";Extended Properties=""EXCEL 3.0;HDR="+HDR_YES_NO+";IMEX=1;""");
    //
    СonnectionString.Вставить("EXCEL_Driver_XLSX"                , "Driver={Microsoft EXCEL Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=" + СокрЛП(ФайлEXCEL) + ";ReadOnly=1;");
    СonnectionString.Вставить("EXCEL_Driver_XLS"                , "Driver={Microsoft EXCEL Driver (*.xls)};Dbq= "     + СокрЛП(ФайлEXCEL) + ";ReadOnly=1;");
    
    Возврат СonnectionString;
    
КонецФункции
9 eshtrey
 
02.09.19
11:56
Поменял провайдера на
ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ПутьКФайлу + ";Extended Properties=Excel 12.0;";
Recordset все равно не хочет читать из диапазона более 255 колонок
Value = ADODBRecordset.Fields(300).Value;
Ошибка: ADODB.Recordset: Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру.

ADODBRecordset.Fields.Count возвращает 255, а на листе 315 колонок.
10 Kigo_Kigo
 
02.09.19
12:28
а перенести эти 60 колонок на другой лист, не?
11 eshtrey
 
02.09.19
12:38
не, надо без разделения листа
12 NorthWind
 
02.09.19
16:17
(9) тогда пичалько, выходит что через ADO эксельку с более 255 полей не зачитаешь. Рассматривайте COM и прочие-другие варианты.
13 NorthWind
 
02.09.19
16:18
ну или стукните по рукам тем кто такие простыни генерит
14 eshtrey
 
02.09.19
16:28
(12)через COM сделал, но хотелось через ADO
15 Кирпич
 
02.09.19
16:35
можно сначала прочитать первые 255 колонок, а потом оставшиеся

"SELECT * FROM [" + ИмяЛиста + "$A1:IU1000]";
"SELECT * FROM [" + ИмяЛиста + "$IU1:PK1000]";
16 eshtrey
 
06.09.19
11:30
(15)так тоже пробовал и не работает, ошибка для диапазонов после 255 колонки
Microsoft Access Database Engine: Объект "Лист1$...:..." не найден ядром СУБД Microsoft Access. Убедитесь, что объект существует, а его имя и путь к нему указаны правильно
Установлен: Microsoft Access Database Engine 2010 Redistributable
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.