下面将展示如何使用Openxm向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)));
            }
        }
    }
}

执行呈现结果如下:

 

posted on 2014-09-17 23:08  FrankZC  阅读(3834)  评论(1编辑  收藏  举报