|
Программное изменение свойства "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 года. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |