关于Spire.doc绘制表格的问题

用C#依据spire.doc写了一段代码,要求是将几千行的datatable绘制表格放入doc里,判断写满一页后再重新生成一分继续绘制表格,关于满一页的判断如下:

img


但是这个判断生成的word有的满一页,有的没有满一页也跳入了该循环里,还有两页的也会跳进去:

img

img


猜测是这个页数判断方式不准确,求问是否有比较好的解决办法呢,期间尝试过用一页的行高和生成表格的行高做比较判断,效果也不是很理想

【以下回答由 GPT 生成】

我理解你的问题是在使用Spire.doc绘制表格时,无法准确地判断表格是否写满一页。以下是我提供的解决方案:

  1. 打开你的C#项目,并确保已经引入了Spire.Doc的命名空间:
using Spire.Doc;
using Spire.Doc.Documents;
  1. 在代码中,使用如下的方法来创建一个新的文档,并设置页面布局为“分节连续”,这样每个部分都可以单独控制:
Document document = new Document();
Section section = document.AddSection();
section.PageSetup.SectionStart = SectionStart.Continuous;
  1. 接着,创建一个表格,并将表格添加到文档中:
Table table = section.AddTable();
  1. 遍历你的DataTable,并将数据填充到表格中:
DataTable dataTable = new DataTable(); // 这里为你的DataTable
foreach (DataRow row in dataTable.Rows)
{
    TableRow tableRow = table.AddRow();
    for (int i = 0; i < dataTable.Columns.Count; i++)
    {
        TableCell tableCell = tableRow.Cells[i];
        tableCell.SetText(row[i].ToString());
    }
}
  1. 接下来,我们需要判断当前表格是否已满一页。我们可以通过判断最后一行的位置来确定是否需要添加新页面,并将剩余行添加到新的表格中:
if (section.LastChild.BottomPosition + table.Rows[table.Rows.Count - 1].Height > section.PageSetup.PageSize.Height - section.PageSetup.BottomMargin)
{
    section = document.AddSection();
    section.PageSetup.SectionStart = SectionStart.Continuous;
    table = section.AddTable();

    // 将剩余行添加到新的表格中
    for (int i = rowIndex; i < dataTable.Rows.Count; i++)
    {
        DataRow row = dataTable.Rows[i];
        TableRow tableRow = table.AddRow();
        for (int j = 0; j < dataTable.Columns.Count; j++)
        {
            TableCell tableCell = tableRow.Cells[j];
            tableCell.SetText(row[j].ToString());
        }
    }
}

注意,这里的rowIndex是一个全局变量,用于在创建新的表格时,指示需要从DataTable的第几行开始添加到新的表格中。

  1. 最后,保存文档到文件:
document.SaveToFile("路径/文件名.docx", FileFormat.Docx);

希望这个解决方案对你有帮助。如果你有任何进一步的问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^