Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Программное изменение свойства "ReadOnly" у COM-объекта Excel

Программное изменение свойства "ReadOnly" у COM-объекта Excel
Я
   Vellosity
 
02.04.21 - 15:12
Добрый день всем! Помогите решить проблему, описанную ниже.

В локальной сети есть портал на сервере с общими офисными файлами (Word и Excel), поднятый на MS SharePoint.

Необходимо из 1C программно открыть нужный  Excel файл, заполнить его некоторыми данными из 1С и записать.

Права на редактирование файла контролируются MS SharePoint. Если с клиента Excel открыть любой файл, сверху появится сообщение "Мы открыли эту книгу с сервера в режиме только для чтения". Рядом находится кнопка "Редактировать книгу". При нажатии на эту кнопку проверяется право доступа к каталогу. Если прав нет, то выходит сообщение из разряда "Отказано в доступе". Если права есть, книга переходит в режим редактирования.

Файл лежит по следующему пути: (Локальная сеть) http://portal/Shared Documents/ФайлExcel.xlsx

Если я копирую этот файл в буфер и вставляю его на рабочий стол, файл как программным путём, так и с помощью клиента Excel редактируется без проблем, сообщение "Мы открыли эту книгу с сервера в режиме только для чтения" не появляется.

Если я через COM-объект открываю этот файл по пути http://portal/Shared Documents/ФайлExcel.xlsx, свойство COM-объекта ReadOnly выставлено, как "Истина".

Открытие книги с третьим параметром ReadOnly=false (Книга = Excel.WorkBooks.Open(ПутьКФайлу,ReadOnly=False) не переводит свойство ReadOnly в ложь.

Если воспользоваться методом Книга.ChangeFileAccess(2), где 2 - ReadWrite, а 4 - ReadOnly, COM-объект теряется и принимает значение "Неопределено". В описании синтаксиса метода на сайте Microsoft написано: "Если вы измените файл с "только для чтения" на "чтение и запись", Microsoft Excel должен загрузить новую копию файла, чтобы убедиться, что при открытии файла в режиме "только для чтения" не было внесено никаких изменений." Думаю именно поэтому Книга переводит значение в "Неопределено" и связь с объектом нужной книги теряется.

Какие есть пути программной перезаписи нужного файла в каталоге портала? Прошу помочь. Спасибо!

Код на получение книги программным путем:
ПутьКФайлу = "\\portal\Shared Documents\ExcelFile.xlsx";
Excel = СоздатьCOMОбъектExcel();
Книга = Excel.WorkBooks.Open(ПутьКФайлу,,ReadOnly=False);
   Vellosity
 
1 - 02.04.21 - 15:16
UPD: Код на получение книги программным путем:
ПутьКФайлу = "\\portal\Shared Documents\ExcelFile.xlsx";
Excel = СоздатьCOMОбъектExcel();
Книга = Excel.WorkBooks.Open(ПутьКФайлу,,False);  <-- ошибся в записи при наборе вопроса (в конфигураторе именно так)
   Garykom
 
2 - 02.04.21 - 15:19
(0) копируй к себе, изменяй, записывай обратно
   Kigo_Kigo
 
3 - 02.04.21 - 15:34
Excel = СоздатьCOMОбъектExcel();
А что теперь так можно?
   mikecool
 
4 - 02.04.21 - 15:35
(3) это я разрешил
   ДедМорроз
 
5 - 02.04.21 - 19:23
Так если книга перечитана, то нужно через коллекцию книг ее найти - в чем проблема?
   МихаилМ
 
6 - 02.04.21 - 21:21
   МихаилМ
 
7 - 02.04.21 - 21:32
https://social.technet.microsoft.com/Forums/office/en-US/50749ff3-7585-44c0-966a-6eb0705bb5b6/office-documents-from-sharepoint-2013-always-open-as-readonly-in-win7office2013?forum=sharepointadmin

нормальные люди указывают версии по. о чем рекомендуют в разделе "как задавать вопросы" этого сайта в правилах
   Вафель
 
8 - 02.04.21 - 22:48
В 1с нет нельзя параметры по имени задавать.
Только по месту как в определении
   ДедМорроз
 
9 - 03.04.21 - 22:25
(8) В 1с можно прокладку на VBScript написать,если хочется полного доступа к методам.
Также можно сделать сценарий в офисе и вызывать его.
   Vellosity
 
10 - 12.04.21 - 15:25
Решение найдено!

В MS Excel до 2010 года при создании COM-объекта файла, проверка прав на редактирование осуществляется мгновенно, т.е. после получения COM-объекта мы уже имеем свойств ReadOnly или True или False.

В MS Excel после 2010 года при создании COM-объекта файла значение ReadOnly постоянно установлено в значении True вне зависимости от того есть права на редактирование или нет. Чтобы проверить права на редактирование необходимо использовать следующий метод книги: Книга.LockServerFile().

После использования данного метода свойство ReadOnly встанет в True или False в зависимости от прав пользователя, настроенных в SharePoint.

Еще раз повторюсь, метод LockServerFile() не нужен, если вы получаете COM-объект экселя редации до 2010 года.

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