.NET Library for Creating Word Processing Documents
Read, Write, Manipulate & Convert Word files, Create Tables in DOCX via Open Source .NET API.
Open XML SDK is an open source API, developed by Microsoft's and distributed under Microsoft open source code of conduct to manipulate Word Processing Documents including DOCX, DOTX, DOCM, DOTM file formats
Using the API, you can add text, header, footer, endnotes, footnotes, styles, themes, and more. It allows you to generate high-performance word documents and extract data from them. The API support various .NET platforms including, .NET 3.5, .NET 4.0, .NET 4.6, and .NET Standard 1.3.
Getting Started with Open XML SDK
First of all, you require to have .NET Framework 3.5 or above. After that, please download the repository manually from GitHub or install it from NuGet.
Installation Open XML SDK from NuGet
Install-Package DocumentFormat.OpenXml
Manipulate DOCX file using C#
Open XML SDK allows .NET programmers to create as well as modify word processing from their own .NET applications. In order to modify an existing file, you can open an existing file and append changes like text, paragraphs, tables, and more.
Add Paragraph in DOCX - C#
// Open an existing word processing document
using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open("fileformat.docx", true))
{
Body body = wordprocessingDocument.MainDocumentPart.Document.Body;
// Add paragraph
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text("File Format Developer Guide"));
}
Create a Table in DOCX using C#
The API allows the developers to add a table in Word Processing documents. You can add a table, set table properties, set table grid, and column grid properties. Furthermore, you can manage table cells and rows using TableCell and TableRow classes respectively.
Create Table in DOCX - C#
// Open an existing word processing document
using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open("fileformat.docx", true))
{
Body body = wordprocessingDocument.MainDocumentPart.Document.Body;
// Create a table.
Table table = new Table();
// Set the style and width for the table.
TableProperties tableProperties = new TableProperties();
TableStyle tableStyle = new TableStyle() { Val = "TableGrid" };
// Make the table width 100% of the page width.
TableWidth tableWidth = new TableWidth() { Width = "5000", Type = TableWidthUnitValues.Pct };
// Apply
tableProperties.Append(tableStyle, tableWidth);
table.AppendChild(tableProperties);
// Add columns
TableGrid tableGrid = new TableGrid(new GridColumn(), new GridColumn(), new GridColumn());
table.AppendChild(tableGrid);
// Create 1 row to the table.
TableRow tableRow = new TableRow();
// Add a cell to each column in the row.
TableCell tableCell = new TableCell(new Paragraph(new Run(new Text("Column 1"))));
TableCell tableCell1 = new TableCell(new Paragraph(new Run(new Text("Column 2"))));
//Append data
tableRow.Append(tableCell, tableCell1);
// Add row to the table.
table.AppendChild(tableRow);
// Add the table to the document
body.AppendChild(table);
}
Headers & Footers in Word Processing Document
Proper organization of documents is very important and is the need of every organization. Headers and footers are the key parts of documents that can help to properly organize the word processing documents by placing some additional information such as relevant dates, topics, author's name, pictures, page numbers, and so on. It also supports the addition of multiple headers.
Manage Headers in Word Document
public static void ApplyHeader(WordprocessingDocument doc)
{
// Get the main document part.
MainDocumentPart mainDocPart = doc.MainDocumentPart;
HeaderPart headerPart1 = mainDocPart.AddNewPart("r97");
Header header1 = new Header();
Paragraph paragraph1 = new Paragraph(){ };
Run run1 = new Run();
Text text1 = new Text();
text1.Text = "Header stuff";
run1.Append(text1);
paragraph1.Append(run1);
header1.Append(paragraph1);
headerPart1.Header = header1;
SectionProperties sectionProperties1 = mainDocPart.Document.Body.Descendants().FirstOrDefault();
if (sectionProperties1 == null)
{
sectionProperties1 = new SectionProperties() { };
mainDocPart.Document.Body.Append(sectionProperties1);
}
HeaderReference headerReference1 = new HeaderReference() { Type = HeaderFooterValues.Default, Id = "r97" };
sectionProperties1.InsertAt(headerReference1,0);
}
Manage Footers in Word Document
public static void ApplyFooter(WordprocessingDocument doc)
{
// Get the main document part.
MainDocumentPart mainDocPart = doc.MainDocumentPart;
FooterPart footerPart1 = mainDocPart.AddNewPart("r98");
Footer footer1 = new Footer();
Paragraph paragraph1 = new Paragraph() { };
Run run1 = new Run();
Text text1 = new Text();
text1.Text = "Footer stuff";
run1.Append(text1);
paragraph1.Append(run1);
footer1.Append(paragraph1);
footerPart1.Footer = footer1;
SectionProperties sectionProperties1 = mainDocPart.Document.Body.Descendants().FirstOrDefault();
if (sectionProperties1 == null)
{
sectionProperties1 = new SectionProperties() { };
mainDocPart.Document.Body.Append(sectionProperties1);
}
FooterReference footerReference1 = new FooterReference() { Type = DocumentFormat.OpenXml.Wordprocessing.HeaderFooterValues.Default, Id = "r98" };
sectionProperties1.InsertAt(footerReference1, 0);
}