IRONSOFTWAREHOME
UZYWANIE IRONWORD

Jak stworzyc szablony formularzy do wypelnienia w C# przy uzyciu IronWord

Curtis Chau
Curtis Chau
Updated: 4 czerwca 2026

Od lat zespoły .NET, które musiały generować spersonalizowane dokumenty Word na skalę, miały dwie rzeczywiste opcje, z których żadna nie była dobra.

Pierwszą było zautomatyzowanie samego Microsoft Word przez COM interop. Działało to, dopóki nie działało. Interop Word jest powolny, kruchy, wymaga licencji Word na każdym komputerze i rozpada się, gdy tylko próbujesz go uruchomić w kontenerze Linux, funkcji Azure lub jakimkolwiek innym środowisku serwerowym, gdzie Word nie jest zainstalowany. Większość zespołów, które tego próbowały, kończyła na przepisaniu tego.

Drugą była niestandardowa linia przeszukiwania i zastępowania. Odczytaj .docx jako XML lub jako tekst, podmień symbole zastępcze na rzeczywiste wartości i zapisz wynik. To działało w prostych przypadkach, ale łamało się na rzeczywistych dokumentach Word, które używają skomplikowanych struktur pól wyglądających zupełnie inaczej niż proste tokeny {{FirstName}}, które programiści oczekują znaleźć.

IronWord teraz wspiera mail merge natywnie. Szablony zaprojektowane w Microsoft Word, używając tej samej składni pola scalania, jaką Word sam tworzy, są populowane bezpośrednio z kodu .NET bez potrzeby instalacji Word.

Co robi funkcja

Silnik mail merge obsługuje oba style pól scalania, które generuje Word:

  • Proste pola w formacie "FieldName", co otrzymujesz wpisując <<FieldName>> bezpośrednio w szablonie
  • Skonplikowane pola, wieloelementowa struktura XML, którą Word generuje przez Wstaw → Szybkie elementy → Pole

Szablony mogą zawierać symbole zastępcze wartości pojedynczej, które są zastępowane raz na dokument, oraz powtarzające się regiony ograniczone przez znaczniki "TableStart:Name" i "TableEnd:Name", które rozwijają się na jeden wiersz na rekord danych.

Ta druga część to miejsce, gdzie funkcja zasługuje na swoje miejsce. Regiony powtarzające się to sposób, w jaki jednowierszowy szablon w fakturze rozwija się na pięćdziesięciowierszową tabelę pozycji lub, jak jeden kontakt w etykiecie staje się pełną siatką Avery wypełnioną z bazy danych.

Personalizowane listy przewodnie z CRM

Większość zespołów korzysta z mail merge najpierw przez operacje sprzedaży. CRM przechowuje dane klientów; marketing lub operacje sprzedażowe muszą wysłać spersonalizowane listy przewodnie, pakiety powitalne lub powiadomienia o odnowieniu. Schemat jest prosty: jeden szablon, wiersz na klienta, jeden spersonalizowany dokument wyjściowy.

// Template: "Dear &laquo;FirstName&raquo;, thank you for your order of &laquo;Amount&raquo;..."
DataTable customers = LoadFromSalesforce();   // FirstName, LastName, Amount, ...

foreach (DataRow row in customers.Rows)
{
    var doc = new WordDocument("cover-letter-template.docx");
    doc.MailMerge.Execute(row);
    doc.SaveAs($"letters/{row["LastName"]}.docx");
}

Źródło danych to DataTable, co oznacza, że wszystko, co ładuje się do jednego (Salesforce, HubSpot, SQL Server, CSV, odpowiedź API) staje się źródłem scalania bez dodatkowego kodu adaptera.

Faktury z powtarzającymi się pozycjami

Fakturowanie to miejsce, gdzie zdolność regionu powtarzającego się zasługuje na utrzymanie. Szablon faktury ma nagłówek (nazwa klienta, ID zamówienia, daty), jeden wiersz w tabeli pozycji i stopkę (sumy). Gdy scalenie jest wykonywane, pojedynczy wiersz szablonu rozwija się na jeden wiersz na produkt, niezależnie od tego, czy zamówienie ma jedną pozycję zakupową czy pięćdziesiąt.

// Template:
//   Bill To: &laquo;CustomerName&raquo;  Order: &laquo;OrderId&raquo;
//   ┌──────────┬─────┬──────────┐
//   │ &laquo;TableStart:Items&raquo;&laquo;Product&raquo; │ &laquo;Qty&raquo; │ &laquo;LineTotal&raquo; &laquo;TableEnd:Items&raquo; │
//   └──────────┴─────┴──────────┘
//   Total: &laquo;Total&raquo;

var doc = new WordDocument("invoice-template.docx");

doc.MailMerge.ExecuteWithRegions(orderLineItems);  // one row per product
doc.MailMerge.Execute(new Dictionary<string, string>
{
    { "CustomerName", "Acme Industries" },
    { "OrderId",      "10444" },
    { "Total",        "$1,117.71" },
});

