Имя: Пароль:
1C
1С v8
Программное изменение свойства "ReadOnly" у COM-объекта Excel
0 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);
1 Vellosity
 
02.04.21
15:16
UPD: Код на получение книги программным путем:
ПутьКФайлу = "\\portal\Shared Documents\ExcelFile.xlsx";
Excel = СоздатьCOMОбъектExcel();
Книга = Excel.WorkBooks.Open(ПутьКФайлу,,False);  <-- ошибся в записи при наборе вопроса (в конфигураторе именно так)
2 Garykom
 
гуру
02.04.21
15:19
(0) копируй к себе, изменяй, записывай обратно
3 Kigo_Kigo
 
02.04.21
15:34
Excel = СоздатьCOMОбъектExcel();
А что теперь так можно?
4 mikecool
 
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 написать,если хочется полного доступа к методам.
Также можно сделать сценарий в офисе и вызывать его.
10 Vellosity
 
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 года.