C#采用OpenXml给Word文档添加表格
作者:shichen2014 发布时间:2023-03-10 14:07:13
标签:C#,OpenXml,Word
本文实例讲述了C#采用OpenXml给Word文档添加表格的方法,是非常实用的操作技巧。分享给大家供大家参考。具体分析如下:
这里将展示如何使用Openxml向Word添加表格. 代码中表头和数据我们用的同一个TableRow来添加,其实可以通过TableHeader来,其实都一样。后面我们还会进一步给出如何设置单元格样式。表头那一行可以自己通过设置样式来控制
示例代码如下:
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);
// 添加表头. 其实有TableHeader对象的,小弟用不来.
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);
// 添加数据
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)));
}
}
}
}
执行呈现结果如下:
希望本文所述对大家的C#程序设计有所帮助


猜你喜欢
- Hook是一种思想,也就是将原来的事件,替换到我们自己的事件,方便我们做一些切入处理。目的是不修改原来的代码,同时也避免遗漏的N多类里面处理
- 在我的工作经验中,在C#语言本身的学习上花了大量的时间,积累了一些经验,一些是在学习和工作中遇到的问题和解决办法分享出来,希望大家也能有收获
- Filter过滤器和Listener * 详解Filter过滤器Filter的简介 对资源的访问进行过滤,相当于小区的保安,进去
- 最近要做一个java web项目,因为页面不是很多,所以就没有前后端分离,前后端写在一起,这时候就用到thymeleaf了,以下是不动脑式的
- 本文实例讲述了C#修改及重置电脑密码DirectoryEntry实现方法。分享给大家供大家参考。具体如下:C#修改电脑密码方法如下:///
- 前言关于RecyclerView的使用这里就不在赘述了,相信网上一搜一大把(本人之前的文章也有简单的使用介绍),这次我们讲的是Recycle
- 基础配置新建module:cloudalibaba-config-nacos-client3377pom文件版本号已经由父工程控制<?
- 1.MyBatis动态SQLMyBatis 的强大特性之一便是它的动态 SQL,即拼接SQL字符串。如果你有使用 JDBC 或其他类似框架的
- 在本博客中,可以找到一篇《c#实现输出的字符靠右对齐的示例》它有教大家怎样实现字符串输出进行左齐或者是右对齐。本篇的方法,超简单,是使用st
- 以前,使用github(git)结合 IntelliJ IDEA ,可以把自己本地的测试代码,使用github网站,添加到版本管理。这样就可
- Threadlocal有什么用:简单的说就是,一个ThreadLocal在一个线程中是共享的,在不同线程之间又是隔离的(每个线程都只能看到自
- 本文为大家分享了java开发环境配置教程,供大家参考,具体内容如下配置环境变量win 7配置(win 10配置在下面):1.安装完成后,右击
- 在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行
- DeferredResult的超时处理,采用委托机制,也就是在实例DeferredResult时给予一个超时时长(毫秒),同时在onTime
- 解析XML文件:在Android平台上可以使用SAX、DOM和Android附带的pull解析器解析XML文件;pull解析器提供了各种事件
- 随着JDK 14的发布(https://waylau.com/jdk-14-released/),各大Java IDE也开始支持JDK 14
- Gizmos是场景视图里的一个可视化调试工具。在做项目过程中。我们常常会用到它,比如:绘制一条射线等。Unity3D 4.2版本号截至。眼下
- 前言这是该工具的github地址:https://github.com/pingfangushi/screw一、引入pom.xml依赖<
- 目录前言一、如何实现?1、使用ObjectDataProvider2、定义转换器3、绑定容器二、使用示例1.代码2.显示效果前言wpf本身没
- 一、建数据库和表1.数据库demo1放一张user表SET FOREIGN_KEY_CHECKS=0;-- ----------------