将DataTable导出到dotx中的MS词表

我一直在试图将数据导出到Excel表,但现在我想导出数据表到Word表。

我有一个单词模板文件,其中包含我想用数据表填充该对象的Excelembedded对象。 这里的代码我一直用来导出自定义值到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文档中创build一个表格并将字段分配给每个单元格。 但是,通过这种方式,您必须修复表格中行数和列数的大小。

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

使用C#.NET

它是从代码dynamic创build表的最简单的方法。 但是,一旦编译了应用程序,就不能直接进行更改,而且在客户端运行应用程序时也很难进行debugging。

如何以编程方式创build表

使用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格式,并存储在文档的放置位置。 ( 如何将datatable导出为csv文件格式。 )

  2. 在文档中创build一个从csv文件中读取数据并创build一个表的macros。 ( 从csv添加表并填充数据到Word文档 )

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