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();
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 x64Proszę zrobić ten folder.
C:\Windows\SysWOW64\config\systemprofile\Desktop
{・0]} - Windows 2008 Server x86Please 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.
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.
-
Utwórz katalog "C:\Windows\SysWOW64\config\systemprofile\Desktop" (Dla Windows 64 bit) lub "C:\Windows\System32\config\systemprofile\Desktop" (Dla Windows 32 bit)
-
Przypisz Użytkownikowi " Usługi sieciowe (Service Réseau)" następujące prawa do utworzonego folderu:
Czytaj & Execute, List zawartość folderu, Read
John.
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.
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!
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ć:
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.
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