|
13.08.2008, 10:56 | #1 |
Участник
|
Сохранение документа Excel
Подскажите пожалуйста, может кто в курсе,как сохранить документ Excel(объект класса ComExcelDocument_RU) по необходимому мне пути?
Спасибо! |
|
13.08.2008, 11:03 | #2 |
MCT
|
Собственно надо выполнить следующее
X++: excelWorkBook.SaveAs(_fileName); это можно посмотреть из макроса при сохранении документа Последний раз редактировалось MikeR; 13.08.2008 в 11:08. |
|
|
За это сообщение автора поблагодарили: Soup (1). |
13.08.2008, 11:15 | #3 |
Moderator
|
Ну, или прямо к "документу" в нужном месте привязаться, если лень добавлять getexcelWorkBook().
m_comDocument по сути и есть WorkBook: X++: m_comDocument.SaveAs(_fileName); |
|
26.07.2011, 09:48 | #4 |
Участник
|
Подниму старую тему. В 2009-й понадобилось сделать так, чтобы отчеты в виде Excel-файлов могли формироваться в пакетном задании, выполняемом на сервере. Понятное дело, ComExcelDocument_RU сразу пошел лесом, потому что не инкапсулирует конструктор, работает через COM и объявлен как клиентский класс, но дело не в этом. Пакетник крутится на Windows Server 2008 R2 (64-битном - других R2 не бывает), и вот стала в пакетном задании на вызове SysExcelWorkbook.SaveAs() стабильно вылезать ошибка, мол, метод завершен неверно. "Я его и так, и эдак, со словами и без слов", провозился не один день с вариантами вызова метода, а дело оказалось вот в чем: в системном профиле виндов в Windows Server 2008 (обычном и R2) какого-то фига не стало каталога Desktop - может, разработчики виндов посчитали, что он больше не нужен или еще что... Если этот каталог создать, то ошибка на вызове SaveAs() волшебным образом пропадает! Соотв., нужно создать каталог
|
|
|
За это сообщение автора поблагодарили: mazzy (2), Wamr (10), sukhanchik (5), Logger (10), coolibin (1), demianimp (1), koly4ii (0). |
26.07.2011, 12:28 | #5 |
Участник
|
Я так понимаю, что ошибка также не будет возникать если в данном случае использовать Microsoft Office 2010 64bit. У меня серверные пакетные задания корректно сохраняют файлы *.xls без каталога %SystemRoot%\SysWOW64\config\systemprofile\Desktop на сервере.
C Office 2007 тоже долго мучился пораньше бы ваше сообщение.
__________________
Дмитрий |
|
20.10.2011, 17:41 | #6 |
Участник
|
Сохранение документа Excel на AOS'е, работающем под непривилегированным пользователем
Если вдруг кому взбредет в голову запускать AOS под непривилегированным пользователем и создавать на нем файлы Excel - так, чтобы Excel запускался на сервере, то его ждут новые приключения, связанные с правами доступа. Для теста я использовал простой джобик:
X++: SysExcelApplication xl; SysExcelWorkbook wbk; ; xl = SysExcelApplication_NET::construct( ClassRunMode::Server ); xl.visible( false ); wbk = xl.workbooks().add(); wbk.saveAs( DEV_xInfoDirectoryServer( DirectoryType::Temp ) + 'test.xls' ); xl.quit();
Цитата:
The machine-default permission settings do not grant Local Activation permission for the COM Server application with CLSID {00024500-0000-0000-C000-000000000046} and APPID Unavailable to the user DOMAIN\AX2009AosUser from address LocalHost (Using LRPC). This security permission can be modified using the Component Services administrative tool.
ШАГ 1. Идем в редактор реестра и добавляем туда что-то вроде этого (ветка HKCR\CLSID\{00024500-0000-0000-C000-000000000046} там уже есть): Код: REGEDIT4 [HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}] "AppID"="{00024500-0000-0000-C000-000000000046}" [HKEY_CLASSES_ROOT\AppID\{00024500-0000-0000-C000-000000000046}] @="Microsoft Excel" Здесь я исхожу из того, что на вкладке Identity мы выбрали запуск DCOM-сервера под тем пользователем, который собственно его запускает (The launching user) - это логично, раз мы решили ограничить права самого AOS'а. Теперь как минимум экземпляр SysExcelApplication_NET у нас создается, и под тем пользователем, под которым работает AOS, запускается процесс Excel.exe. Однако, на строке добавления новой книги Excel у нас вылетает исключение Exception::CLRError без какого-либо текста сообщения. Его причина заключается в том, что Excel хоть и запускается под нашим непривилегированным пользователем, но пытается получить доступ на изменение к ряду каталогов в %SystemRoot%\SysWOW64\config\systemprofile. ШАГ 2. На каталоги Цитата:
%SystemRoot%\SysWOW64\config\systemprofile\AppData\Local\Microsoft\Windows\Temporary Internet Files
%SystemRoot%\SysWOW64\config\systemprofile\Desktop |
|
|
За это сообщение автора поблагодарили: BOAL (2), sukhanchik (10), Logger (10), coolibin (2), alex55 (1), A_BAS (1), aao_p (1). |
27.06.2017, 18:22 | #7 |
MCTS
|
Цитата:
Напрягает момент что в DCOM-настройках для Word на закладке Location невозможно поставить флаг Run application on this computer. Обязательна ли его установка? Пытался жестко прописать через имя текущего сервера, но не помогло. Офис 32-битный, винда 64-битная. Настраиваю через mmc comexp.msc /32 под админом. Еще хотел уточнить для чего предполагалось настраивать %SystemRoot%\SysWOW64\config\systemprofile\AppData\Local\Microsoft\Windows\Temporary Internet Files? И правильно ли я понимаю что при моей конфигурации каталог Desktop нужно в System32 создавать? |
|
28.06.2017, 01:16 | #8 |
MCTS
|
Цитата:
"COM-объект класса "Word.Application" не удалось создать. Убедитесь, что объект был должным образом зарегистрирован на компьютере... Объект "COM" не может быть создан Ошибка времени выполнения: COM Объект не инициализирован." (C)\Classes\COM\error (C)\Classes\ComOfficeDocument_RU\getCOMErrorMsg - line 7 (C)\Classes\ComOfficeDocument_RU\initApplication - line 28 (C)\Classes\ComOfficeDocument_RU\newFile - line 8 Возможно как раз с каталогами связано, хотя Desktop в обеих каталогах создал и права на него раздал. Последний раз редактировалось alex55; 28.06.2017 в 01:49. |
|
28.06.2017, 13:24 | #9 |
Участник
|
Цитата:
В Windows Server 2012 и выше для успешного запуска через DCOM 32-битных офисных приложений также нужно самостоятельно создать каталог %SystemRoot%\SysWOW64\config\systemprofile\Desktop. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
04.04.2012, 12:08 | #10 |
Участник
|
Описанная выше настройка была приведена для случая, когда 64-битный локальный процесс пытается активировать COM-сервер через DCOM, однако, если это пытается сделать 32-битный локальный процесс, приведенный способ настройки может не сработать (коллега тут наступил недавно на эти грабли). Оказывается, если нужно настроить права для работы 32-битных локальных приложений под 64-битными виндами, может потребоваться выполнять настройку из 32-битной же версии Management Console. Чтобы ее запустить, необходимо в в ком.строке указать параметр "-32" (запуск mmc без параметров из-под 32-битнго приложения в моем случае эффекта не дал), после чего добавить остастку Component Services и там уже настраивать права
|
|
|
За это сообщение автора поблагодарили: (2), sukhanchik (3), Logger (5), aao_p (1). |
24.02.2015, 10:54 | #11 |
Участник
|
Добрый день. Подскажите пожалуйста, что делать с ошибкой -
"COM-объект класса "Excel.Application" не удалось создать. Убедитесь, что объект был должным образом зарегистрирован на компьютере "user1".". На локальной машине? На соседней машине работает. Последний раз редактировалось FreeD; 24.02.2015 в 11:06. |
|
26.02.2015, 11:04 | #12 |
Участник
|
Цитата:
Программный код выполняется на сервере? Если это так, то в данном контексте речь именно о AOS и настройки необходимо выполнять именно на нем. Действия изложенные gl00mie несколькими сообщениями выше в "ШАГ 1" (как правило, в реестре не нужно вносить каких-либо поправок) в "DCOM Config" (настраиваем доступ для логина Business Connector'a) решают данную ошибку. Однако, вслед за ней возникает новая. Ее возможно решить настроив доступ к каталогам изложенным gl00mie в ШАГ 2. |
|
28.06.2017, 08:40 | #13 |
Участник
|
Попробуйте зайти под эти пользователем на комп и запустите word и excel.
Вдруг им еще чего то недостает, а так они сами создадут. |
|
28.06.2017, 13:11 | #14 |
MCTS
|
Цитата:
Сообщение от alex55
Сейчас вижу что процесс WINWORD.exe стартует и висит под нужным пользователем, но при этом ошибка все равно еще остается:
"COM-объект класса "Word.Application" не удалось создать. Убедитесь, что объект был должным образом зарегистрирован на компьютере... Объект "COM" не может быть создан Ошибка времени выполнения: COM Объект не инициализирован." Заходил, запускал, никаких проблем не заметил в интерактивном режиме под данным пользователем. Последний раз редактировалось alex55; 28.06.2017 в 13:18. |
|
07.06.2021, 14:36 | #15 |
Участник
|
Цитата:
Но был странный баг. Если юзер админ, то все работает. Если выкинуть из админов, то такая ошибка: Цитата:
The server {00024500-0000-0000-C000-000000000046} did not register with DCOM within the required timeout.
Вылечили случайно так: 1. Сделали юзера админом. 2. Залогинились под ним через RDP (тем самым для него создался профиль на сервере) 3. Выкинули юзера из админов, ребутнули сервак. После этого все работает. Вероятно папка Desktop в профиле бывает нужна не только для системного профиля но и для учетки, под которой запускается процесс, использующий Excel. Поэтому для нее должен быть создан профиль (но это опять же предположение исходя из симптомов) |
|
28.01.2020, 12:32 | #16 |
Участник
|
Добавлю еще для полноты картины
Вывод в Excel на сервере Цитата:
Еще нашел для MS Office 2010, что надо добавить в папку C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\
папку Shemas и дать на нее права .Net BusinessConnector'у |
|
Теги |
0x800a03ec, 64-bit, excel, windows server 2008, баг, ошибка, пакетная обработка, пакетный сервер |
|
|