Jak można utworzyć dokument Word w C#? [zamknięte]

Mam projekt, w którym chciałbym wygenerować eksport raportu w formacie MS Word. Raport będzie zawierał obrazy/wykresy, tabele i tekst. Jak najlepiej to zrobić? Narzędzia innych firm? Jakie są wasze doświadczenia?

Author: Peter Mortensen, 2008-08-14

17 answers

Odpowiedź będzie zależeć nieco od tego, czy aplikacja działa na serwerze, czy na komputerze klienckim. Jeśli korzystasz z serwera, będziesz chciał użyć jednego z formatów generowania biur opartych na XML, ponieważ istnieją problemy z wiedzą, gdy za pomocą automatyzacji biura na serwerze .

Jeśli jednak pracujesz na komputerze klienckim, masz do wyboru albo używając Office Automation lub używając Office Open XML format (zobacz linki poniżej), który jest obsługiwany przez Microsoft Office 2000 i nowsze, natywnie lub za pośrednictwem dodatków service Pack. Jednym z nich jest to, że możesz nie być w stanie osadzić niektórych rodzajów wykresów lub obrazów, które chcesz pokazać.

Najlepszy sposób postępowania będzie zależał od tego, ile czasu trzeba zainwestować w rozwój. Jeśli wybierzesz automatyzację biura, istnieje sporo dobrych samouczków, które można znaleźć za pośrednictwem Google i są dość proste do nauczenia się. Jednak Format Open Office XML jest dość nowy, więc krzywa uczenia się może być nieco wyższa.

Office Open XML Iinformacja

 49
Author: rjzii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-25 05:23:37

DocX darmowa biblioteka do tworzenia dokumentów DocX, aktywnie rozwijana i bardzo łatwa i intuicyjna w obsłudze. Ponieważ CodePlex umiera, projekt został przeniesiony do github .

 17
Author: MadBoy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-27 15:49:44

Spędziłem ostatni tydzień mniej więcej na zapoznawaniu się z Office Open XML . Mamy aplikację bazodanową, która przechowuje dane ankiet, które chcemy zgłosić w programie Microsoft Word. Możesz tworzyć pliki Word 2007 (docx) od podstaw w C#. Open XML SDK w wersji 2 zawiera fajną aplikację o nazwie Reflektor dokumentu, który faktycznie dostarczy kod C#, aby w pełni odtworzyć dokument Word. Możesz użyć części lub całego kodu i zastąpić bity, które chcesz zmienić mucha. Plik pomocy dołączony do zestawu SDK ma również kilka dobrych próbek kodu.

Nie ma potrzeby korzystania z Office Interop lub innego oprogramowania biurowego na serwerze - nowe formaty to 100% XML.

 14
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-03 20:38:01

Czy rozważałeś użycie .RTF jako alternatywa?

Obsługuje osadzanie obrazów i tabel, a także tekstu, otwiera się domyślnie za pomocą programu Microsoft Word i podczas gdy jego featureset jest bardziej ograniczony (liczyć wszelkie zaawansowane formatowanie) dla czegoś, co wygląda i czuje się i otwiera się jak dokument Word, to nie jest daleko.

Użytkownicy końcowi prawdopodobnie nie zauważą.

 10
Author: DavidWhitney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-14 14:43:18

Uznałem za najlepsze słowa, ponieważ nie każdy może otworzyć Office Open XML/*.pliki w formacie docx i Word interop i Word automation mogą być wadliwe. Aspose Words obsługuje większość typów plików dokumentów od programu Word 97 w górę.

Jest to komponent płatny, ale ma świetne wsparcie. Inną alternatywą, jak już zasugerowano, jest RTF.

 10
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-03 20:42:38

Do generowania dokumentów Word z automatyzacją Office w. NET, a konkretnie w C # lub VB.NET:

  1. Dodaj Microsoft.Biuro.Interop.Word assembly odniesienie do twojego projektu. Ścieżka to \ Visual Studio Tools for Office \ PIA \ Office11 \ Microsoft.Biuro.Interop.Słowo.dll .

  2. Postępuj zgodnie z przykładem kodu Microsoft znajdziesz tutaj: http://support.microsoft.com/kb/316384/en-us.

 7
Author: Marcello Belguardi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-03 20:34:31

Schmidty, jeśli chcesz wygenerować dokumenty Worda na serwerze WWW, potrzebujesz licencji dla każdego Klienta (nie tylko serwera www). Zobacz ten dział w pierwszym linku Rob napisał:

" oprócz problemów technicznych, należy również rozważyć kwestie licencyjne. Obecne wytyczne licencyjne uniemożliwiają stosowanie aplikacji Office na serwerze do obsługi żądań klientów, chyba że sami klienci mają licencjonowane kopie pakietu Office. Korzystanie z automatyzacji po stronie serwera udostępnianie funkcji pakietu Office nielicencjonowanym stacjom roboczym nie jest objęte Umową Licencyjną Użytkownika Końcowego (EULA)."

Jeśli spełniasz wymagania licencyjne, myślę, że będziesz musiał użyć COM Interop - aby być konkretnym, Office XP Primary Interop Assemblies .

 4
Author: Luke Girvin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-13 23:21:17

Sprawdź VSTO (Visual Studio Tools for Office). Jest to dość proste, aby utworzyć szablon Word, wstrzyknąć do niego wyspę danych xml, a następnie wysłać go do klienta. Gdy użytkownik otworzy dokument w programie Word, Word odczytuje xml i przekształca go w WordML i renderuje go. Będziesz chciał spojrzeć na klasę ServerDocument biblioteki VSTO. Z mojego doświadczenia wynika, że żadne dodatkowe licencje nie są wymagane.

 3
Author: DancesWithBamboo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-14 15:03:28

Miałem dobry sukces przy użyciu Syncfusion Backoffice DocIO, który obsługuje formaty doc i docx.

We wcześniejszych wydaniach nie obsługiwał wszystkiego w programie word, ale zgodnie z Twoją listą przetestowaliśmy go z tabelami i tekstem jako podejście do łączenia poczty i działało dobrze.

Nie jestem pewien co do importu obrazów. Na stronie blurb http://www.syncfusion.com/products/DocIO/Backoffice/features/default.aspx mówi

Blockquote Essential DocIO obsługuje wstawianie zarówno obrazów skalarnych, jak i wektorowych do dokumentu, w prawie wszystkich formatach. Bitmapy, gif, png i tiff to niektóre z popularnych obsługiwanych typów obrazów.

Więc warto rozważyć.

Jak już inni wspominali, możesz zbudować dokument RTF, istnieje kilka dobrych bibliotek RTF dla. Net, takich jak http://www.codeproject.com/KB/string/nrtftree.aspx

 3
Author: Jafin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-09 04:07:49

Zmierzyłem się z tym problemem i stworzyłem do tego małą bibliotekę. Został wykorzystany w kilku projektach, a potem postanowiłem go opublikować. Jest bezpłatny i bardzo prosty, ale jestem pewien, że pomoże Ci w tym zadaniu. Wywołanie Biblioteki Office Open XML, http://invoke.co.nz/products/docx.aspx .

 3
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-03 20:39:45

Napisałem serię postów na blogu na temat generowania dokumentu Open XML WordprocessingML . Moje podejście polega na tym, że tworzysz dokument szablonowy zawierający kontrolki zawartości, a w każdej kontrolce zawartości piszesz wyrażenie XPath, które określa sposób pobierania zawartości z dokumentu XML zawierającego dane, które napędzają proces generowania dokumentu. Kod jest wolny i jest licencjonowany na podstawie wzajemnej licencji Microsoft (Ms-RL) . W tym samym wpisie na blogu serii, badam również podejście, w którym piszesz kod C# w kontrolkach treści. Proces generowania dokumentu następnie przetwarza dokument szablonu i generuje program C#, który generuje żądane dokumenty. Zaletą tego podejścia jest możliwość wykorzystania dowolnego źródła danych jako źródła danych dla procesu generowania dokumentów. Kod ten jest również licencjonowany na podstawie wzajemnej licencji Microsoft.

 3
Author: Eric White,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-12 03:50:12

Obecnie robię dokładnie to.

Jeśli dokument nie jest zbyt duży, nie zawiera obrazów itp., to przechowuję go jako RTF z #MergeFields# w nim i po prostu zamieniam je na zawartość, wysyłając wynik do użytkownika jako RTF.

W przypadku większych dokumentów, w tym obrazów i dynamicznie wstawianych obrazów, początkowy dokument programu Word zapisuję jako pojedynczą stronę internetową *.plik MHT zawierający # MergeFields # again. Następnie robię to samo, co powyżej. Korzystając z tego, mogę łatwo Renderuj DataTable z kilkoma podstawowymi znacznikami tabeli Html i zamień jeden z #MergeFields# na całą tabelę.

Obrazy mogą być przechowywane na serwerze i Url osadzony w dokumencie zbyt.

Co ciekawe, nowe formaty plików Office 2007 są w rzeczywistości plikami zip - jeśli zmienisz nazwę rozszerzenia na .zip możesz je otworzyć i zobaczyć ich zawartość. Oznacza to, że powinieneś być w stanie przełączać zawartość, taką jak obrazy, przy użyciu prostej biblioteki C# zip.

 2
Author: littlecharva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 11:05:14

@ Dale Ragan: to będzie działać w formacie Office 2003 XML, ale to nie jest przenośne (jak, powiedzmy,.doc or .plików docx).

Aby je odczytać/zapisać, musisz użyć kontrolki ActiveX Word Object Library:

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

 1
Author: TheSmurf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-13 22:21:07

@ Danny Smurf: właściwie ten artykuł opisuje, co stanie się biurowym otwartym formatem XML, którym Rob odpowiedział. Zwrócę większą uwagę na linki, które na razie zamieszczam, aby upewnić się, że nie są przestarzałe. Właściwie przeszukałem WordML, czyli tak się wtedy nazywał.

Uważam, że format Office Open XML jest najlepszym rozwiązaniem.

 1
Author: Dale Ragan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-13 22:34:09

LibreOffice obsługuje również bezgłową interakcję poprzez API. Niestety nie ma jeszcze zbyt wielu informacji na temat tej funkcji.. :(

 1
Author: plaes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-14 09:56:50

Możesz również użyć programu Word document generator. Może być używany do wdrażania po stronie klienta lub serwera. Z opisu projektu:

Worddocumentgenerator to narzędzie do generowania dokumentów Worda z szablony wykorzystujące Visual Studio 2010 i Open XML 2.0 SDK. WordDocumentGenerator pomaga generować dokumenty Worda zarówno non-refresh-able jak również refresh-able na podstawie predefiniowanych szablonów korzystanie z minimalnych zmian kodu. Kontrolki zawartości są używane jako elementy zastępcze na generowanie dokumentów. Obsługuje Word 2007 i Word 2010.

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

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

 1
Author: Ricardo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-27 19:08:10

Inną alternatywą jest Windward Docgen (zastrzeżenie - jestem założycielem). Z Windward projektujesz szablon w programie Word, w tym obrazy, tabele, wykresy, wskaźniki i wszystko, co chcesz. Możesz ustawić tagi, w których wstawiane są dane ze źródła danych XML lub SQL (w tym funkcje takie jak pętle forEach, import, itp.). A następnie Wygeneruj raport do DOCX, PDF, HTML itp.

 0
Author: David Thielen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-06 22:37:33