Работа с CSV. Чтение файла CSV через ADO в ТЗ в 1С 8.3
✍️ @odin1C_rus
&НаСервере
Функция ПрочитатьCSVвТЗ_ADO(ИмяФайла, Разделитель=";", ЗаголовкиИзПервойСтроки = Ложь)
ТЗ = Новый ТаблицаЗначений;
ФайлCSV = Новый Файл(ИмяФайла);
ADOConn =Новый COMОбъект("ADODB.Connection");
ADOConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ФайлCSV.Путь+";Extended Properties=""text;HDR=No;IMEX=1;FMT=Delimited""");
// Так как FMT=Delimited(;) не работает создадим schema.ini
// https://docs.microsoft.com/en-us/sql/odbc/microsoft/schema-ini-file-text-file-driver?redirectedfrom=MSDN&view=sql-server-ver15
// https://docs.microsoft.com/en-us/sql/odbc/microsoft/text-file-format-text-file-driver?redirectedfrom=MSDN&view=sql-server-ver15
СхемаCSV= СтрШаблон("[%1]
|ColNameHeader=%2
|Format=Delimited(%3)", ФайлCSV.Имя, Формат(ЗаголовкиИзПервойСтроки, "БЛ=False; БИ=True"), Разделитель);
ФайлСхемы = Новый ТекстовыйДокумент;
ФайлСхемы.УстановитьТекст(СхемаCSV);
ФайлСхемы.Записать(ФайлCSV.Путь + "Schema.ini", "CESU-8"); // UTF-8 без BOM
ADORec=Новый COMОбъект("ADODB.Recordset");
ADORec.ActiveConnection = ADOConn;
ADORec.Open("select * from "+ФайлCSV.Имя, ADOConn);
// определим имена колонок
Для НомКолонки = 0 По ADORec.Fields.Count-1 Цикл
ТЗ.Колонки.Добавить(ADORec.Fields(НомКолонки).Name);
КонецЦикла;
Сч=0;
Пока НЕ ADORec.EOF() Цикл
Сч=Сч+1;
НоваяСтрока = ТЗ.Добавить();
Для а=0 По ADORec.Fields.Count-1 Цикл
НоваяСтрока[а] = ADORec.Fields(а).Value;
КонецЦикла;
ADORec.MoveNext();
КонецЦикла;
ADORec.Close();
ADOConn.Close();
Возврат ТЗ;
КонецФункции
✍️ @odin1C_rus