Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Работа с Екселем

Работа с Екселем
Я
   88g88
 
14.09.18 - 15:49
Приветствую форумчане.
Подскажите как прочитать информацию из ексель файла.
 
 
   88g88
 
1 - 14.09.18 - 15:49
Функция ПрочитатьЛистExcel(ТЗ = Неопределено, ЛистЭксель = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт
    
    Если ЛистЭксель = Неопределено Тогда
        ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application");
    КонецЕсли;
    Если ВсегоСтрок = 0 Тогда
        ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
    КонецЕсли;
    Если ВсегоКолонок = 0 Тогда
        ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
    КонецЕсли;
    Если ТЗ = Неопределено Тогда
        ТЗ =  Новый ТаблицаЗначений;
        Для Счетчик = 1 По ВсегоКолонок Цикл
            ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
        КонецЦикла;
    КонецЕсли;
    Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
        НоваяСтрока = ТЗ.Добавить();
    КонецЦикла;
    
    Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
    Данные = Область.Value.Выгрузить();
    
    Для Счетчик = 0 По ВсегоКолонок-1 Цикл
        ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
    КонецЦикла;
    ЛистЭксель = Неопределено;
    Возврат ТЗ;
КонецФункции
   user-ok
 
2 - 14.09.18 - 15:50
тихо сам с собою я веду беседу....
   Скиурус
 
3 - 14.09.18 - 15:50
Продолжайте наблюдения, нам ужасно интересно
   88g88
 
4 - 14.09.18 - 15:50
Есть вот такой код с вот такой ошибкой.
{ВнешняяОбработка.СнабжениеМатериалы.Форма.Форма.Форма(635)}: Значение не является значением объектного типа (Cells)
        ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
   Tatitutu
 
5 - 14.09.18 - 15:51
да не боись открывай
тоже самое почти что txt (Блокнот) или doc (Word)
двойной клик и файл откроется
дождись открытия 
и читай
слева на право
сверху вниз

там может быть несколько листов
(это фишка Excel)
   88g88
 
6 - 14.09.18 - 15:52
Ошибка проявляется при попытке обращения к строке.
Даже при явном указании строк при чте
нии области то же самое
   rphosts
 
7 - 14.09.18 - 15:52
(4) а ему предшествует чтото типа 
      ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application");
   Tatitutu
 
8 - 14.09.18 - 15:53
(4) идешь в конфигуратор и смотришь

где у тебя ЛистЭксель инициализируется
   rphosts
 
9 - 14.09.18 - 15:53
файл открыт, страничка файла выбрана?
   Tatitutu
 
10 - 14.09.18 - 15:54
(9) Подожди...давай из далека

Эксель на компьютере установлен ?
Где вызываешь эту процедуру?
 
 Рекламное место пустует
   88g88
 
11 - 14.09.18 - 15:54
(7)
Если ЛистЭксель = Неопределено Тогда
        ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application");
    КонецЕсли;
   88g88
 
12 - 14.09.18 - 15:54
(10) Внешняя обработка, база УПП
   88g88
 
13 - 14.09.18 - 15:54
(10) да 2010 32 бит
   s03
 
14 - 14.09.18 - 15:55
(11) Это ты само приложение Excel инициализируешь, а потом ещё файл открыть надо, лист выбрать/указать и только после этого строки/колонки
   s03
 
15 - 14.09.18 - 15:56
в общем - в гугл, там примеров по самое небалуйся
   88g88
 
16 - 14.09.18 - 15:59
(15) от туда и взял))) ток вот не работал с екселем. вот и наткнулся на непонимание.
   1Сергей
 
17 - 14.09.18 - 15:59
Если лист один и файл небольшой, то можно просто загрузить файл в табличный документ. А потом по нему пробежаться
   88g88
 
18 - 14.09.18 - 16:00
(14) как его указать? лист.
   s03
 
19 - 14.09.18 - 16:02
(16) а только один пример нашел? второй-третий хотя бы взглянуть пробовал?
   1Сергей
 
