关于《openxml word》 创建表格及添加样式,那些事

Posted threestars

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于《openxml word》 创建表格及添加样式,那些事相关的知识,希望对你有一定的参考价值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;

namespace AddTableToWord
{
public class Program
{
public static void Main(string[] args)
{
List<string[]> lstData = new List<string[]>() { new string[] { "1", "2", "3" }, new string[] { "3", "2", "1" } };
string[] headerArray = new string[] { "A", "B", "C" };
AddTable("Test.docx", lstData, headerArray);
}

/// <summary>
/// word里面添加table
/// </summary>
/// <param name="wordPath">word文件路径</param>
/// <param name="lstData">数据</param>
/// <param name="headerArray">表头</param>
public static void AddTable(string wordPath, List<string[]> lstData, string[] headerArray)
{
using (WordprocessingDocument doc = WordprocessingDocument.Open(wordPath, true))
{
TableGrid grid = new TableGrid();
int maxColumnNum = lstData.Select(x => x.Count()).Max();
for (int index = 0; index < maxColumnNum; index++)
{
grid.Append(new TableGrid());
}

// 设置表格边框
TableProperties tblProp = new TableProperties(
new TableBorders(
new TopBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 2 },
new BottomBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 2 },
new LeftBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 2 },
new RightBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 2 },
new InsideHorizontalBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 2 },
new InsideVerticalBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 2 }
)
);

Table table = new Table();
table.Append(tblProp);

// 添加表头,《一》简单模式
//TableRow headerRow = new TableRow();
//foreach (string headerStr in headerArray)
//{
//TableCell cell = new TableCell();
//cell.Append(new Paragraph(new Run(new Text(headerStr))));
//headerRow.Append(cell);
//}
//table.Append(headerRow);

//添加表头,《二》复杂样式,加入样式
TableRow headerRow = new TableRow();
foreach (string headerStr in headerArray)
{
TableCell cell = new TableCell();
var paragraphText = new Paragraph();

//垂直居中显示
var tcProperties = new TableCellProperties();
var tcvAligin = new TableCellVerticalAlignment { Val = TableVerticalAlignmentValues.Center };
tcProperties.Append(tcvAligin);
cell.AppendChild(tcProperties);
var Pproperties = new Paragraphproperties();
var jc = new Justification { Val = JustificationValues.Center };
Pproperties.AppendChild(jc);


//设置字体样式
RunProperties runproperties = new RunProperties();//属性
RunFonts fonts = new RunFonts() { EastAsia = "方正兰亭黑简" };//设置字体
FontSize size = new FontSize() { Val = "18" };//设置字体大小
DocumentFormat.OpenXml.Wordprocessing.Color color = new DocumentFormat.OpenXml.Wordprocessing.Color() { Val = "black" };//设置字体颜色

runproperties.Append(color);
runproperties.Append(size);
runproperties.Append(fonts);
//runproperties.Append(tcProperties);

Run run = new Run();
//run.Append(tcProperties);
//run.Append(Pproperties);
run.Append(runproperties);
run.Append(new Text(headerStr));
paragraphText.Append(run);
paragraphText.Append(Pproperties);

cell.AppendChild(paragraphText);
headerRow.Append(cell);
}
table.Append(headerRow);

 

// 添加数据

foreach (string[] rowArray in lstData)
{
TableRow row = new TableRow();
foreach (string strCell in rowArray)
{
TableCell cell = new TableCell();
cell.Append(new Paragraph(new Run(new Text(strCell))));
row.Append(cell);
}
table.Append(row);
}

doc.MainDocumentPart.Document.Body.Append(new Paragraph(new Run(table)));
}
}
}
}

以上是关于关于《openxml word》 创建表格及添加样式,那些事的主要内容,如果未能解决你的问题,请参考以下文章

如何使用openxml C#在word文档中添加形状?

使用 OpenXML SDK 2.0 将页眉和页脚添加到现有的空 word 文档

将多个word文档合并为一个Open Xml

使用 openxml 将标题添加到 docx

使用POI导出Word(含表格)的实现方式及操作Word的工具类

Java 在Word中添加表格嵌套表格