在C#中将DataTable插入到Word文档中

作为 .NET 开发人员,您必须经常处理 DataTable 对象。特别是当您需要从数据库或 XML/JSON 文件导入或导出数据时。在以编程方式生成文档时,您可能需要将 DataTable 对象中的数据直接插入到 Word 文档中的表中。对于这种情况,让我为您提供一个完美且最简单的解决方案,用于在 C# 中将 DataTable 中的数据插入到 Word 文档中。

用于在 Word DOC 中插入数据表的 C# 库 - 免费下载

要将数据从 DataTable 对象导入到 Word 文档中,我们将使用 Aspose.Words for .NET。它是一个功能丰富的库,可让您创建和处理 MS Word 文档。您可以下载其 DLL 或从 NuGet 安装它。

下载动态链接库

通过 NuGet 安装

PM> Install-Package Aspose.Words

C# 将 DataTable 插入 Word 文档 - 步骤

以下是我们从 DataTable 检索数据并将其插入到 Word 文档中所遵循的步骤。

  • 将数据库或数据文件中的数据加载到 DataTable 对象中。
  • 创建一个新的 Word 文档并向其中添加一个新表格。
  • 遍历 DataTable 中的行并将每一行插入 Word 的表中。

就是这样。

现在让我们看看如何将这些步骤转换为 C# 代码并将 DataTable 导入 Word 文档。

在 C# 中将 DataTable 中的数据插入 Word DOC

首先,我们将编写一个方法,该方法接受用于构建文档的 DocumentBuilder、具有数据的 DataTable 以及用于启用/禁用导入列标题的附加参数。此外,它返回 Table 对象。

以下是该方法的工作流程。

  • 创建一个新表并将其引用获取到 Table 对象中。
  • 根据DataTable中的列向表中插入列。
  • 如果第一行用于标题,则设置字体粗细。
  • 循环遍历 DataTable.Rows 集合中的每个 DataRow
  • 为每个值插入一个新单元格并相应地设置数据类型。
  • 返回表对象。

下面是在C#中将DataTable中的数据导入Word文档中的表格的方法的实现。

///<summary>
/// 将指定 DataTable 中的内容导入到新的 Aspose.Words Table 对象中。 
/// 表格插入到文档构建器的当前位置,并使用当前构建器的格式(如果已定义)。
///</summary>
public static Table ImportTableFromDataTable(DocumentBuilder builder, DataTable dataTable, bool importColumnHeadings)
{
    Table table = builder.StartTable();

    // 检查数据源中的列名称是否要包含在标题行中。
    if (importColumnHeadings)
    {
        // 在更改它们之前存储这些属性的原始值。
        bool boldValue = builder.Font.Bold;
        ParagraphAlignment paragraphAlignmentValue = builder.ParagraphFormat.Alignment;

        // 使用适当的属性格式化标题行。
        builder.Font.Bold = true;
        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;

        // 创建一个新行并将每列的名称插入表的第一行。
        foreach (DataColumn column in dataTable.Columns)
        {
            builder.InsertCell();
            builder.Writeln(column.ColumnName);
        }

        builder.EndRow();

        // 恢复原来的格式。
        builder.Font.Bold = boldValue;
        builder.ParagraphFormat.Alignment = paragraphAlignmentValue;
    }

    foreach (DataRow dataRow in dataTable.Rows)
    {
        foreach (object item in dataRow.ItemArray)
        {
            // 为每个对象插入一个新单元格。
            builder.InsertCell();

            switch (item.GetType().Name)
            {
                case "DateTime":
                    // 为日期和时间定义自定义格式。
                    DateTime dateTime = (DateTime)item;
                    builder.Write(dateTime.ToString("MMMM d, yyyy"));
                    break;
                default:
                    // 默认情况下,任何其他项目都将作为文本插入。
                    builder.Write(item.ToString());
                    break;
            }

        }

        // 插入当前记录中的所有数据后,我们可以结束表行。
        builder.EndRow();
    }

    // 我们已经完成从 DataTable 中插入所有数据,我们可以结束表。
    builder.EndTable();

    return table;
}

现在,是时候调用此方法并将 DataTable 插入到 Word 文档中了。

C#中将DataTable导入Word文档

以下是在 C# 中将 DataTable 中的数据导入 Word 文档的步骤。

  • 使用 Document 类创建一个新的 Word 文档(或加载现有文档)。
  • 从数据库/文件中读取数据到 DataTable 对象中。
  • 调用我们在上一节中编写的方法并获取返回的 Table。
  • 设置表格的格式。
  • 使用 Document.Save() 方法保存 Word 文件。

下面的代码示例演示如何在 C# 中将 DataTable 插入到 Word 文档中。

// 创建一个新文档。
Document doc = new Document();

// 我们可以定位我们想要插入表格的位置,还可以指定任何额外的格式
// 也应用到表上。
DocumentBuilder builder = new DocumentBuilder(doc);

// 我们希望旋转页面横向,因为我们希望有一个宽表。
doc.FirstSection.PageSetup.Orientation = Orientation.Landscape;

DataSet ds = new DataSet();
ds.ReadXml("Employees.xml");

// 从存储为 DataTable 的数据源中检索数据。
DataTable dataTable = ds.Tables[0];

// 从 DataTable 中包含的数据在文档中构建一个表。
Table table = ImportTableFromDataTable(builder, dataTable, true);

// 我们可以应用表格样式作为将格式应用于整个表格的一种非常快速的方法。
table.StyleIdentifier = StyleIdentifier.MediumList2Accent1;
table.StyleOptions = TableStyleOptions.FirstRow | TableStyleOptions.RowBands | TableStyleOptions.LastColumn;

// 对于我们的表格,我们要删除图像列的标题。
table.FirstRow.LastCell.RemoveAllChildren();

// 保存输出文档。
doc.Save("Table.docx");

C# DataTable 到 Word 导入程序库 - 获取免费许可证

您可以获得 免费临时许可证 以在没有评估限制的情况下使用 Aspose.Words for .NET。

结论

在本文中,您学习了如何使用 C# 将 DataTable 中的数据插入到 Word 文档中。您可以轻松地将代码示例集成到您的应用程序中,并使用 DataTable 将数据直接从数据库/XML/JSON 导入到 Word 文档中。

.NET Word 库 - 阅读更多

您可以访问 Aspose.Words for .NET 的文档来探索有关该库的更多信息。如果您有任何疑问,请随时通过我们的 论坛 告诉我们。

也可以看看