OpenXml入門----給Word文檔添加表格


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

執行呈現結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM