|
0
MiracMC
13.10.16
✎
15:47
|
Всем доброго времени суток.
Для чтения EXEL фалов использую вот такой код:
Перем тзДанных;
Процедура ПолучитьДанные()
ФС.УстТекКаталог(сКатал);
Если ФС.СуществуетФайл(СокрЛП(сФайл)) = 1 Тогда
// ************************************************* работаем с EXCEL через ADO *********************************************************
ИмяТаблицы = "Лист1$";
флХедер = 0; // в первой строке будут не данные для заголовков (если флХедер=1, то имена полей будут взяты из первой строки таблицы)
db=CreateObject("ADODB.Connection");
rs=CreateObject("ADODB.Recordset");
db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+СокрЛП(сКатал) + СокрЛП(сФайл) +";Extended Properties=""Excel 8.0;"+?(флХедер=1,"","HDR=NO;")+"IMEX=1;""";
//db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+НазваниеФайла+";Extended Properties=""Excel 8.0;HDR=NO; IMEX=1;""";
//HDR=NO - Имена полей имеют вид "F1, F2, F3..." то-есть буква "F" и порядковый номер колонки. Если данный параметр опустить
// имена полей беруться из первой строки - для таблиц Экселя норма.
Пока 1 = 1 Цикл
Попытка
db.Open();
Прервать;
Исключение
конецПопытки;
КонецЦикла;
rs.ActiveConnection = db;
rs.CursorType = 3;
rs.LockType = 2;
rs.Source = "Select * from ["+ИмяТаблицы+"] where not f3 like ''";
Попытка
rs.Open();
Исключение
Сообщить("Ошибка при открытии файла " + СокрЛП(сФайл));
КонецПопытки;
// Инициализируем колонки
тзДанных = СоздатьОбъект("ТаблицаЗначений");
тзДанных.УдалитьСтроки();
Для iCount = 1 По rs.Fields.Count Цикл
ИмяКолонки = rs.Fields.Item(iCount-1).Name;
тзДанных.НоваяКолонка(ИмяКолонки,,,,ИмяКолонки,15,,);
КонецЦикла;
// Перебор данных
rs.MoveFirst();
Пока rs.EOF() = 0 Цикл
тзДанных.НоваяСтрока();
Для iCount = 1 По rs.Fields.Count Цикл
Если ПустоеЗначение(rs.Fields(iCount-1).Value) = 0 Тогда
тзДанных.УстановитьЗначение(тзДанных.КоличествоСтрок(),iCount,rs.Fields(iCount-1).Value);
КонецЕсли;
КонецЦикла;
rs.MoveNext();
КонецЦикла;
rs.Close();
db.Close();
db = "";
rs = "";
// данне получили, АDO закрыли **********************************************************************************************************
Иначе
Сообщить ("Файл " + СокрЛП(сФайл) + " не существует!");
КонецЕслИ;
КонецПроцедуры
в строке
тзДанных.УстановитьЗначение(тзДанных.КоличествоСтрок(),iCount,rs.Fields(iCount-1).Value);
в ячейку тзДанных записывается значение из ячейки в файле Exel.
Вопрос - как проверить наличие гиперссылки в ячейке и если она есть получить ее?
Сразу скажу что через Excel.Application делать не вариант. Уж больно медленный этот способ.
Заранее благодарен.
|
|