Domanda

Sono ben consapevole dell'articolo della base di supporto Microsoft che afferma che non è supportato automatizzare meno l'interfaccia utente dei prodotti per ufficio.Sembra che Windows Server 2008 x64 ed Excel 2007 applicare la dichiarazione data.

Sto eseguendo il seguente codice in un metodo OnStart del servizio NT (account di sistema locale).Tutto ciò che fa è l'automazione di Excel nel modo in cui funziona quando esegui lo stesso codice in un'applicazione console.

Il codice fornito è composto da due parti.La prima parte avvia Excel, crea una nuova cartella di lavoro e la salva con il nome file specificato.La seconda parte avvia una nuova istanza di Excel e apre il file specificato.L'operazione di apertura termina con questa eccezione:

Impossibile avviare il servizio.System.Runtime.InteropServices.COMException (0x800A03EC):Microsoft Office Excel non può accedere al file 'c: emp est.xls'.Ci sono diverse ragioni possibili:

• Il nome o il percorso del file non esiste.• Il file è utilizzato da un altro programma.• La cartella di lavoro che si sta tentando di salvare ha lo stesso nome di una cartella di lavoro attualmente aperta.

Perché Excel automatizzato è stato in grado di avviare e scrivere file su disco ma non riesce quando viene chiesto "solo" di aprire un file esistente?

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();
È stato utile?

Soluzione

La soluzione è molto semplice. Il filo MSDN forum si possono trovare qui

per fare una lunga storia breve sto postando la soluzione qui, il merito va a H Ogawa

Questa soluzione è ...

· Windows 2008 Server x64

Si prega di fare questa cartella.

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

· Windows 2008 Server x86

Si prega di fare questa cartella.

C: \ Windows \ System32 \ Config \ systemprofile \ Desktop

... invece di Dcomcnfg.exe.

Questa operazione ha portato via i problemi di automazione per ufficio nel mio sistema.

Una cartella Desktop sembra essere necessaria nella cartella systemprofile per aprire file di Excel.

E 'scompare dal Windows2008, Windows2003 aveva la cartella, e penso che causare questo errore.

Altri suggerimenti

Inoltre, come indicato nella fonte, è necessario impostare i diritti corretti per la cartella Desktop.Questo ha funzionato per me su Windows 2008-64 bit e Office 2010 a 32 bit.

  1. Crea la directory "C:\Windows\SysWOW64\config\systemprofile\Desktop " (per Windows a 64 bit) o ​​"C:\Windows\System32\config\systemprofile\Desktop " (per Windows a 32 bit)

  2. Assegnare all'utente "Servizi di rete (Service Réseau)" i seguenti diritti per la cartella creata:

Leggi ed esegui, Elenca il contenuto della cartella, Leggi

John.

Ho spesso trovato che chiamare Quit () non è sufficiente per liberare le risorse. Prova ad aggiungere: -

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

tra il Quit dichiarazione () e l'impostazione a NULL.

Non ci sono molti più errori rispetto a quello menzionato che avrete bisogno di lavorare attraverso al fine di ottenere Excel lavorare su Windows Server 2007 a 64 bit. Vedere i passi che ho lavorato fuori dopo aver lavorato su questo per due giorni interi!

Se si utilizza Apache, potrebbe anche essere necessario attenersi alla seguente procedura per ottenere MS Word funziona correttamente (insieme a tutto delineato in altre risposte):

Di seguito è riportato uno screenshot che mostra le due finestre di dialogo di cui ha bisogno per far apparire: entrare descrizione dell'immagine qui

Per Apache:

Servizi-> Apache-> Right Click (Proprietà) -> Nella scheda

MS Word:

Launch dcomcnfg.exe-> Console Root> Componente Servizi-> Computers-> Risorse del computer-> DCOM Config-> Trova Microsoft Application-> Right Click (Proprietà) -> scheda Identità

** se non riesci a trovare la MS Word, assicurarsi che si sta avviando la corretta configurazione DCOM (64 bit vs 32 bit) a seconda di quale versione di Office installata.

Ci sono due opzioni, è possibile impostare Apache per usare Account di sistema locale e controllare la casella di controllo per consentire l'interazione del desktop. Se fate questo, allora è necessario impostare il Identità per MS Word a utente interattivo .

In caso contrario, è necessario impostare sia allo stesso utente (Idealmente l'utente che ha effettuato l'accesso), come mostrato nella foto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top