Имя: Пароль:
1C
1C 7.7
v7: Чтение из Excel файла.
0 zenon46
 
15.11.17
12:00
Доброго дня!
Помогите разобраться почему не считывается из Excel файла. Структура файла простая, и заранее известна, но 1С выдает ошибку.
"ТаблЗагрузки.ТабНомер = Строка((Эксэл.ActiveSheet.Cells(НомерСтроки,1).Value));
{Документ.ВыплатаЗПКасса.Форма.Модуль(378)}: : "

Сам код :

    Перем ИмяФайла, ИмяКаталога;
        
    Фс.ВыбратьФайл(0, ИмяФайла, ИмяКаталога , "Выберите файл", 'Файлы Excel (*.xls) |*.xls');
    
    ТаблЗагрузки = СоздатьОбъект("ТаблицаЗначений");
    ТаблЗагрузки.НоваяКолонка("ТабНомер");
    ТаблЗагрузки.НоваяКолонка("ФИОСотрудн");
    ТаблЗагрузки.НоваяКолонка("СуммаКВыплате");
    Состояние("Загрузка файла...");
    Эксэл = СоздатьОбъект("Excel.Application");    
    Состояние("Открытие Excel");
    Эксэл.Workbooks.Open(СокрЛП(ИмяКаталога+ИмяФайла));
    Для НомерСтроки = 2 По 255 Цикл
        ТаблЗагрузки.НоваяСтрока();
        ТаблЗагрузки.ТабНомер      = Строка((Эксэл.ActiveSheet.Cells(НомерСтроки,1).Value));
        ТаблЗагрузки.ФИОСотрудн    = Строка((Эксэл.ActiveSheet.Cells(НомерСтроки,2).Value));
        ТаблЗагрузки.СуммаКВыплате = Число((Эксэл.ActiveSheet.Cells(НомерСтроки,3).Value));
    КонецЦикла;
    Эксэл.WorkBooks.Close();
    Эксэл = "";
1 Builder
 
15.11.17
12:02
Ковычку убери
2 Builder
 
15.11.17
12:03
(1) Не, не то :)
Какая ошибка то?
3 Михаил Козлов
 
15.11.17
12:05
Попробуйте вместо Строка(...Value) прочитать Text.
Посмотрите в отладчике на каком номере строки падает.
4 Zmich
 
15.11.17
12:06
Вместо ActiveSheet можно попробовать WorkSheets(1)
5 zenon46
 
15.11.17
12:07
(4) таже ошибка
6 zenon46
 
15.11.17
12:09
(3) падает на первой итерации. а что значит Text ?
7 zenon46
 
15.11.17
12:09
(2) вот именно что в ошибке ничего
"Документ.ВыплатаЗПКасса.Форма.Модуль(378)}: : "
8 aka AMIGO
 
15.11.17
12:11
(6) Это значит, вместо
ТаблЗагрузки.ТабНомер      = Строка((Эксэл.ActiveSheet.Cells(НомерСтроки,1).Value));

написать
ТаблЗагрузки.ТабНомер      = Строка((Эксэл.ActiveSheet.Cells(НомерСтроки,1).Text));

или
ТаблЗагрузки.ТабНомер      = Строка((Эксэл.ActiveSheet.Cells(НомерСтроки,1).String));
9 Масянька
 
15.11.17
12:11
(7) Так покажи строку (кода) с ошибкой. 378.
10 zenon46
 
15.11.17
12:12
(9) ТаблЗагрузки.ТабНомер = Строка((Эксэл.ActiveSheet.Cells(НомерСтроки,1).Value));
11 Builder
 
15.11.17
12:13
Эксель то открывается?
12 Масянька
 
15.11.17
12:14
(10) Перед этой строкой:
сообщить("! - " + Эксэл.ActiveSheet.Cells(НомерСтроки,1).Value);
что выведет?
13 zenon46
 
15.11.17
12:15
(12) сообщить("! - " + Эксэл.ActiveSheet.Cells(НомерСтроки,1).Value);
{Документ.ВыплатаЗПКасса.Форма.Модуль(378)}: :

На компе стоит Excel 2016 (для справки)
14 zenon46
 
15.11.17
12:16
(11) да процесс запускается
15 Масянька
 
15.11.17
12:18
(14) Процесс-то запускается... А дальше...
У меня так работает:
    Excel    = СоздатьОбъект("Excel.Application");
    Книга     = Excel.Application.Workbooks.Open(ИмяФайлаЗагрузки);
    Лист     = Книга.WorkSheets(1);
16 zenon46
 
15.11.17
12:19
(15) а дальше что, разве файл должен открываться для визуального отображения ?
17 Остап Сулейманович
 
15.11.17
12:20
За activeworkbook, activesheet, activecell ... нужно выгонять из профессии.
18 Масянька
 
15.11.17
12:21
(16) Как хочешь... Но процесс (в данном случае Excel) и файл (*.xls) - разные весчи...
19 Jokerman
 
15.11.17
12:22
(0) а зачем 2 раза скобки
20 Builder
 
15.11.17
12:22
(16) Должен, если не сказать что бы не показывался.
21 zenon46
 
15.11.17
12:23
(15) сделал так, в переменных пусто.
22 Builder
 
15.11.17
12:23
В общем похоже неправильно открываешь файл.
23 Builder
 
15.11.17
12:24
(21) Чем смотрел и и что ты там хотел увидеть?
24 zenon46
 
15.11.17
12:24
(23) а чем еще отладчиком
25 Builder
 
15.11.17
12:29
Дальше то пробовал?
ЧтоТоТам = Лист.Cells(НомерСтроки,1).Value;
26 Масянька
 
15.11.17
12:31
(21) Что в файле? Excel.
27 zenon46
 
15.11.17
12:32
(25) да прочиталось значение
28 Builder
 
15.11.17
12:33
(27) Алилуя.
И таки смотреть отладчиком чужие объекты бесполезно :)
29 Масянька
 
15.11.17
12:33
(27) Проблема решена?
30 zenon46
 
15.11.17
12:42
(29) нифига не пойму, а в цикле падает в ошибку.
31 Builder
 
15.11.17
12:43
(30) На какой строке? Модуль и ошибку в студию.
Формул нет на листе?
32 zenon46
 
15.11.17
12:44
(31) все норм прочиталось. можно ли как то узнать после открытия сколько строк вообще с данными ?
33 Остап Сулейманович
 
15.11.17
12:48
(32) смотри VBA SpecialCells.
34 aka AMIGO
 
15.11.17
12:48
(32)
ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;

Попробуй
35 aka AMIGO
 
15.11.17
12:49
(34) + 1с и Excel
36 Остап Сулейманович
 
15.11.17
12:50
(34) Лист.Cells.SpecialCells(11).Row
В Cells не обязательно обращаться к конкретной ячейке. Можно сразу ко всей коллекции.
37 zenon46
 
15.11.17
12:51
(34) да получилось
Всем спасибо!
38 aka AMIGO
 
15.11.17
12:51
(36) Да, спасибо.
39 Масянька
 
15.11.17
13:14
КолВоСтрок = Excel.Cells.CurrentRegion.Rows.Count;
Ошибка? Это не ошибка, это системная функция.