Имя: Пароль:
1C
1С v8
Чтение файла Excel
,
0 Shalun
 
30.06.20
16:15
Мое почтение, форумчане! Нужна Ваша помощь.
Есть обработка, которая считывает данные файла Exel.
В модуле содержится код: ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell)
В общем то модуль отрабатывает нормально, но если попадается защищенный (от изменений) документ, то пишет что метод SpecialCells не доступен для защищенного документа!
Собственно и вопрос: Как обойти это ограничение, что бы так же читались и защищенные документы?
Заранее благодарствую!
1 dka80
 
30.06.20
16:17
Попробывать прочитать в табличный документ и обработать уже его
2 Сияющий в темноте
 
30.06.20
16:41
так не надо ее активизировать,а просто получи.
3 Shalun
 
30.06.20
17:59
Ребят, а можно немного поподробней, с примером? А то я честно говоря не спец в данном вопросе, не работал с файлами.
4 Shalun
 
02.07.20
17:22
Нашель! Кому интересно:
Excel.Sheets(НомерЛиста).UsedRange.Rows.Count - строки и
Excel.Sheets(НомерЛиста).UsedRange.Columns.Count - колонки соответственно.
Где НомерЛиста числовое значение листа, а Exel - COMОбъект.
5 SadrArt
 
02.07.20
17:59
а ответ в (4) точно на (0)?
6 dedmoroz777
 
02.07.20
18:12
(5) Наверное нужно получить последнюю заполненную ячейку. Так что получится.
7 Shalun
 
20.07.20
15:39
(5) не совсем. :-)
(6) Данным кодом получаем количество строк и количество столбцов в документе. Далее цикличным перебором строк и столбцов считываем ячейки...
Для СтрокаRow = 1 По RowCount Цикл
     Для КолонкаColumn = 1 По ColumnsCount Цикл
    Попытка
    ТабличныйДокумент.Область("R" + Формат(СтрокаRow, "ЧГ=100") +"C" + Формат(КолонкаColumn, "ЧГ=100")).Текст =                            
        Формат(ExcelЛист.Cells(СтрокаRow,КолонкаColumn).Value, "ЧГ=");
......

где то так. :-0
8 Shalun
 
09.10.20
13:33
Всем привет!
снова возвращаюсь к этой теме. Причина в том, что пытаюсь прочитать Эксел файл цже другим методом:
ТабличныйДокумент.Прочитать(АдресФайла)
В Табличном документе так же содержится защищенная ячейка, как и в самом файле.
Далее пытаюсь получить значение
ЗначениеЯчейки = ТабличныйДокумент.ПолучитьОбласть("R"+Row+"C"+Column).ТекущаяОбласть.Значение
Пишет что "Недоступно для чтения", и выдает ошибку.

Вот и возникает вопрос: Как получить значение ячейки в этом методе, если ячейка документа защищена?
п.с. Пароль известен, подойдет вариант чтения ячейки с указанием пароля.
9 lEvGl
 
гуру
09.10.20
13:35
по возможности гружу через ADODB
10 lEvGl
 
гуру
09.10.20
13:36
кода меньше, работает быстрее и не примитивным перебором
11 lEvGl
 
гуру
09.10.20
13:36
на защищенным документе, Кажется, проблем не было
12 arsik
 
гуру
09.10.20
14:00
(8) Попробуй вместо значения получать текст.
ЗначениеЯчейки = ТабличныйДокумент.ПолучитьОбласть("R"+Row+"C"+Column).ТекущаяОбласть.Текст;
13 arsik
 
гуру
09.10.20
14:12
+(12) 1С нормально такие файлы прожевывает, но нужно понимать, что значений там не будет. Там всегда будет текст.
14 Shalun
 
09.10.20
15:38
(12) Если в ячейке находится число, то оно лежит именно в значении. Текст = "". По этому пустые данные получаются. Нужно именно значение.
(9) Можно пример кода?
15 Shalun
 
09.10.20
15:40
(14)Не правильно написал. Если в ячейке вычисляемое значение, то данные будут именно в занчении, свойство "Текст" пустое.
16 arsik
 
гуру
09.10.20
15:46
(15) При чтении через ТабличныйДокумент? Да ты гонишь. Там все в текст переводится. Открой свой xlsx из 1С. Просто из Меню - Файл - Открыть.
17 Shalun
 
09.10.20
16:07
(16) Да все верно, переводит все в текст. Тубиш значение в текстовой формат. А поле Тест ячейки, остается пустым. :-(
18 lEvGl
 
гуру
09.10.20
20:56
(14) какое число, может там еще денежный формат в 1с можно подтянуть? тебе в эксель экономист маша завтра запхнет смайлик, окно с вайбером перепутала
получай так, чтобы было и преобразуй так как тебе надо