Cum se poate crea un document Word în C #?

Am un proiect în care aș dori să generez un raport de export în format MS Word. Raportul va include imagini/grafice, tabele și text. Care este cel mai bun mod de a face acest lucru? Instrumente terțe? Care sunt experiențele dvs.?

0
fr hi bn
Aceasta ar trebui să fie redeschisă. Nu numai că este clar și util, ci este legată de alte întrebări care sunt marcate ca duplicate ale acestui lucru.
adăugat autor DarenW, sursa

16 răspunsuri

Am găsit Cuvintele Aspose pentru a fi cele mai bune, deoarece nu toată lumea poate deschide fișierele Office Open XML/* .docx, iar automatizarea Word interop și Word poate fi buggy. Aspose Words acceptă majoritatea tipurilor de fișiere document din Word 97 în sus.

Este o componentă plătitoare, dar are un mare sprijin. Cealaltă alternativă, așa cum a fost deja sugerată, este RTF.

0
adăugat
Am descoperit că termenii Aspose sunt puțin lipsiți atunci când lucrează cu documente OpenXml. Mai precis, manipularea controalelor de conținut este în continuare inutilă și nu poate să manipuleze deloc nodurile AltChunk.
adăugat autor Collin K, sursa

Schmidty, dacă doriți să generați documente Word pe un server web, veți avea nevoie de o licență pentru fiecare client (nu doar serverul web). Vedeți această secțiune în primul link Rob postat:

"În afară de problemele tehnice, trebuie să luați în considerare și problemele legate de licențiere.Link-urile actuale de licențiere împiedică utilizarea aplicațiilor Office pe un server pentru a satisface cererile clienților, cu excepția cazului în care acești clienți au licențiate copii ale Office. stațiile de lucru fără licență nu sunt acoperite de Acordul de licență pentru utilizatorul final (EULA). "

Dacă îndepliniți cerințele de licențiere, cred că va trebui să utilizați COM Interop - pentru a fi specific, Office XP Primar Interop Assemblies .

0
adăugat

Răspunsul va depinde ușor dacă aplicația rulează pe un server sau dacă rulează pe mașina client. Dacă rulați pe un server, atunci doriți să utilizați unul dintre formatele de generare de birouri bazate pe XML, deoarece există probleme cunoscute când utilizând Office Automation pe un server .

Cu toate acestea, dacă lucrați la mașina client, aveți posibilitatea să alegeți utilizând Office Automatizarea sau utilizând formatul Office Open xml (consultați linkurile de mai jos), care este susținut de Microsoft Office 2000 și până la pachet service pack. Unul dintre ele este acela că este posibil să nu puteți încorpora anumite tipuri de grafice sau imagini pe care doriți să le arătați.

Cea mai bună modalitate de a merge la lucruri se va baza pe cât de mult timp trebuie să investiți în dezvoltare. Dacă mergeți pe ruta Office Automation există destul de multe tutoriale bune acolo care pot fi găsite prin Google și este destul de simplu de învățat. Cu toate acestea, formatul Open Office xml este destul de nou, astfel încât este posibil ca curba de învățare să fie puțin mai mare.

Office Open xml Iinformation

0
adăugat
Actualizați începând cu 9/2011 ... Eu fac atât Interop, cât și OpenXml și, în orice caz, se va confrunta cu această sarcină, aș folosi absolut OpenXml. Este singura soluție care garantează absolut că veți avea control absolut asupra rezultatelor.
adăugat autor Chris B. Behrens, sursa

Cea mai rapidă metodă pe care am făcut-o în trecut este utilizarea XML. Iată un bun articol care ar trebui să te facă să începi:

http://msdn.microsoft.com/en-us/magazine/cc164064.aspx

0
adăugat
Wow, acesta este un articol bun.
adăugat autor Frank Krueger, sursa
Această legătură MSDN a murit. Există o dată de autor, de titlu sau de publicare, pot căuta?
adăugat autor DarenW, sursa
Salvarea acestui serviciu folosind biroul 2010 nu este posibilă. suport.microsoft.com/kb/2445060 MSFT a pierdut unele cazuri pentru salvarea xml personalizat. zdnet.com/blog/microsoft/…
adăugat autor Ankush, sursa

@Danny Smurf: De fapt, acest articol descrie ceea ce va deveni formatul Office Open XML, la care Rob a răspuns. Voi acorda mai multă atenție legăturilor pe care le post pentru acum, pentru a vă asigura că nu sunt depășite. De fapt, am făcut o căutare pe WordML, ceea ce a fost numit atunci.

Cred că formatul Office Open xml este cel mai bun mod de a merge.

0
adăugat

DocX free library for creating DocX documents, actively developed and very easy and intuitive to use. Since CodePlex is dying, project has moved to github.

0
adăugat

O altă alternativă este Windward Docgen (disclaimer - eu sunt fondatorul). Cu Windward proiectați șablonul în Word, inclusiv imagini, tabele, grafice, calibre și orice altceva doriți. Puteți seta etichete în care sunt inserate date dintr-o sursă de date xml sau SQL (inclusiv funcții precum buclele pentru fiecare, import, etc). Și apoi generați raportul la DOCX, PDF, HTML, etc.

0
adăugat
@SteveHiner - Avem variante de prețuri acolo (căutați pe preț), dar am luat în jos lista de prețuri deoarece un procent semnificativ din timpul în care oamenii au înțeles greșit ceea ce aveau nevoie și apoi s-au înșelat. Deci ne-am gândit mai bine să înțelegem nevoia cuiva și apoi să îi oferim prețul potrivit.
adăugat autor David Thielen, sursa
FYI, când mă duc la un site pentru un produs comercial și se pare că ascund prețul în timp ce susține că există o pistă liberă, mă presupun automat că produsul este foarte scump, iar încercarea gratuită este doar momeală. Dacă Docgen este nebun de scump atunci probabil că aveți dreptate să ascundeți prețul, dar altfel cred că este o greșeală.
adăugat autor Steve Hiner, sursa

LibreOffice also supports headless interaction via API. Unfortunately there's currently not much information about this feature yet.. :(

0
adăugat

Am avut un succes bun folosind SynCfusion Backoffice DocIO care suportă formatele doc și docx.

În edițiile anterioare nu a acceptat totul în cuvânt, dar în conformitate cu lista dvs., l-am testat cu tabele și text ca o abordare de fuzionare a corespondenței și a funcționat bine.

Nu sunteți siguri de importul de imagini. Pe pagina lor de nebun http://www.syncfusion.com/products/ DocIO/Backoffice/features/default.aspx se spune

Blockquote   Essential DocIO are suport pentru introducerea în document a imaginilor Scalar și Vector, în aproape toate formatele. Bitmap, gif, png și tiff sunt unele dintre tipurile de imagini comune acceptate.

Deci merită să luați în considerare.

As others have mentioned you can build up a RTF document, there are some good RTF libraries around for .net like http://www.codeproject.com/KB/string/nrtftree.aspx

0
adăugat

@Dale Ragan: Aceasta va funcționa pentru formatul xml Office 2003, dar nu este portabil (cum ar fi fișierele .doc sau .docx).

Pentru a citi/scrie aceste, va trebui să utilizați controlul ActiveX al Bibliotecii Obiect Word:

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

0
adăugat

Check out VSTO (Visual Studio Tools pentru Office). Este destul de simplu să creați un șablon Word, să injectați o insulă de date xml în el, apoi să îl trimiteți clientului. Când utilizatorul deschide docul în Word, Word citește xml-ul și îl transformă în WordML și îl redă. Veți dori să vă uitați la clasa ServerDocument a bibliotecii VSTO. Nu este necesară licențierea suplimentară din experiența mea.

0
adăugat

Am scris o serii de postări de blog pe Open Generarea de documente WordprocessingML xml . Abordarea mea este că creați un document de șablon care conține controale de conținut și în fiecare control de conținut scrieți o expresie XPath care definește modul de preluare a conținutului dintr-un document xml care conține datele care conduc procesul de generare a documentelor. Codul este gratuit și este licențiat sub Licență reciprocă Microsoft (Ms-RL) . În aceeași serie de postări pe blog, explorez și o abordare în care scrieți codul C# în controalele de conținut. Procesul de generare a documentelor procesează apoi documentul șablonului și generează un program C# care generează documentele dorite. Un avantaj al acestei abordări este că puteți utiliza orice sursă de date ca sursă de date pentru procesul de generare a documentelor. Acest cod este, de asemenea, licențiat sub licența Microsoft Reciprocal License.

0
adăugat

În prezent, fac acest lucru exact.

Dacă documentul nu este foarte mare, nu conține imagini și așa, atunci îl stochez ca RTF cu # MergeFields # în el și pur și simplu îl înlocuiesc cu conținut, trimițând rezultatul până la utilizator ca RTF.

Pentru documente mai mari, inclusiv imagini și imagini inserate dinamic, salvez inițial documentul Word ca fișier Unic de pagină * .mht care conține # MergeFields # din nou. Apoi fac același lucru ca mai sus. Folosind acest lucru, pot face cu ușurință un tabel de date cu unele etichete de bază Html și înlocuiți unul din # MergeFields # cu un tabel întreg.

Imaginile pot fi stocate pe serverul dvs. și URL-ul încorporat în document.

Interesant este că noile formate de fișiere Office 2007 sunt de fapt fișiere zip - dacă le redenumiți extensia în .zip, le puteți deschide și puteți vedea conținutul lor. Aceasta înseamnă că ar trebui să puteți schimba conținutul, cum ar fi imaginile, în interiorul și în afară folosind o simplă bibliotecă C# zip.

0
adăugat

Considerați că folosiți .RTF ca alternativă?

Acesta acceptă încorporarea imaginilor și a tabelelor, precum și a textului, se deschide implicit utilizând Microsoft Word și în timp ce setul de caracteristici este mai limitat (numără orice formatare avansată) pentru ceva care arată și se simte și se deschide ca un document Word nu este departe.

Utilizatorii finali, probabil, nu vor observa.

0
adăugat
Vă rugăm să nu utilizați RTF - spec. Este o mizerie, chiar și Microsoft nu o urmează pe deplin, și are o mulțime de ambiguitate în ea.
adăugat autor David Thielen, sursa

Pentru a genera documente Word cu Office Automation în .NET, în special în C# sau VB.NET:

  1. Adăugați referința de asamblare Microsoft.Office.Interop.Word la proiectul dvs. Calea este \ Visual Studio Tools pentru Office \ PIA \ Office11 \ Microsoft.Office.Interop.Word.dll .

  2. Urmați exemplul codului Microsoft puteți găsi aici: http://support.microsoft.com/kb/316384/ro- ne .

0
adăugat

De asemenea, puteți utiliza generatorul de documente Word. Acesta poate fi utilizat pentru implementarea pe partea clientului sau a serverului. Din descrierea proiectului:

WordDocumentGenerator este un utilitar pentru a genera documente Word din   șabloane utilizând Visual Studio 2010 și Open xml 2.0 SDK.   WordDocumentGenerator ajută la generarea documentelor Word atât   non-refresh-capabil, precum și refresh-pe baza de șabloane predefinite   folosind modificări minime ale codului. Controlul conținutului este utilizat ca loc de substituire   pentru generarea de documente. Acesta acceptă Word 2007 și Word 2010.

Grab it: http://worddocgenerator.codeplex.com/

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

0
adăugat