Domanda

Ho un progetto in cui vorrei generare un'esportazione di report in formato MS Word.Il rapporto includerà immagini/grafici, tabelle e testo.Qual è il modo migliore per farlo?Strumenti di terze parti?Quali sono le tue esperienze?

È stato utile?

Soluzione

La risposta dipenderà leggermente dal fatto che l'applicazione sia in esecuzione su un server o sul computer client.Se stai utilizzando un server, allora vorrai utilizzare uno dei formati di generazione Office basati su XML poiché ci sono problemi noti quando utilizzando Office Automation su un server.

Tuttavia, se stai lavorando sul computer client, puoi scegliere tra uno dei due utilizzando l'automazione dell'ufficio oppure utilizzando il formato Office Open XML (vedi collegamenti sotto), supportato da Microsoft Office 2000 e versioni successive in modo nativo o tramite service pack.Uno svantaggio è che potresti non essere in grado di incorporare alcuni tipi di grafici o immagini che desideri mostrare.

Il modo migliore per affrontare le cose dipenderà da quanto tempo avrai a disposizione per investire nello sviluppo.Se segui il percorso di Office Automation, ci sono alcuni buoni tutorial che possono essere trovati tramite Google ed è abbastanza semplice da imparare.Tuttavia, il formato Open Office XML è abbastanza nuovo, quindi potresti trovare la curva di apprendimento un po’ più alta.

Informazioni Office Open XML

Altri suggerimenti

Libreria gratuita DocX per la creazione di documenti DocX, sviluppato attivamente e molto facile e intuitivo da usare.Poiché CodePlex sta morendo, il progetto è passato a github.

Ho trascorso l'ultima settimana circa per aggiornarmi Office Apri XML.Disponiamo di un'applicazione di database che memorizza i dati del sondaggio che desideriamo segnalare in Microsoft Word.Puoi effettivamente creare file Word 2007 (docx) da zero in C#.Open XML SDK versione 2 include un'applicazione interessante chiamata Document Reflector che fornirà effettivamente il codice C# per ricreare completamente un documento Word.Puoi utilizzare parti o tutto il codice e sostituire al volo i bit che desideri modificare.Il file della guida incluso con l'SDK contiene anche alcuni buoni esempi di codice.

Non è necessario Office Interop o qualsiasi altro software Office sul server: i nuovi formati sono XML al 100%.

Hai considerato l'utilizzo di .RTF come alternativa?

Supporta l'incorporamento di immagini, tabelle e testo, si apre per impostazione predefinita utilizzando Microsoft Word e sebbene il suo set di funzionalità sia più limitato (esclude qualsiasi formattazione avanzata) per qualcosa che sembra e si apre come un documento Word, non è lontano.

I tuoi utenti finali probabilmente non se ne accorgeranno.

