|
Проблема со вставкой картинки в Excel | ☑ | ||
---|---|---|---|---|
0
Access granted
12.06.18
✎
10:06
|
Добрый день!
Имеется простейший код: ExcelDoc = Новый COMОбъект("Excel.Application"); ExcelDoc.Visible = Ложь; РабочаяКнига = ExcelDoc.WorkBooks.Open("C:\1.xls"); ExcelDoc.ActiveSheet.Shapes.AddPicture("C:\1.jpg", Истина, Истина, 100, 100, 70, 70).Select(); Я зашел на сервер 1С и выполняю его через инструменты разработчика. На клиенте все работает (картинка вставляется), а в режиме "на сервере" не работает, выдает "Ошибка при вызове метода контекста (AddPicture): Неизвестная ошибка". Уже не знаю, куда копать. Дал USR1CV8 полные права, не помогло. |
|||
1
hhhh
12.06.18
✎
10:12
|
(0) файл C:\1.jpg точно есть на сервере? может он у вас на клиентском компе расположен?
|
|||
2
Access granted
12.06.18
✎
10:14
|
+(0) Посмотрел через диспетчер задач, что различаются пользователи, от имени которых запускается процесс Excel.exe. С клиента это админ, а с сервера это usr1cv8. Через dcomcnfg поставил для Microsoft Excel application запуск от имени админа, а он все равно продолжает от имени usr1cv8 открываться.
|
|||
3
Access granted
12.06.18
✎
10:14
|
(1) Я прямо на сервер зашел, т.е. в данном случае компьютер клиента = компьютер сервера. Просто код выполняется по-разному (клиент/сервер)
|
|||
4
Access granted
12.06.18
✎
10:16
|
(1) Права я тоже проверил - дал права на xls и jpg админу и usr1cv8 полные.
|
|||
5
Остап Сулейманович
12.06.18
✎
10:50
|
(0) За ActiveSheet и прочие активы нужно гнать из професии.
Вы уверены что оно есть в неинтерактивном режиме? Конечно что-то есть. Но тот ли это актившит, который вам нужен? Вы в него мышкой тыкали, чтобы он стал Актив? |
|||
6
Access granted
12.06.18
✎
10:56
|
(5) ExcelDoc.Sheets(1).Shapes.AddPicture("C:\1.jpg", Истина, Истина, 100, 100, 70, 70).Select();
Ничего не меняется. |
|||
7
shuhard
12.06.18
✎
11:03
|
(0)[Я зашел на сервер 1С и выполняю его через инструменты разработчика]
что за инструменты разработчика |
|||
8
Access granted
12.06.18
✎
11:08
|
(7) Подсистема с набором внешних обработок. Считайте, что через консоль кода выполняю.
|
|||
9
Access granted
12.06.18
✎
11:10
|
Возможно, причина в том, что сервер 1С 64 бит, а excel 32 бит?
|
|||
10
Остап Сулейманович
12.06.18
✎
11:11
|
(6) Почему "ExcelDoc.Sheets(1)"? Разве у вас лист расположен в ExcelDoc? Судя по вашему же коду нужный лист расположен в "РабочаяКнига". И еще. Он точно имеет индекс "1". В ВБА все индексы начинаются с "0".
|
|||
11
Остап Сулейманович
12.06.18
✎
11:13
|
+(10) Если уж так хочется через ExcelDoc - тогда так :
ExcelDoc.WorkBooks(1).Shets(1)... Проверить индексы. |
|||
12
Access granted
12.06.18
✎
11:15
|
(11) Как я ранее уже сказал, код на клиенте работает. Картинка вставляется куда надо. На сервере не работает. Клиент и сервер - один и тот же компьютер.
|
|||
13
Остап Сулейманович
12.06.18
✎
11:17
|
+ (11) А вообще так тоже плохо. Откуда вы можете знать, что открытая книга единственная? Если пользователь перед этим открыл еще несколько WorkBooks-ов - ваша будет иметь индекс точно не "1". К нужной книге обращаться нужно все-таки через объект, который возвращается вот здесь :
РабочаяКнига = ExcelDoc.WorkBooks.Open("C:\1.xls"); |
|||
14
hhhh
12.06.18
✎
11:18
|
(12) попробуйте какой нибудь диск другой. Всё-таки корень диска С: сервера - это не самый лучший вариант. Туда даже у админа не все права.
|
|||
15
Остап Сулейманович
12.06.18
✎
11:19
|
(12)
Зайти на сервер пользователем "usr1cv8". Открыть файл интерактивно. Прочитать все предупреждения от Эксель. Возможно ограничения выставляются именно пользователю "usr1cv8". |
|||
16
Access granted
12.06.18
✎
11:20
|
(14) Уже пробовал другой диск. И права туда тоже задавал. Уже и службу агента 1С запустил с полными правами от админа. Дело в чем-то другом. Возможно, в разрядности 1С и Excel.
|
|||
17
Access granted
12.06.18
✎
11:21
|
(15) Уже служба агента от имени админа запущена. Никаких сообщений не выдает при интерактивном открытии. Да и с клиента под ним же отрабатывает нормально.
|
|||
18
Остап Сулейманович
12.06.18
✎
11:27
|
(17) Разбивай вот это вот счастье на этапы и определи где именно возникает ошибка :
ExcelDoc.Sheets(1).Shapes.AddPicture("C:\1.jpg", Истина, Истина, 100, 100, 70, 70).Select(); 1. Лист = ExcelDoc.Sheets(1); 2. Рисунки = Лист.Shapes; 3. Рисунок = Рисунки.AddPicture("C:\1.jpg", Истина, Истина, 100, 100, 70, 70); 4. Выделение = Рисунок.Select(); |
|||
19
Access granted
12.06.18
✎
11:29
|
(18) Сейчас Excel переустановлю на х64, после чего проверю.
|
|||
20
Остап Сулейманович
12.06.18
✎
11:33
|
(19) Если бы дело было в разрядности - ошибка была бы здесь :
ExcelDoc = Новый COMОбъект("Excel.Application"); |
|||
21
Access granted
12.06.18
✎
11:36
|
(20) Согласен. Но у меня больше нет идей. При одинаковых условиях (один и тот же запускающий пользователь, один компьютер) с клиента работает (32бит), с сервера не работает (64бит).
|
|||
22
Остап Сулейманович
12.06.18
✎
11:38
|
(21) Не понял... Как так может быть, что на одной машине у разных пользователей разная разрядность ОС?
|
|||
23
Access granted
12.06.18
✎
11:43
|
(22) Сервер 1С 64 бит, Excel стоял 32 бит. Пользователи тут ни при чем.
|
|||
24
Access granted
12.06.18
✎
11:48
|
(22) Про пользователей понял вопрос - сервер 64, а клиентская платформа 32, вот и разная разрядность.
|
|||
25
sechs
12.06.18
✎
11:53
|
(0) Почему второй параметр AddPicture равен Истина?
|
|||
26
Access granted
12.06.18
✎
11:55
|
(25) Да это я поменял, в исходном коде вообще число было. Пробовал всякие разные варианты параметров, прочитав хелп MSDN, это не помогло.
|
|||
27
Access granted
12.06.18
✎
11:56
|
Мопед, как говорится, не мой, но починить его надо :)
|
|||
28
sechs
12.06.18
✎
11:58
|
А, разработка методом тыка... Ну, удачи.
|
|||
29
Access granted
12.06.18
✎
11:59
|
(28) Это вообще не разработка, нужно починить сломанное.
|
|||
30
Access granted
12.06.18
✎
12:06
|
Собственно, я был прав. Дело в разрядности Excel. Все заработало.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |