web-dev-qa-db-ja.com

Microsoft.Office.Interop.Wordで.docxドキュメントを作成するにはどうすればよいですか?

リストからMicrosoft.Office.Interop.Wordを使用して.docxドキュメントを作成するにはどうすればよいですか?または最良の方法はdocx.dllを追加することですか?

http://www.c-sharpcorner.com/UploadFile/scottlysle/using-the-docx-dll-to-programmatically-create-Word-documents/

更新。私の最初の質問は少し間違っているかもしれません。 Microsoft.Office.Interop.WordとDocX.dllの違いは何ですか?どちらの場合も、.docxドキュメントを作成して開くためにMicrosft Wordが必要ですか?

10
novicegis

インストール後 OpenXML SDKDocumentFormat.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")))));
            }
        }
    }
}

また、生産性向上ツール(同じリンク)を使用して、ドキュメントからコードを生成することもできます。 SDKAPIの操作方法を理解するのに役立ちます。

相互運用機能でも同じことができます。

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相互運用機能について非常に便利な点は次のとおりです。 Excel相互運用機能オブジェクトを適切にクリーンアップするにはどうすればよいですか?

18

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);

            }

        }

参照してください Cシャープコーナー

0
Amol Khandagale

Office 2016相互運用オブジェクトにアクセスする方法がわからない場合は、リンク( https://social.msdn.Microsoft.com/Forums/vstudio/en-US/55fe7d16-998b-4c43-9746-45ff35310158/office-2016-interop-assemblies?forum = exceldev )が役に立ちます。

この後、@ EvgenyTimoshenkoの例を試すことができます。

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);
            }
        }
    }
}
0
Salih KARAHAN