将数据表导出到 dotx 中的 MS 字表

本文关键字:中的 MS 字表 dotx 数据表 | 更新日期: 2023-09-27 17:57:13

我一直在尝试将数据表导出到 excel 工作表,但现在我想将数据表导出到 word 表中。

我有一个 Word 模板文件,其中包含我想使用数据表填充该对象的 Excel 嵌入对象。这里是我一直用来将自定义值导出到 Word 文件的代码。

Object oMissing = System.Reflection.Missing.Value;
Object oTemplatePath = "D:''Mujahid.dotx";
Application wordApp = new Application();
Document wordDoc = new Document();
wordDoc = wordApp.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);
foreach (Field myMergeField in wordDoc.Fields)
{
    Range rngFieldCode = myMergeField.Code;
    String fieldText = rngFieldCode.Text;
    // ONLY GETTING THE MAILMERGE FIELDS
    if (fieldText.StartsWith(" MERGEFIELD"))
    {
        // THE TEXT COMES IN THE FORMAT OF
        // MERGEFIELD  MyFieldName  ''* MERGEFORMAT
        // THIS HAS TO BE EDITED TO GET ONLY THE FIELDNAME "MyFieldName"
        Int32 endMerge = fieldText.IndexOf("''");
        Int32 fieldNameLength = fieldText.Length - endMerge;
        String fieldName = fieldText.Substring(11, endMerge - 11);
        // GIVES THE FIELDNAMES AS THE USER HAD ENTERED IN .dot FILE
        fieldName = fieldName.Trim();
        // **** FIELD REPLACEMENT IMPLEMENTATION GOES HERE ****//
        // THE PROGRAMMER CAN HAVE HIS OWN IMPLEMENTATIONS HERE
        if (fieldName == "SaleID")
        {
            myMergeField.Select();
            wordApp.Selection.TypeText("12345667890");
        }
        else if (fieldName == "date")
        {
            myMergeField.Select();
            wordApp.Selection.TypeText(DateTime.Today.ToShortDateString());
        }
        else if (fieldName == "CustName")
        {
            myMergeField.Select();
            wordApp.Selection.TypeText("Mujahid Niaz");
        }
        else if (fieldName == "CustAddress")
        {
            myMergeField.Select();
            wordApp.Selection.TypeText("House No 113 Street 8B Bilal Colony Shamasabad Rawalpindi");
        }
        else if (fieldName == "CustContact")
        {
            myMergeField.Select();
            wordApp.Selection.TypeText("03137203842");
        }
    }
}
SqlConnection conn= new SqlConnection(@"Data Source=(localdb)'Projects;Initial Catalog=SpareParts;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False");
conn.Open();
SqlDataAdapter adp = new SqlDataAdapter("Select* from Items", conn);
DataSet ds = new DataSet();
adp.Fill(ds);
CreateWordTableWithDataTable(ds.Tables[0]);
wordDoc.Merge("D:''M.xlsx");
wordDoc.SaveAs("myfile.doc");
wordApp.Documents.Open("myFile.doc");

将数据表导出到 dotx 中的 MS 字表

您可以使用很少

的方法来执行此操作。最简单的方法是在word文档中创建一个表格,并为每个单元格分配字段。但是,通过这种方式,您必须固定表中行数和列数的大小。

您还可以使用另外两种方便的方法。

使用 C#.NET

这是从代码动态创建表的最简单方法。但是,一旦应用程序被编译,它就不能直接更改,而且当应用程序在客户端运行时也很难调试。

如何以编程方式创建表

使用VBA

  This method is little bit hard and complex but, once you done it you can easily manage the document at client side without re-compiling your C# application. 

  1. C# 应用程序中记下将数据导出为 csv 格式并存储在放置文档的位置的代码。(如何将数据表导出为 csv 文件格式。

  2. 在文档中创建一个宏,用于从 csv 文件读取数据并创建表。(添加表格并从 csv 向 Word 文档填充数据。

  3. 最后一步是从 C# 应用程序执行宏。(如何通过C#代码执行VBA宏)