如何從List中使用Microsoft.Office.Interop.Word創建.docx文檔?或者最好的方法是添加docx.dll?如何使用Microsoft.Office.Interop.Word創建.docx文檔?
更新。可能是我的第一個問題是litle不正確。 Microsoft.Office.Interop.Word和DocX.dll有什麼區別?在這兩種情況下,我是否需要使用Microsft Word來創建和打開.docx文檔?
如何從List中使用Microsoft.Office.Interop.Word創建.docx文檔?或者最好的方法是添加docx.dll?如何使用Microsoft.Office.Interop.Word創建.docx文檔?
更新。可能是我的第一個問題是litle不正確。 Microsoft.Office.Interop.Word和DocX.dll有什麼區別?在這兩種情況下,我是否需要使用Microsft Word來創建和打開.docx文檔?
安裝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")))));
}
}
}
}
您也可以使用生產力工具(同一個鏈接),以生成文件的代碼。它可以幫助理解如何使用SDK API。
你可以做同樣的互操作性:
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類型庫微軟。 Word對象庫。
以下是有關COM互操作非常有用的東西:How do I properly clean up Excel interop objects?
如果你想採用互操作方式,你還應該退出應用程序對象並釋放com對象。否則,最終會發生巨大的內存泄漏。這就是爲什麼http://alemiralles.blogspot.com.ar/2012/11/how-to-create-word-documents-from.html –
該鏈接不好。 – KFP
如果你不希望使用微軟的互操作辦公然後
我真的很喜歡這個
//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);
}
}
取參考 C-sharp corner
如果您不知道如何訪問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);
}
}
}
}
Interop.Word需要將Office安裝在機器上。 DocX不會,它直接篡改.docx文件的OpenXML內容。通常的選擇是Open XML SDK。對這個圖書館的長期支持通常會令人煩惱。查看問題列表以瞭解已知問題。 –