2015-12-01 48 views
22

Sto utilizzando Interoperabilità di Excel per aprire un file xlsx e salvarlo come documento PDF. Quando si richiama il metodo 'ExportAsFixedFileFormat', viene visualizzata una finestra di dialogo intitolata "Pubblicazione" per indicare lo stato di avanzamento. Come posso sopprimere o nascondere questa finestra di dialogo? Ho visto alcune domande simili su altri forum senza una soluzione soddisfacente, ma spero che qualcuno abbia risolto questo problema da allora.C# Interop di Excel - Elimina la finestra di dialogo "Pubblicazione" quando si richiama Worksheet.ExportAsFixedFormat

enter image description here

Codice:

Application application = new Application(); 
application.DisplayAlerts = false; // <- No effect 
application.Visible = false; // <- No effect 
application.ScreenUpdating = false; // <- No effect 
application.UserControl = false; // <- No effect 
application.Workbooks.Open(path, Type.Missing, true); 
application.DisplayDocumentActionTaskPane = false; // <- No effect 
application.Worksheets[1].ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, path); 
+0

Questo Bounty potrebbe aiutare nessuno. Sembra dipendere dal sistema operativo e dalla versione di Excel, poiché sulla mia macchina (Win 10 + Office 2013) non è presente una singola finestra di dialogo – lokusking

+0

Semplicemente non è possibile. Questo tipo di finestre di dialogo di avanzamento vengono visualizzate quando Excel rileva che l'operazione in corso richiederà molto tempo. Anche se si salva la cartella di lavoro 'CTRL + S' e la destinazione è un'unità di rete con rete lenta, verrà visualizzata una finestra di dialogo di avanzamento. È principalmente perché o stai pubblicando un sacco di dati o il tuo sistema è a corto di risorse o stai pubblicando su un disco di rete che è lento o tutti questi. – cyboashu

+3

Sono pochi i modi per farlo, utilizzando WinAPI per trovare questa finestra di dialogo e impostare la visibilità su nascosto o se si è interessati all'utente che annulla questa operazione, quindi utilizzare nuovamente WinAPI per bloccare l'input del mouse della tastiera durante la pubblicazione. – cyboashu

risposta

0

Che ne dite di elaborazione su un BackgroundWorker. Questo non getterà COMEXCEPTION. Ho provato questo codice con un clic del mouse e funziona senza visualizzare lo progress dialog.

var worker = new BackgroundWorker(); 
worker.DoWork += (o, args) => 
{ 
    var path = @"D:\sample.xlsx"; 
    var application = new Microsoft.Office.Interop.Excel.Application(); 
    application.Workbooks.Open(path, 
     Type.Missing, true); 
    application.Worksheets[1].ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, path); 
}; 
worker.RunWorkerAsync(); 
1

Forse non sto rispondendo alla tua domanda, ma cercherò di essere d'aiuto. Per quanto ne so, non è consigliabile utilizzare Excel Interop nell'elaborazione back-end. Hai incontrato uno dei suoi problemi, ma ce ne sono altri. Esistono alternative di terze parti per l'interazione con i formati Excel, alcune sono open source e altre sono commerciali. Consiglio vivamente di dare un'occhiata a uno di essi: ClosedXML e NPOI. Entrambi sono open source e gratuiti.

0

È possibile utilizzare la libreria pedamorf, pedamorf è un server che converte documenti, immagini, URL, html e testo in PDF. Fa affidamento sugli eccellenti programmi open source wkhtml2pdf, Libre Office e iTextSharp. Viene fornita una libreria client che può essere utilizzata da un'applicazione .NET per utilizzare i servizi di conversione forniti da pedamorf.

Maggiori informazioni è here

0

Di gran lunga il migliore per gestire API (creare, leggere, l'esportazione in PDF/HTML, ecc ...) XLS file/XLSX che conosco è Flexcel. È davvero semplice, incredibilmente veloce e completo in C#. Non richiede l'installazione di Excel.

Troverete qui: http://www.tmssoftware.com/site/flexcelnet.asp (ottenere la versione di prova, con un sacco di esempi con il codice sorgente)

Se avete budget nel progetto di acquisire la licenza, ho davvero Reccomend.

+0

Usa NuGet e cerca EPPlus. È di gran lunga (nel mio HO) la migliore API per generare con i contenuti Excel sul web. – Dotnettex