You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中导出DataTable至Word:如何为每个新表格单独分页?

让每个DataTable导出到Word时单独占一页的解决方案

要实现每个表格单独占据一页,核心就是在每个表格生成完成后插入分页符(最后一个表格可以省略,避免文档末尾多出空白页)。我来帮你修改现有代码:

修改思路

在循环生成每个表格的流程中,当完成当前表格的样式设置后,通过Word Interop的InsertBreak方法插入分页符,让下一个表格从新的一页开始。

修改后的完整代码

List<System.Data.DataTable> bbb = new List<System.Data.DataTable>();
System.Data.DataTable dt = new System.Data.DataTable();
dt.Columns.Add("Columns 1");
dt.Columns.Add("Columns 2");
dt.Columns.Add("Columns 3");
dt.Rows.Add("aaa", "aaa", "aaa");
dt.Rows.Add("bbb", "bbb", "bbb");
dt.Rows.Add("ccc", "ccc", "ccc");
System.Data.DataTable dt2 = new System.Data.DataTable();
dt2.Columns.Add("Columns 5");
dt2.Rows.Add("aaa5");
bbb.Add(dt);
bbb.Add(dt2);
List<System.Data.DataTable> ListDataTable = new List<System.Data.DataTable>();
ListDataTable = bbb;

object objEndOfDoc = "\\endofdoc";
Microsoft.Office.Interop.Word.Document Wdc = new Microsoft.Office.Interop.Word.Document();
Microsoft.Office.Interop.Word.Range WordRange = Wdc.Bookmarks.get_Item(ref objEndOfDoc).Range;
Microsoft.Office.Interop.Word.Table wordTable;

for (int ListDataT = 0; ListDataT < ListDataTable.Count; ListDataT++)
{
    int iRowCount = ListDataTable[ListDataT].Rows.Count;
    int iColCount = ListDataTable[ListDataT].Columns.Count;
    object objMissing = System.Reflection.Missing.Value;
    wordTable = Wdc.Tables.Add(WordRange, iRowCount, iColCount, ref objMissing, ref objMissing);

    int iTableRow = 1;
    int iTableCol = 1;
    // 写入表头
    for (int i = 0; i < ListDataTable[ListDataT].Columns.Count; i++)
    {
        wordTable.Cell(iTableRow, iTableCol).Range.Text = ListDataTable[ListDataT].Columns[i].ColumnName;
        iTableCol++;
    }
    iTableRow++;
    // 写入行数据
    for (int i = 0; i < ListDataTable[ListDataT].Rows.Count; i++)
    {
        iTableCol = 1;
        for (int j = 0; j < ListDataTable[ListDataT].Columns.Count; j++)
        {
            wordTable.Cell(iTableRow, iTableCol).Range.Text = ListDataTable[ListDataT].Rows[i][j].ToString();
            iTableCol++;
        }
        iTableRow++;
    }

    wordTable.Borders.Enable = 1;
    wordTable.set_Style("Light Grid - Accent 3");

    // --- 新增:插入分页符(除了最后一个表格)---
    if (ListDataT != ListDataTable.Count - 1)
    {
        // 将光标移到当前表格的末尾
        WordRange = wordTable.Range;
        WordRange.Collapse(Microsoft.Office.Interop.Word.WdCollapseDirection.wdCollapseEnd);
        // 插入分页符
        WordRange.InsertBreak(Microsoft.Office.Interop.Word.WdBreakType.wdPageBreak);
        // 更新WordRange为分页符之后的位置,用于下一个表格插入
        WordRange.Collapse(Microsoft.Office.Interop.Word.WdCollapseDirection.wdCollapseEnd);
    }
}

Wdc.SaveAs("c://test.docx");
Wdc.Close();

关键修改点说明

  1. 判断是否为最后一个表格:用ListDataT != ListDataTable.Count - 1避免在文档最后插入多余的空白页。
  2. 移动光标到表格末尾:通过Range.Collapse(wdCollapseEnd)把光标定位到当前表格的后面,确保分页符插在正确位置。
  3. 插入分页符:使用InsertBreak(wdPageBreak)生成分页符,让下一个表格自动从新页开始。

这样修改后,每个DataTable对应的表格就会单独占据一页了。

内容的提问来源于stack exchange,提问作者Sajjad Emami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:37:45