doc.SaveAs("invoice-10444.docx");

Ten sam schemat działa na oferty, zamówienia zakupu, wyciągi i każdy dokument, gdzie lista o zmiennej długości znajduje się w stałokształtowej stronie.

Arkusze etykiet Avery i koperty

Zespoły zajmujące się wysyłkami i operacjami generują etykiety i koperty z list kontaktowych, a układy (Avery 5160, 5161, 5163 i ich międzynarodowe odpowiedniki) to znormalizowane szablony, które istnieją od dziesięcioleci. IronWord bezpośrednio wypełnia je: każda komórka w siatce etykiet pobiera odpowiedni kontakt z jednego wywołania API.

// Template: a 3&times;10 Avery 5160 grid, each cell has &laquo;CONTACT_FULLNAME&raquo; / &laquo;CONTACT_ADDRESS&raquo;
var doc = new WordDocument("avery-5160.docx");

doc.MailMerge.Execute(new Dictionary<string, string>
{
    { "CONTACT_FULLNAME", "Jane Doe" },
    { "CONTACT_ADDRESS",  "100 Main Street, Boston, MA 02108" },
});

doc.SaveAs("labels-jane.docx");

Dla list kontaktów o zmiennej długości stosuje się wzorzec ExecuteWithRegions z przykładu faktury: definiuje się jedną komórkę jako jednostkę powtarzalną, a reszta arkusza wypełnia się automatycznie.

Raporty wieloregionowe

Najpotężniejszym zastosowaniem są raporty wieloregionowe. Podsumowanie kwartalne może zawierać sekcje 'Najważniejsi klienci' oraz 'Najważniejsze produkty', z których każda jest zależna od swojej własnej tabeli danych. Z zestawem danych zawierającym wiele tabel, merge rozwija oba regiony w jednym wywołaniu.

// Template:
//   Top Customers
//   &laquo;TableStart:Customers&raquo; &bull; &laquo;Name&raquo; | &laquo;City&raquo; | &laquo;Revenue&raquo; &laquo;TableEnd:Customers&raquo;
//   Top Products
//   &laquo;TableStart:Products&raquo;  &laquo;ProductName&raquo;: &laquo;Revenue&raquo;     &laquo;TableEnd:Products&raquo;

var ds = new DataSet();
ds.Tables.Add(topCustomers);   // TableName = "Customers"
ds.Tables.Add(topProducts);    // TableName = "Products"

var doc = new WordDocument("quarterly-report.docx");
doc.MailMerge.ExecuteWithRegions(ds);          // expands both regions
doc.MailMerge.Execute(new Dictionary<string, string>
{
    { "CompanyName", "Iron Software" },
    { "ReportDate",  "Q2 2026" },
});
doc.SaveAs("Q2-2026-report.docx");

Każda tabela danych w DataSet odpowiada nazwo regionowi "TableStart:..." i pola skalarne uzupełniają wartości nagłówków w tym samym kroku.

Dla zespołów z przepływem pracy dokumentów, na które czeka czysta implementacja .NET, Iron Suite łączy IronWord wraz z IronPDF, IronOCR, IronXL i IronBarcode w jednej licencji.

Rozpocznij darmowy okres próbny, nie jest wymagana karta kredytowa.

Dlaczego to działa

Kilka rzeczy odróżnia to podejście od alternatyw:

Natywna składnia Word. Szablony projektowane są w Microsoft Word, używając narzędzi do pól scalanych, które Word już dostarcza. Zapisz jako .docx, przekaż plik do IronWord, a scalanie zostanie wykonane. Bez własnego języka szablonów, bez warstwy tłumaczeniowej, bez oddzielnej krzywej uczenia dla zespołu projektującego dokumenty.

Zarówno proste, jak i złożone formaty pól. Word tworzy dwie różne struktury pól w zależności od tego, jak pole zostało wstawione. IronWord obsługuje oba, co oznacza, że istniejące szablony zaprojektowane przez różnych członków zespołu w różny sposób wszystkie działają bez modyfikacji.

Brak zewnętrznych zależności. Biblioteka działa w pełni na .NET. Brak instalacji Word, brak COM, brak licencji Office, brak kruchości interop. Ten sam kod, który działa na maszynie deweloperskiej z systemem Windows, działa identycznie w kontenerze Linux, funkcji Azure lub agencie budującym bezserwerowym.

Podsumowanie

Scalanie poczty było od dawna brakującym elementem w narzędziach do dokumentów .NET, a dotychczasowe obejścia nie zestarzały się dobrze. Natywne scalanie poczty w IronWord zamyka tę lukę modelem, który odzwierciedla składnię pola scalania Worda, wspiera zarówno proste wartości, jak i powtarzające się regiony, i działa bez bagażu wdrożeniowego, który historycznie towarzyszył automatyzacji dokumentów w .NET.

Dla zespołów generujących faktury, etykiety, listy, umowy i raporty na dużą skalę, jest to najczystsza ścieżka od pojedynczego szablonu do tysięcy spersonalizowanych dokumentów.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta