Автоматизация Excel 2007 поверх Windows Server 2008 x64
-
21-08-2019 - |
Вопрос
Мне хорошо известна статья базы поддержки Microsoft, в которой говорится, что автоматизация пользовательского интерфейса офисных продуктов не поддерживается.Кажется, что Windows Server 2008 x64 и Excel 2007. обеспечить выполнение данного заявления.
Я запускаю следующий код в методе OnStart службы NT (учетная запись локальной системы).Все, что он делает, — это автоматизация Excel, как он работает, когда вы запускаете тот же код в консольном приложении.
Предоставленный код состоит из двух частей.Первая часть запускает Excel, создает новую рабочую книгу и сохраняет ее в файле с заданным именем.Вторая часть запускает новый экземпляр Excel и открывает данный файл.Операция открытия заканчивается этим исключением:
Службу невозможно запустить.System.Runtime.InteropServices.COMException (0x800A03EC):Microsoft Office Excel не может получить доступ к файлу «c: emp est.xls».Есть несколько возможных причин:
• Имя файла или путь не существует.• Файл используется другой программой.• Книга, которую вы пытаетесь сохранить, имеет то же имя, что и открытая в данный момент книга.
Почему автоматизированный Excel может запускать и записывать файлы на диск, но терпит неудачу, когда его просят «просто» открыть существующий файл?
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
// launch excel and create/save a new work book
Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
excel.UserLibraryPath, excel.Interactive));
//
string filename = "c:\\temp\\test.xls";
if(System.IO.File.Exists(filename)) System.IO.File.Delete(filename);
//
excel.Workbooks.Add(System.Reflection.Missing.Value);
excel.Save(filename);
excel.Quit();
excel = null;
// lauch new instance of excel and open saved file
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
try
{
Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Open(filename,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
true,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
false,
false,
System.Reflection.Missing.Value,
false,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value);
book.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
book = null;
}
finally
{
excel.Quit();
excel = null;
}
//
GC.Collect();
Решение
Решение действительно простое.Ветку форума msdn можно найти здесь
Короче говоря, я публикую решение здесь, заслуга принадлежит Х Огава
Это решение...
・Windows 2008 Сервер x64
Пожалуйста, сделайте эту папку.
C:\Windows\SysWOW64\config\systemprofile\Рабочий стол
・Windows 2008 Сервер x86
Пожалуйста, сделайте эту папку.
C:\Windows\System32\config\systemprofile\Рабочий стол
...вместо dcomcnfg.exe.
Эта операция устранила проблемы автоматизации делопроизводства в моей системе.
Папка «Рабочий стол», по-видимому, необходима в папке системного профиля, чтобы открыть файл в Excel.
Он исчезает из Windows2008, Windows2003 имела папку, и я думаю, что это вызывает эту ошибку.
Другие советы
Также, как указано в источнике, вам необходимо установить правильные права для папки «Рабочий стол».У меня это сработало в 64-битной версии Windows 2008 и 32-битной версии Office 2010.
Создайте каталог «C:\Windows\SysWOW64\config\systemprofile\Desktop» (для 64-разрядной версии Windows) или «C:\Windows\System32\config\systemprofile\Desktop» (для 32-разрядной версии Windows).
Назначьте пользователю «Сетевые службы (Service Réseau)» следующие права на созданную папку:
Чтение и выполнение, список содержимого папки, чтение
Джон.
Я довольно часто обнаруживал, что вызова Quit() недостаточно для освобождения ресурсов.Попробуйте добавить:-
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
между оператором Quit() и установкой для него значения null.
Существует гораздо больше ошибок, чем упомянутая, и которые вам придется устранить, чтобы заставить Excel работать в 64-разрядной версии Windows Server 2007.Видеть шаги, которые я разработал после работы над этим два полных дня!
Если вы используете Apache, вам также может потребоваться выполнить следующие действия, чтобы заставить MS Word работать правильно (наряду со всем, что описано в других ответах):
Ниже приведен снимок экрана, показывающий два диалога, которые вам нужно будет открыть:
Для Апача:
Службы-> Apache-> Щелкните правой кнопкой мыши (Свойства) -> Вкладка «Вход в систему».
MS Word:
Запустите dcomcnfg.exe->Корень консоли->Службы компонентов->Компьютеры->Мой компьютер->Конфигурация DCOM->Найти приложение Microsoft->Правый клик (Свойства)->Вкладка «Идентификация».
**если вы не можете найти MS Word, убедитесь, что вы запускаете правильную конфигурацию DCOM (64-битная или 32-битная) в зависимости от того, какая версия Office у вас установлена.
Здесь есть два варианта: вы можете настроить Apache на использование Локальная системная учетная запись и установите флажок РАЗРЕШИТЬ взаимодействие с рабочим столом.Если вы это сделаете, вам необходимо установить Личность для MS Word Интерактивный пользователь.
В противном случае вам необходимо назначить одного и того же пользователя (в идеале пользователя, вошедшего в систему), как показано на рисунке.