Automatyzacja Excel 2007 na systemie Windows Server 2008 x64

Jestem w pełni świadomy artykułu Microsoft support base stwierdzającego, że nie jest obsługiwany w celu automatyzacji interfejsu użytkownika produktów office mniej. Wydaje się, że Windows Server 2008 x64 i Excel 2007 wymuszają podaną instrukcję.

Uruchamiam następujący kod w usłudze NT (Local System account) w metodzie OnStart. Wszystko, co robi, to automatyzacja Excela w sposób, w jaki działa, gdy uruchamiasz ten sam kod w aplikacji konsolowej.

Podany kod składa się z dwóch części. Rusza pierwsza część Excel, tworzy nową książkę roboczą i zapisuje ją do podanej nazwy pliku. Druga część uruchamia nową instancję programu Excel i otwiera dany plik. Operacja open kończy się w tym wyjątku:

Nie można uruchomić usługi. System.Runtime.InteropServices.COMException (0x800a03ec): Microsoft Office Excel nie może uzyskać dostępu do pliku " c:\temp\test.xls". Istnieje kilka możliwych powodów:

* nazwa pliku lub ścieżka nie istnieje. * Plik jest używany przez inny program. * Skoroszyt you próba zapisania ma taką samą nazwę jak obecnie otwarty skoroszyt.

Dlaczego zautomatyzowany excel był w stanie uruchamiać i zapisywać pliki na dysku, ale nie powiodło się, gdy poproszono go o "tylko", aby otworzyć istniejący plik?

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();
Author: Chris Richner, 2009-05-14

5 answers

Rozwiązanie jest naprawdę proste. Wątek na forum msdn można znaleźć Tutaj

krótko mówiąc, zamieszczam rozwiązanie tutaj, kredyt idzie do h Ogawa

To rozwiązanie jest ...

{・0]} - Windows 2008 Server x64

Proszę zrobić ten folder.

C:\Windows\SysWOW64\config\systemprofile\Desktop

{・0]} - Windows 2008 Server x86

Please make this folder.

C:\Windows\System32\config\systemprofile\Desktop

...zamiast dcomcnfg.exe.

Ta operacja usunęła problemy z automatyzacją biura w moim systemie.

Folder pulpitu wydaje się być niezbędny w folderze systemprofile, aby otworzyć plik za pomocą programu Excel.

Znika z Windows2008, Windows2003 miał folder, i myślę, że to powoduje ten błąd.

 31
Author: Chris Richner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-07 07:39:16

Podobnie jak podano w źródle, musisz ustawić poprawne prawa do folderu pulpitu. To działało dla mnie na Windows 2008 - 64bits i Office 2010 32bits.

  1. Utwórz katalog "C:\Windows\SysWOW64\config\systemprofile\Desktop" (Dla Windows 64 bit) lub "C:\Windows\System32\config\systemprofile\Desktop" (Dla Windows 32 bit)

  2. Przypisz Użytkownikowi " Usługi sieciowe (Service Réseau)" następujące prawa do utworzonego folderu:

Czytaj & Execute, List zawartość folderu, Read

John.

 7
Author: Jonx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-06 03:13:24

Dość często stwierdzam, że wywołanie Quit() nie wystarczy, aby zwolnić zasoby. Spróbuj dodać: -

System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);

Pomiędzy instrukcją Quit () a ustawieniem jej NA null.

 2
Author: Stuart Whiteford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-14 16:46:05

Istnieje o wiele więcej błędów niż ten wymieniony, przez który musisz pracować, aby program Excel działał na 64-bitowym systemie Windows Server 2007. Zobacz kroki, które wypracowałem po pracy nad tym przez dwa pełne dni!

 1
Author: Borgon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-15 20:56:15

Jeśli używasz Apache, być może będziesz musiał wykonać następujące kroki, aby MS Word działał poprawnie (wraz ze wszystkim, co opisano w innych odpowiedziach):

Poniżej znajduje się zrzut ekranu pokazujący dwa okna dialogowe, które musisz wywołać: Tutaj wpisz opis obrazka

Dla Apache:

Usługi->Apache->Kliknij Prawym Przyciskiem Myszy (Właściwości) - > Zakładka Logowanie

MS Word:

Uruchom dcomcnfg.exe - > Console Root- > Component Services - > Computers - > My Computer - > DCOM Config - > Find Microsoft Application - > Right Kliknij (Właściwości) - > Zakładka Tożsamość

**jeśli nie możesz znaleźć MS Word, upewnij się, że uruchamiasz poprawną konfigurację DCOM (64 bit vs 32 bit) w zależności od zainstalowanej wersji pakietu Office.

Istnieją dwie opcje Tutaj, można ustawić Apache używać lokalnego konta systemowego i zaznaczyć pole wyboru, aby umożliwić interakcję z komputerem. Jeśli to zrobisz, musisz ustawić tożsamość dla MS Word na Interactive User.

W przeciwnym razie musisz ustawić zarówno do tego samego użytkownika (najlepiej użytkownika, który jest zalogowany), jak pokazano na zdjęciu.

 1
Author: A.O.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-29 20:43:16