Perché Excel non può aprire un file quando viene eseguito dall'utilità di pianificazione?


14

Ho scritto uno script di PowerShell che apre una cartella di lavoro Excel ed esegue una macro. Quando eseguo quello script dalla console PS, o anche dalla riga di comando usando powershell.exe script.ps1, funziona. Quando imposto un'attività dall'utilità di pianificazione di Windows, viene sollevata un'eccezione per quel file Excel, dicendo che non esiste o è già in uso.

Il file esiste sicuramente, poiché lo script è stato eseguito correttamente dalla riga di comando e sono sicuro che non è in uso.

Ho provato a spostare il file Excel in un'area locale e non privilegiata, per evitare problemi di privilegi di amministratore / fiducia della rete. L'attività viene ancora eseguita con i privilegi più elevati. Il percorso non ha spazi o caratteri speciali.

Quando provo ad accedere al file usando un oggetto File system, non ci sono errori anche quando eseguito dallo scheduler, quindi immagino che sia specifico del Excel.Application.Workbooks.Open("..")metodo.

Cosa dovrei considerare ora?


1
Quale account utente viene utilizzato per eseguire l'attività pianificata?
Massimo

Ho usato l'account dell'amministratore del dominio e sembrava essere il problema. Utilizzando il gruppo degli amministratori di dominio ha funzionato. Ma ora dovevo scoprire perché l'autorizzazione di accesso DCOM ha un problema con l'account amministratore di dominio.
zrz,

tl; dr: la soluzione alternativa nella risposta di eric è efficace , ma non è supportata - consulta questo articolo di supporto Microsoft . Meglio cercare alternative come il pacchetto nuget DocumentFormat.OpenXml .
mklement0

Risposte:


8

È probabile che sia un problema con le autorizzazioni DCOM. L'automazione di Excel è talvolta irta di pericoli ...

L'unico modo per risolvere problemi come questo è impostare Excel in modo che venga eseguito come utente specifico tramite le autorizzazioni DCOM.

  1. Apri Servizi componenti (Start -> Esegui, digita dcomcnfg)
  2. Esegui il drill down su Servizi componenti -> Computer -> Risorse del computer e fai clic su Config DCOM
  3. Fare clic con il tasto destro del mouse sull'applicazione Microsoft Excel e selezionare Proprietà
  4. Nella scheda Identità selezionare Questo utente e inserire l'ID e la password di un account utente interattivo (dominio o locale) e fare clic su OK

Mantenerlo come utente interattivo o l'avvio non funziona sfortunatamente con l'utilità di pianificazione, anche quando si imposta l'attività per l'esecuzione con un account che ha accesso di amministratore alla macchina.


1
Grazie per aver sottolineato dcomcnfg. Ho dovuto aggiungere manualmente l'applicazione Excel nel registro per poterla vedere in dcomcnfg, quindi ho provato a modificare le impostazioni dell'identità ma non ha funzionato neanche. Da dcomcnfg, ho esaminato l'autorizzazione all'accesso: l'amministratore del dominio era nell'elenco e aveva accesso locale e remoto, ma c'era un piccolo segno rosso (croce bianca all'interno di un disco rosso) sopra la sua icona. Non ho idea del perché, ma in qualche modo c'è un problema con l'account dell'amministratore di dominio. L'aggiunta dell'account del gruppo amministratori di dominio e l'esecuzione dell'attività da quel gruppo è una soluzione alternativa.
zrz,

Microsoft non supporta l'esecuzione di componenti COM di Office in sessioni non interattive: consultare support.microsoft.com/en-us/help/257757/… . La risposta di eric è attualmente una soluzione alternativa efficace, ma non è supportata.
mklement0

Questa risposta potrebbe essere migliorata descrivendo come aggiungere voci dell'applicazione Microsoft Excel quando mancano completamente da DCOM Config. Vedi docs.microsoft.com/en-us/archive/blogs/… Inoltre, FWIW, questo non ha risolto il mio problema. Un processo Excel viene ancora visualizzato in Task Manager, ma il file specificato non si apre / esegue mai.
TylerH,

Allo stesso modo, dopo aver apportato questa modifica, mi ha impedito di eseguire o addirittura aprire i file VBA di Excel / l'editor VBA, causando CTD ogni volta che lo provo.
TylerH,

42

Crea queste due cartelle:

32Bit:

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

64Bit:

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

Excel ha bisogno di queste cartelle se non viene eseguito in modo interattivo. Crea entrambe le cartelle anche se utilizzi un sistema operativo a 64 bit.


3
Voglio solo aggiungere che Microsoft non supporta l'esecuzione di alcun componente di Office in modo non interattivo, ma è possibile aggirarlo in molti casi.
flindeberg,

8
Questa è una magia seriamente nera. Non so cosa sia più spaventoso: che Excel avesse bisogno di questa cartella in questo scenario o che qualcuno sapesse che Excel aveva bisogno di questa cartella in questo scenario.
Ricco C

1
Per sottolineare il punto di @ flindeberg: questa soluzione alternativa è efficace , ma non è supportata - consulta questo articolo di supporto Microsoft .
mklement0

La creazione di queste cartelle e l'assegnazione del controllo completo per il mio account (che è anche l'account che esegue l'attività pianificata) fino in fondo da system32 / SysWOW64 alle cartelle del desktop non funzionava ancora per me.
TylerH,

2

Quando si impostano le autorizzazioni DCOM, se Microsoft Excel non viene visualizzato in dcomcnfgprovammc comexp.msc /32

riferimento


Ciò ha causato l'apertura di DCOM Config per me e mi ha chiesto se volevo registrare un paio di voci, ma Excel non era tra queste.
TylerH,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.