Имя: Пароль:
1C
1С v8
Получение данных из Excel,
,
0 Креатив
 
21.09.16
11:27
На сервере у клиента стоит 1с УТ 10.3. Пользователи работают с ней через web application. Есть файл Excel, в котором находится прайс. Какой самый простой способ вытаскивать (выборочно) данные из этого файла? Excel на сервере не установлен.
1 sapphire
 
21.09.16
11:34
(0) На клиенте запихнуть всё в COMSafeArray и его передать на сервер.
2 Креатив
 
21.09.16
11:39
(1)А это точно простое решение?
Уточню на всякий случай. База файловая.
3 Креатив
 
21.09.16
11:40
(2)+ А сервер терминальный.
4 Vanilla26
 
21.09.16
11:42
может ТабличныйДокумент.Прочитать(<ИмяФайла>, <СпособЧтенияЗначений>)
5 virtozz
 
21.09.16
11:48
Если нет экселя попробуй через com-объект ADODB.Recordset
6 Креатив
 
21.09.16
11:49
(5) А как у этого объекта дела обстоят с поиском?
7 DrZombi
 
гуру
21.09.16
11:50
(0) Через АДО :)
8 Cyberhawk
 
21.09.16
11:50
Если xlsx, то нативно
9 virtozz
 
21.09.16
11:54
(6) С помощью запросов типа "SELECT F1 AS Поле1, F2 AS Поле2 FROM [A1:AZ1000] WHERE условие". Все колонки именуются с буквы в F
10 Креатив
 
21.09.16
12:03
А где про это АДО лучше почитать? Или рыбу подкиньте.
Задачка совсем простая. Найти строчку с заданным артикулом(первая колонка). Взять из неё цену(третья колонка).
11 Vanilla26
 
21.09.16
12:08
(10) а почему (4) не подходит? платформа не позволяет или это долго?
12 Креатив
 
21.09.16
12:11
(21)Всё-таки эксел - это не mxl. Да и память подгружать сильно будет.
13 Vanilla26
 
21.09.16
12:14
(12) ну он и ( *.xls и *.xlsx) читает...а про память хз, надо тестить
14 DrZombi
 
гуру
21.09.16
12:30
(10) http://catalog.mista.ru/public/163640/

Если покопаться, что можно получить список листов :)
http://catalog.mista.ru/public/163724/
15 Креатив
 
21.09.16
12:36
(13){Форма.Форма.Форма(5)}: Ошибка при вызове метода контекста (Прочитать)
    Таб.Прочитать("D:\1C\Moscow\прайс.xlsx");
по причине:
Ошибка при выполнении файловой операции
Платформа 8.2.19.130
16 Креатив
 
21.09.16
12:42
(14)Спасибо, почитаю.
17 Vanilla26
 
21.09.16
12:56
(15) а ну да.. эт с 8.3 пошло
18 упс
 
21.09.16
13:03
недавно столкнулись с проблемой с АДО - один контрагент шлёт файлы .xls, информация из которых должна загружаться в УС. И вот в один прекрасный день, в файлах, которые присылает контрагент, при их загрузке через АДО, в рекордсет не попадала последняя колонка. Если присланный файл открыть экселем или опенофисом и нажать Ctrl-S (ничего не изменяя), файл читается нормально (последняя колонка попадает), если грузить присланный - нет последней колонки, хоть убейся.
Проблема осложнялась тем, что заранее было неизвестно сколько колонок будет в присланном файле.
Как контрагент формирует этот xls файл осталось неизвестным, выкрутились, с помощью вызова openoffice из 1С, пересохранения файла и автоматической повторной загрузкой.
Просто для информации.
19 virtozz
 
21.09.16
13:24
(10) У меня так сделано:

//Функция, позволяющая открыть файл Excel через ADO, т.е. обращается к файлу как к БД
Функция ADOПодключение(ИмяФайла, СтрокаВыборки) Экспорт
            
    Файл = Новый Файл(ИмяФайла);
    
    //Проверяем на существование выбранный файл
    Если НЕ Файл.Существует() Тогда
        Предупреждение("Файл не указан или несуществует!");
        Возврат Неопределено;
    КонецЕсли;
    
    //Удаляем лишний символ "\" в имени файла для корректного соединения через ADODB
    Стр_Файл = Файл.ПолноеИмя;
    Стр_Путь = Файл.Путь;
    
    Если Прав(Стр_Путь, 1) = "\" Тогда
        Стр_Путь = Лев(Стр_Путь, СтрДлина(Стр_Путь) - 1);
    КонецЕсли;
    
    //Устанавливаем соединение через ADODB к файлу Excel
    Соединение = Новый COMОбъект("ADODB.Connection");
    Соединение.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Стр_Файл + ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1""";
    
    Попытка
        Соединение.Open();
    Исключение
        Сообщить("Невозможно подключиться к Microsoft Excel Driver!
        |Возможно файл [" + Стр_Файл + "] открыт другим пользователем");
        Возврат Неопределено;
    КонецПопытки;

        //Настраиваем свойства настройки
    НаборДанных = Новый COMОбъект("ADODB.RecordSet");    
    НаборДанных.ActiveConnection = Соединение;

    НаборДанных.CursorType = 3;

    НаборДанных.LockType = 3;        
    
    Попытка
        НаборДанных.Open(СтрокаВыборки, Соединение);
        Возврат НаборДанных;
    Исключение
        Сообщить("Не удалось выполнить запрос к файлу Excel
        |" + ОписаниеОшибки(), СтатусСообщения.Важное);
        Возврат Неопределено;
    КонецПопытки;
КонецФункции
20 Serginio1
 
21.09.16
13:34
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший