Автоматизация Excel 2007 поверх Windows Server 2008 x64
Мне хорошо известно о базовой статье поддержки Microsoft, в которой говорится, что она не поддерживается для автоматизации пользовательского интерфейса офисных продуктов. Кажется, что Windows Server 2008 x64 и Excel 2007 применяют данный оператор.
Я запускаю следующий код в методе OnStart службы NT (Local System account). Все, что он делает, - это автоматизация Excel, как работает, когда вы запускаете тот же код в консольном приложении.
Предоставляемый код состоит из двух частей. Первая часть запускает Excel, создает новую рабочую книгу и сохраняет ее в заданном имени файла. Вторая часть запускает новый экземпляр Excel и открывает данный файл. Открытая операция заканчивается в этом исключении:
Служба не может быть запущена. System.Runtime.InteropServices.COMException(0x800A03EC): Microsoft Office Excel не может получить доступ к файлу 'c:\temp\test.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();
Ответы
Ответ 1
Решение действительно просто. Здесь вы можете найти поток сообщений msdn здесь
Короче говоря, я отправляю решение здесь, кредит идет на H Ogawa
Это решение...
· Windows 2008 Server x64
Пожалуйста, создайте эту папку.
C:\Windows\SysWOW64\Config\systemprofile\Desktop
· Windows 2008 Server x86
Пожалуйста, создайте эту папку.
C:\Windows\System32\Config\systemprofile\Desktop
... вместо dcomcnfg.exe.
Эта операция устранила проблемы с офисной автоматизацией в моей системе.
Папка рабочего стола кажется необходимой в папке systemprofile для открытия файла Excel.
Он исчезает с Windows2008, Windows2003 имеет папку,
и я думаю, что это вызывает эту ошибку.
Ответ 2
Также, как указано в источнике, вам необходимо установить правильные права для папки "Рабочий стол".
Это сработало для меня в Windows 2008-64bits и 32-битной версии Office 2010.
-
Создать каталог "C:\Windows\SysWOW64\config\systemprofile\Desktop" (для 64-битной Windows) или "C:\Windows\System32\config\systemprofile\Desktop" (для 32-битной Windows)
-
Назначьте пользователю "Сетевые службы (Service Réseau)" следующие права для созданной папки:
Чтение и выполнение, содержимое папки списка, Чтение
Джон.
Ответ 3
Я довольно часто обнаружил, что вызова Quit() недостаточно, чтобы освободить ресурсы. Попробуйте добавить: -
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
между оператором Quit() и установкой его в null.
Ответ 4
Есть много ошибок, чем упомянутые выше, вам нужно будет работать, чтобы Excel работал на 64-разрядной Windows Server 2007. См. шаги, которые я разработал после работы над этим в течение двух полных дней!
Ответ 5
Если вы используете Apache, вам также может потребоваться выполнить следующие шаги, чтобы заставить MS Word работать правильно (вместе со всем, о чем говорится в других ответах):
Ниже приведен скриншот, показывающий два диалоговых окна, которые вам нужно поднять:
![enter image description here]()
Для Apache:
Службы- > Apache- > Щелкните правой кнопкой мыши (Свойства) → Вход в систему
MS Word:
Запустить dcomcnfg.exe- > Консоль Root- > Службы компонентов- > Компьютеры- > Мой компьютер- > Конфигурация DCOM- > Найти приложение Microsoft- > Щелкните правой кнопкой мыши (Свойства) → вкладка Identity
**, если вы не можете найти MS Word, убедитесь, что вы запускаете правильную конфигурацию DCOM (64 бит или 32 бит) в зависимости от того, какую версию Office вы установили.
Здесь есть два варианта: вы можете установить Apache для использования локальной системной учетной записи и установить флажок в поле ALLOW desktop. Если вы это сделаете, вам необходимо установить для Identity для MS Word значение Интерактивный пользователь.
В противном случае вам необходимо установить оба параметра одному пользователю (в идеале, пользователю, который вошел в систему), как показано на рисунке.