20 - 14.09.18 - 16:02
Вот, недавно что-то делал. Может, поможет


    Ехель = ПолучитьCOMОбъект("", "Excel.Application");
    //Ехель.Visible = 1;

    ...
        Попытка
            Ехель.Workbooks.Open(СтрокаФайлов.Путь + СтрокаФайлов.ИмяФайла);
            Щит = Воркбук.Sheets(1);
        Исключение
            СтрокаФайлов.Статус = "Не удалось открыть файл";
            Продолжить;
        КонецПопытки;
        
        ЧислоСтолбцов = Щит.Cells(1,1).SpecialCells(11).Column;
        ЧислоСтрок = Щит.Cells(1,1).SpecialCells(11).Row;
    ...
   1Сергей
 
21 - 14.09.18 - 16:03
Пардон,

Воркбук = Ехель.Workbooks.Open(СтрокаФайлов.Путь + СтрокаФайлов.ИмяФайла);
   Temai
 
22 - 14.09.18 - 16:05
Держи еще кода, мне не жалко  

Excel = Новый COMОбъект("Excel.Application");   
    Книга = Excel.WorkBooks.Open(Вложение); 
    Excel.Visible = 0;
    Excel.ActiveWindow.DisplayWorkbookTabs = 1; 
    Excel.ActiveWindow.TabRatio = 0.6;    
    
    Лист = Книга.WorkSheets(1);
    
    ВсегоСтрок = Лист.Cells.SpecialCells(11).Row//-кол-во строк всего


    ВсегоКолонок = Лист.Cells.SpecialCells(11).Column//-кол-во колонок всего


    
    Для а = 1 По ВсегоСтрок Цикл
        Для б = 1 по ВсегоКолонок Цикл
            Если Лев(Лист.Cells(а, б).FormulaR1C1, 1) = "=" Тогда
                Лист.Cells(а, б).FormulaR1C1 = Лист.Cells(а, б).FormulaR1C1;
            КонецЕсли;
        Конеццикла;
    Конеццикла;
    
    FullName = Excel.ActiveWorkbook.FullName;            
    Excel.DisplayAlerts = false;
    Excel.ActiveWorkbook.SaveAs(FullName, 51)// 18 - xls 97-2003; 51 - xlsx 2007-2013


    //Excel.Visible = 1;       // если нужно поработать дальше с книгой


    Excel.Application.Quit()// если просто выходим
   MyNameIs
 
23 - 14.09.18 - 16:06
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать("C:\temp\Таблица1.xlsx");
   1Сергей
 
24 - 14.09.18 - 16:07
(23) как там по листам прыгать?
Раньше нельзя было. Уже завезли?
   Temai
 
25 - 14.09.18 - 16:08
(1) Твой код:
    Если ЛистЭксель = Неопределено Тогда
        ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application");
    КонецЕсли;
    Если ВсегоСтрок = 0 Тогда
        ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
    КонецЕсли;

Разумеется у тебя падает с ошибкой у тебя лист не определен, возьми код из 22
   d4rkmesa
 
26 - 14.09.18 - 16:09
(0) Правильный подход в (17) и (23)
   s03
 
27 - 14.09.18 - 16:10
(26) не факт, у ТС УПП, а значит, возможно 8.2
   MyNameIs
 
28 - 14.09.18 - 16:15
(24) вроде свойство ВысотаТаблицы включает в себя все листы
   88g88
 
29 - 14.09.18 - 16:16
(22) Попробую сейчас
   88g88
 
30 - 14.09.18 - 16:23
(22) Во вложении что должно быть?
   Dimma
 
31 - 14.09.18 - 16:23
(0)
Почитай
http://www.sky1c.ru/node/88
или лучше
http://catalog.mista.ru/public/341855/
если 1С старше 8.3.6
   88g88
 
32 - 14.09.18 - 16:41
Как обход строк в нем делать?
   1Сергей
 
33 - 14.09.18 - 16:41
(30) полное имя файла
 
 
   88g88
 
34 - 14.09.18 - 16:44
Сделал тестовый файл, получил 1 столбец 5 сток.
То есть нашел, открыл, получил значение по строкам и столбцам.

Вижу обработчик но что в нем не пойму
    Для а = 1 По ВсегоСтрок Цикл
        Для б = 1 по ВсегоКолонок Цикл
            Если Лев(Лист.Cells(а, б).FormulaR1C1, 1) = "=" Тогда
                Лист.Cells(а, б).FormulaR1C1 = Лист.Cells(а, б).FormulaR1C1;
            КонецЕсли;
        Конеццикла;
    Конеццикла;
   88g88
 
