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


1С:Предприятие ::

Метки: 

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

Я
   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
к примеру в обработчик написать сообщить и значение по ячейкам в столбце.
принцип обращения не пойму.



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