Работа с CSV. Чтение файла CSV через ADO в ТЗ в 1С 8.3



&НаСервере

Функция Прочитать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