35 - 14.09.18 - 16:48
к примеру в обработчик написать сообщить и значение по ячейкам в столбце.
принцип обращения не пойму.
   88g88
 
36 - 16.10.18 - 13:24
(22) В продолжение темы.
Использовал код в сообщении 22. Локально под пользователем все работает.
Но в регламентированном задании не отрабатывает код.
ошибку выдает "Значение не является значением объектного типа (Application)"

Сталкивался кто с подобным? подскажите как исправить.
   Cool_Profi
 
37 - 16.10.18 - 13:25
(36) У тебя (точнее у пользователя, под которым 1с-сервер крутится) правов нет. Или вообще на сервере ексельне установлен
   88g88
 
38 - 16.10.18 - 13:27
(37) На сервере офисный пакет есть. все в порядке.
По вопросу прав в какую сторону копать?
   88g88
 
39 - 16.10.18 - 13:36
(38) пользователь 1с сервера USR1CV8 учетная запись не доменная.
   Cyberhawk
 
40 - 16.10.18 - 13:46
Завязывай уже с СОМ-объектами
   ЦиркУехал
 
41 - 16.10.18 - 13:52
это все уже прошлый век

теперь модно так 
берешь табличный документ со структурой выводишь его, в него копируешь из Экселя, и загружаешь табличны документ !!
все круть неимоверная.
никаких комов никаких  Эксель подключений вообще быстро и удобно.
   Cyberhawk
 
42 - 16.10.18 - 13:55
(41) Это какая-то чешуя ручная
   ЦиркУехал
 
43 - 16.10.18 - 13:56
(42) да норм, все быстро.
ctrl-a
ctrl-c
ctrl-v
все!
   1Сергей
 
44 - 16.10.18 - 13:59
(43) поясни за "табличный документ со структурой"
ето как
   88g88
 
45 - 16.10.18 - 14:05
(41) (42) (43) (44)
Все не просто.
в документе коды номенклатуры.
Занесены они в последовательности согласно настроению внутреннего заказчика. То-есть никакой.
1С открывает файл, находит все коды, формирует запрос (из 15 вложенных запросов). После построчно проходит по всем кодам, ищет в запросе соответствия движений, и записывает их в соответственные строки и конкретные столбцы екселья.
Не спрашивайте зачем, даже понять не пытаюсь.
Заказчик просит, директор ножками топает :)
   Cyberhawk
 
46 - 16.10.18 - 14:19
Почему не пошлешь заказчика?
   ЦиркУехал
 
47 - 16.10.18 - 14:32
(44) Пример есть в ЕРП и в УТ и в КА...
например Заказ Клиента /загрузить из внешнего файла.
   88g88
 
48 - 16.10.18 - 15:10
(46)
И уволиться нафиг!
   Cyberhawk
 
49 - 16.10.18 - 15:11
(48) Один из лучших способов поднять зп
 
 Рекламное место пустует
   shadow_sw
 
50 - 17.10.18 - 06:54
Попытка    
    Ex = новый COMОбъект("Excel.Application");
    WB = Ex.Workbooks.Open(ИмяФайла);
    WS = WB.WorkSheets(1);
    Arr = WS.UsedRange.Value;
    WB.Close(0);
Исключение
    Возврат;
КонецПопытки;

МассивКолонок = Arr.выгрузить();
ВсегоСтрок = (МассивКолонок.Получить(0).Количество())-1;

Для Строка=0 по ВсегоСтрок Цикл
   88g88
 
51 - 17.10.18 - 11:08
В итоге...
Агент сервера 1С запускался под учетной записью 1С. Созданной по умолчанию при установки программного обеспечения.
Создали нового пользователя с необходимыми правами в домене и папками доступа. После службе, Агент сервера 1с, указали что запускаться она будет от имени этого пользователя.
Никаких дополнительных настроек подключения к SQL не понадобилось. Просто смена пользователя запускающего службу.
После чего все проблемы исчезли.
Как и писалось ранее офисный пакет необходим на сервере где стоит "сервер 1с", не путать с SQL.
(Внимание: Название службы не точное, но что то в этом роде;))

Спасибо всем кто не скупился на дельные советы и поднимал настроение!


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует