2013-01-18 14 views
5

Abbiamo un'applicazione di database che memorizza i dati che vogliamo segnalare in Microsoft Word.Come generare report in Word 2010 utilizzando C#, dot net, modelli di parole, xml

Supponiamo che tutte le informazioni dei miei clienti siano memorizzate su un sistema di database e ora mi viene richiesto di creare centinaia di lettere di parole, rapporti che verranno inviati ai miei clienti. Queste lettere hanno lo stesso contenuto ma nome cliente, indirizzo cliente, ecc.

Desidero utilizzare Office Word 2010 creando un modello di documento con controlli del contenuto utilizzando C# e .Net, sql come database per sostituire il contenuto di questo modello.

Ho cercato articoli sull'automazione di Word 2010 in C# e dot net e sql. Qualcuno potrebbe darmi una spinta nella giusta direzione?

+1

Vedere http://stackoverflow.com/questions/7382704/asp-net-web-service-using-office-2010-com. Non è supportato l'uso dell'automazione dell'ufficio in un'applicazione ASP.NET e, di solito, non funziona. –

+1

La domanda non è contrassegnata da ASP.NET e non la menziona nel corpo. – Emyr

+1

Non urla "Usa la funzione di lettera seriale di Word!"? –

risposta

1

È possibile utilizzare Interop.Word nel programma, ma tenere presente che la documentazione disponibile è molto scarsa. Sono riuscito a sviluppare la mia applicazione guardando esempi come this one from C-SharpCorner o this one from WindowsDevCenter. Anche se gli esempi sono vecchi, è possibile ottenere l'idea principale e acquisire familiarità con la sintassi e scrivere successivamente il programma con una versione aggiornata di Interop.Word (che ha una sintassi leggermente più semplice).

Nel tuo caso, dovresti creare un modello di Word pulito, con i segnalibri situati nelle posizioni del documento in cui inserire le informazioni sul cliente. Quindi puoi aprire il modello dal tuo programma e navigarlo utilizzando quei segnalibri, mentre inserisci le informazioni recuperate dal tuo database.

Ci sono altre interessanti alternative a Interop.Word che potresti provare se non vuoi approfondire l'automazione di Word, come ad esempio DocX (che non richiede nemmeno l'installazione di Microsoft Word o Office) o Open XML (per generare file .docx).

1

Ho usato assemblee Office.Interop in passato per questo tipo di funzionalità ma questo metodo porta alcuni svantaggi distinti:

  • Word deve essere installato sulla macchina in cui viene eseguito il codice
  • Gli assembly di interoperabilità avviano effettivamente Word in background, quindi devi fare attenzione a smaltire tutto correttamente e gestire gli errori, altrimenti finirai con i processi di Word che sprecano CPU/memoria sul server host
  • Le API sono non molto piacevole con cui lavorare e la documentazione è un po 'scarsa

Ho anche giocato con DocX e Open XML, entrambi i quali hanno i loro pregi ma tendono ad essere leggermente limitati rispetto a Interop. Il mio consiglio sarebbe di provare la funzionalità usando DocX o Open XML e ricorreremo a Interop solo se non è possibile ottenere la funzionalità in un altro modo. Ci dovrebbero essere un sacco di tutorial online per tutte e tre le API.

+0

Esiste la possibilità di creare xml personalizzati e il binding con l'origine dati con DocX? – learning

+0

Non sono sicuro di seguire, puoi approfondire cosa intendi? –

0

Ho usato sia interop e syncfusion per creare report (anche se stavo generando un report excel ma entrambe le tecnologie possono essere utilizzate anche per generare report di parole).Il mio feedback: -

  1. Anche se l'interoperabilità è incluso nella maggior parte dei computer che hanno Visual Studio (non sono sicuro di computer in studio non visivi), l'utilizzo di interoperabilità richiede la presenza di compatibilità Microsoft Excel anche sul computer che genera il rapporto, mentre Syncfusion non richiede la presenza di microsoft excel sullo stesso computer.
  2. Se si prevede di utilizzare asp.net, quindi interop non è supportato (almeno non è stato quando ho lavorato) mentre syncfusion è supportato.

