Подтвердить что ты не робот

Автоматизация 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();
4b9b3361

Ответ 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 значение Интерактивный пользователь.

В противном случае вам необходимо установить оба параметра одному пользователю (в идеале, пользователю, который вошел в систему), как показано на рисунке.