ho trovato Asporre parole essere il migliore in quanto non tutti possono aprire file in formato Office Open XML/*.docx e l'interoperabilità di Word e l'automazione di Word possono essere difettosi.Aspose Words supporta la maggior parte dei tipi di file di documenti da Word 97 in su.

È un componente a pagamento ma ha un ottimo supporto.L'altra alternativa, come già suggerito, è RTF.

Per generare documenti Word con Office Automation in .NET, in particolare in C# o VB.NET:

  1. Aggiungi il Microsoft.Office.Interop.Word riferimento all'assembly per il tuo progetto.Il percorso è \Visual Studio Tools per Office\PIA\Office11\Microsoft.Office.Interop.Word.dll.

  2. Segui l'esempio del codice Microsoft che puoi trovare qui: http://support.microsoft.com/kb/316384/en-us.

Schmidty, se vuoi generare documenti Word su un server web avrai bisogno di una licenza per ciascuno cliente (non solo il server web).Vedi questa sezione per prima collegamento Rob ha postato:

"Oltre ai problemi tecnici, bisogna considerare anche i problemi di licenza.Le attuali linee guida sulle licenze impediscono l'utilizzo delle applicazioni di Office su un server per soddisfare le richieste dei client, a meno che i client stessi non dispongano di copie di Office con licenza.L'utilizzo dell'automazione lato server per fornire funzionalità di Office a workstation senza licenza non è coperto dal contratto di licenza con l'utente finale (EULA)."

Se soddisfi i requisiti di licenza, penso che dovrai utilizzare COM Interop, per essere precisi, the Assemblaggi di interoperabilità primari di Office XP.

Scopri VSTO (Visual Studio Tools per Office).È abbastanza semplice creare un modello Word, inserirvi un'isola dati xml e quindi inviarlo al client.Quando l'utente apre il documento in Word, Word legge l'xml, lo trasforma in WordML e ne esegue il rendering.Ti consigliamo di esaminare la classe ServerDocument della libreria VSTO.In base alla mia esperienza, non è richiesta alcuna licenza aggiuntiva.

Ho avuto un buon successo utilizzando Syncfusion Backoffice DocIO che supporta i formati doc e docx.

Nelle versioni precedenti non supportava tutto in parole, ma secondo il tuo elenco l'abbiamo testato con tabelle e testo come approccio di stampa unione e ha funzionato bene.

Non sono sicuro però dell'importazione delle immagini.Sulla loro pagina di presentazione http://www.syncfusion.com/products/DocIO/Backoffice/features/default.aspx dice

Blockquote Essential Docio ha supporto per l'inserimento di immagini scadenti e vettoriali nel documento, in quasi tutti i formati.Bitmap, gif, png e tiff sono alcuni dei tipi di immagine più comuni supportati.

Quindi vale la pena considerarlo.

Come altri hanno già detto, puoi creare un documento RTF, ci sono alcune buone librerie RTF in giro per .net http://www.codeproject.com/KB/string/nrtftree.aspx

Ho affrontato questo problema e ho creato una piccola libreria per questo.È stato utilizzato in diversi progetti e poi ho deciso di pubblicarlo.È gratuito e molto, molto semplice, ma sono sicuro che ti aiuterà con il compito.Richiama la libreria Office Open XML, http://invoke.co.nz/products/docx.aspx.

Ho scritto un Serie di post di blog sulla generazione di documenti Open XML WordprocessingML.Il mio approccio consiste nel creare un documento modello che contenga controlli del contenuto e in ciascun controllo del contenuto scrivere un'espressione XPath che definisce come recuperare il contenuto da un documento XML che contiene i dati che guidano il processo di generazione del documento.Il codice è gratuito ed è concesso in licenza con il Licenza reciproca Microsoft (Ms-RL).Nella stessa serie di post di blog esplorerò anche un approccio in cui si scrive codice C# nei controlli del contenuto.Il processo di generazione del documento elabora quindi il documento modello e genera un programma C# che genera i documenti desiderati.Un vantaggio di questo approccio è che è possibile utilizzare Qualunque origine dati come fonte di dati per il processo di generazione del documento.Tale codice è concesso in licenza anche in base alla licenza reciproca Microsoft.

Attualmente faccio esattamente questa cosa.

Se il documento non è molto grande, non contiene immagini e simili, lo memorizzo come RTF con #MergeFields# al suo interno e li sostituisco semplicemente con il contenuto, inviando il risultato all'utente come RTF.

Per documenti più grandi, incluse immagini e immagini inserite dinamicamente, salvo il documento Word iniziale come file *.mht di pagina Web singola contenente nuovamente #MergeFields#.Quindi faccio lo stesso di sopra.Utilizzando questo, posso facilmente eseguire il rendering di un DataTable con alcuni tag di tabella Html di base e sostituire uno dei #MergeFields# con un'intera tabella.

Le immagini possono essere archiviate sul tuo server e anche l'URL incorporato nel documento.

È interessante notare che i nuovi formati di file di Office 2007 sono in realtà file zip: se rinomini l'estensione in .zip puoi aprirli e vederne il contenuto.Ciò significa che dovresti essere in grado di trasferire contenuti come immagini dentro e fuori utilizzando una semplice libreria zip C#.

@Dale Ragan:Funzionerà con il formato XML di Office 2003, ma non è portabile (come, ad esempio, lo sarebbero i file .doc o .docx).

Per leggerli/scriverli, dovrai utilizzare il controllo ActiveX della libreria di oggetti di Word:

http://www.codeproject.com/KB/aspnet/wordapplication.aspx

@Danny Puffo:In realtà questo articolo descrive quello che diventerà il formato Office Open XML con cui Rob ha risposto.Per ora presterò più attenzione ai link che pubblicherò per assicurarmi che non siano obsoleti.In realtà ho fatto una ricerca su WordML, come si chiamava all'epoca.

Credo che il formato Office Open XML sia la soluzione migliore.

LibreOffice supporta anche l'interazione headless tramite API.Sfortunatamente al momento non ci sono ancora molte informazioni su questa funzionalità.:(

Puoi anche utilizzare il generatore di documenti Word.Può essere utilizzato per la distribuzione lato client o lato server.Dalla descrizione del progetto:

WordDocumentGenerator è un'utilità per generare documenti di parole dai modelli usando Visual Studio 2010 e Open XML 2.0 SDK.WordDocumentGenerator aiuta a generare documenti di parole sia non refresh che di aggiornamento in base a modelli predefiniti utilizzando le modifiche al codice minimo.I controlli dei contenuti vengono utilizzati come segnaposto per la generazione di documenti.Supporta Word 2007 e Word 2010.

Prendilo: http://worddocgenerator.codeplex.com/

Scarica l'SDK: http://www.microsoft.com/en-us/download/details.aspx?id=5124

Un'altra alternativa è Docgen sopravvento (disclaimer - sono il fondatore).Con Windward progetti il ​​modello in Word, includendo immagini, tabelle, grafici, indicatori e tutto ciò che desideri.È possibile impostare tag in cui vengono inseriti i dati da un'origine dati XML o SQL (incluse funzionalità come cicli forEach, importazione, ecc.).Quindi genera il rapporto in DOCX, PDF, HTML, ecc.

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