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();
关键修改点说明
- 判断是否为最后一个表格:用
ListDataT != ListDataTable.Count - 1避免在文档最后插入多余的空白页。 - 移动光标到表格末尾:通过
Range.Collapse(wdCollapseEnd)把光标定位到当前表格的后面,确保分页符插在正确位置。 - 插入分页符:使用
InsertBreak(wdPageBreak)生成分页符,让下一个表格自动从新页开始。
这样修改后,每个DataTable对应的表格就会单独占据一页了。
内容的提问来源于stack exchange,提问作者Sajjad Emami
相关产品推荐
相关产品推荐

