gpt4 book ai didi

c# - 将 DataTable 导出到 dotx 中的 MS word 表

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:43 26 4
gpt4 key购买 nike

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

我有一个包含 excel 嵌入对象的 word 模板文件,我想使用数据表填充该对象。这是我一直用来将自定义值导出到 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");

最佳答案

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

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

使用 C#.NET

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

How to create table programatically

使用 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 格式并存储在文档所在位置的代码。 ( How to export datatable into csv file format. )

  2. 在您的文档中创建一个从 csv 文件读取数据并创建表格的宏。 ( Add Table and fill data to the Word document from the csv. )

  3. 最后一步是从 C# 应用程序执行宏。 ( How to execute VBA macro by C# code )

关于c# - 将 DataTable 导出到 dotx 中的 MS word 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30959784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com