如何使用List中的Microsoft.Office.Interop.Word创建.docx文档?或者最好的方法是添加docx.dll?
更新。可能是我的第一个问题是litle不正确。 Microsoft.Office.Interop.Word和DocX.dll有什么区别?在这两种情况下,我是否需要使用Microsft Word来创建和打开.docx文档?
答案 0 :(得分:17)
安装OpenXML SDK后,您可以参考DocumentFormat.OpenXml
汇编:Add Reference
- > Assemblies
- >
Extensions
- > DocumentFormat.OpenXml
。您还需要参考WindowsBase
。
您将能够生成文档,例如,像这样:
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
namespace MyNamespace
{
class Program
{
static void Main(string[] args)
{
using (var document = WordprocessingDocument.Create(
"test.docx", WordprocessingDocumentType.Document))
{
document.AddMainDocumentPart();
document.MainDocumentPart.Document = new Document(
new Body(new Paragraph(new Run(new Text("some text")))));
}
}
}
}
您还可以使用Productivity Tool(相同的链接)从文档生成代码。它有助于了解如何使用SDK API。
您可以使用Interop执行相同的操作:
using System.Reflection;
using Microsoft.Office.Interop.Word;
using System.Runtime.InteropServices;
namespace Interop1
{
class Program
{
static void Main(string[] args)
{
Application application = null;
try
{
application = new Application();
var document = application.Documents.Add();
var paragraph = document.Paragraphs.Add();
paragraph.Range.Text = "some text";
string filename = GetFullName();
application.ActiveDocument.SaveAs(filename, WdSaveFormat.wdFormatDocument);
document.Close();
}
finally
{
if (application != null)
{
application.Quit();
Marshal.FinalReleaseComObject(application);
}
}
}
}
}
但在这种情况下,您应该引用COM类型库Microsoft。 Word对象库。
以下是关于COM互操作的非常有用的信息:How do I properly clean up Excel interop objects?
答案 1 :(得分:0)
如果您不想使用Microsoft互操作办公室,那么
我真的很喜欢这个
//Add reference DocX.dll
using Novacode;
// reference to the working document.
static DocX gDocument;
public void CreateWithOpenDoc(string _fileName, string _saveAs, int _LeadNo)
{
if (File.Exists(_fileName))
{
gDocument = DocX.Load(_fileName);
//--------------------- Make changes -------------------------------
// Strong-Type
Dictionary<string, string> changesList = GetChangesList(_LeadNo, dt.Rows[0]);
foreach (KeyValuePair<string, string> keyValue in changesList)
{
gDocument.ReplaceText(keyValue.Key.ToString().Trim(), keyValue.Value.ToString().Trim(), false);
}
//------------------------- End of make changes ---------------------
gDocument.SaveAs(_saveAs);
}
}
答案 2 :(得分:0)
如果您不知道如何访问office 2016互操作对象,则链接(https://social.msdn.microsoft.com/Forums/vstudio/en-US/55fe7d16-998b-4c43-9746-45ff35310158/office-2016-interop-assemblies?forum=exceldev)可以为您提供帮助。
在此之后,你可以试试@Evgeny Timoshenko的例子。
class Program
{
static void Main(string[] args)
{
Application application = null;
try
{
application = new Application();
var document = application.Documents.Add();
var paragraph = document.Paragraphs.Add();
paragraph.Range.Text = "some text";
string filename = GetFullName();
application.ActiveDocument.SaveAs(filename, WdSaveFormat.wdFormatDocument);
document.Close();
}
finally
{
if (application != null)
{
application.Quit();
Marshal.FinalReleaseComObject(application);
}
}
}
}