Link per la Syncfusion: - http://www.syncfusion.com/products/aspnet/docio

Sommario: - Se si sta sviluppando un'applicazione console e del server (in cui verrà distribuito l'applicazione) ha installato Microsoft Office, quindi interoperabilità potrebbe essere una buona idea. Altrimenti, puoi dare un'occhiata anche a syncfusion.

1

Questo article contiene codice sorgente scaricabile che può essere facilmente utilizzato per risolvere il problema.

1

Così per l'avvio NON USARE INTEROP, ho iniziato ad usare per gli ultimi 4 anni , e devo dirvi che non è una buona idea (è davvero perso e ci saranno molti problemi, in realtà è scritto sul sito di Microsoft che non dovreste usarlo per la generazione lato server.

utilizzare l'SDK OpenXML, in realtà ho appena iniziato a usarlo, ma devo dire che anche se sembra ab è più difficile da usare, è decisamente molto più veloce che l'utilizzo di interoperabilità e la cosa migliore è che so non ho bisogno di alcun programma dalla suite Office da installare sul mio pc, lo svantaggio è che posso ' t esportazione in PDF o XPS più, senza una libreria di 3a parte

è possibile trovare l'sdk qui http://www.microsoft.com/en-us/download/details.aspx?id=30425

suggerisco di scaricare lo strumento, così è piuttosto utile.

Questo è un buon tutorial per iniziare mi ha davvero aiutato molto.

http://msdn.microsoft.com/en-us/library/office/bb448854.aspx

E u può anche utilizzare la documentazione API da uno strumento di produttività, che si trova sullo stesso sito come l'SDK

+0

Questo post potrebbe essere migliorato notevolmente con un po 'di attenzione all'ortografia e grammatica e meno uso della stenografia del testo. –

1

Sono d'accordo con gli altri che l'SDK OpenXML è un buon modo per andare per il stesse ragioni. Sono nel bel mezzo della creazione di un tipo simile di generazione di report come sei. I rapporti che devo generare sfortunatamente sono molto dinamici non solo con i dati ma con il layout.

Se il layout non deve essere modificato, ti suggerisco caldamente di utilizzare lo Strumento SDK, ti consente di prendere qualsiasi documento word e di generare il codice C# per ricreare lo stesso documento esatto.Da quel momento tutto ciò che devi fare è sostituire il testo con i dati che desideri nel codice. È possibile creare un report generico in parola, ottenere il codice con lo strumento, quindi effettuare una ricerca del testo segnaposto nel codice e sostituire tale stringa con una variabile. è facile come text1.text = reportData;

Inoltre, trovo che lo strumento SDK è un ottimo modo per imparare il codice, è possibile confrontare due file affiancati e vedere come si differenziano nel codice.

1

La risposta è OpenXML SDK.

  1. goto Open XML SDK 2.5 for Microsoft Office
  2. scaricare OpenXMLSDKV25 e OpenXMLSDKToolV25
  3. installare SDK e strumento di produttività
  4. parola aperta e creare il documento modello
  5. aperto Open XML SDK Produttività strumento
  6. documento word aperto
  7. fare clic con il tasto destro del mouse sul nome del documento da Document Explorer e selezionare il codice di riflessione
  8. copia tutto il codice generato al progetto
  9. Trova e modifica "Paragrafo" o "Run" che si desidera sostituire con i tuoi dati
0

È possibile usee libero .NET Word API per generare report in Word 97 ~ 2010 utilizzando C#.

 //Create word document 
     Document document = new Document(); 
     document.LoadFromFile(@"..\..\..\..\..\..\Data\Fax.doc"); 

     string[] filedNames = new string[]{"Contact Name","Fax","Date"}; 

     string[] filedValues = new string[]{"John Smith","+1 (69) 123456",System.DateTime.Now.Date.ToString()}; 

     document.MailMerge.Execute(filedNames, filedValues); 

     //Save doc file. 
     document.SaveToFile("Sample.doc", FileFormat.Doc); 
Problemi correlati