&tag(Office, SDK, CSharp, OpenXMLSDK);
*目次 [#qdd25a10]
#contents
*参考情報 [#od494902]
.NetFrameworkを使ってdocxファイルなどを作成するSDK。
-[[ダウンロード詳細 Open XML SDK 2.0 for Microsoft Office:http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=C6E744E5-36E9-45F5-8D8C-331DF206E0D0&displaylang=ja]]
-[[Download details: Office 2010 Sample: Open XML SDK 2.0 Code Snippets for Visual Studio 2010:http://www.microsoft.com/downloads/en/details.aspx?familyid=78BEA298-A3F9-44CF-BDE0-B4F30DC986DF&displaylang=en]]
-[[10 行でズバリ!! [C#] Office - Open XML ドキュメントの作成:http://code.msdn.microsoft.com/10-C-Office-Open-XML-06c1c58d/]]…サンプルコード。
-[[方法 : Office オープン XML 形式のドキュメントを操作する:http://msdn.microsoft.com/ja-jp/library/aa982683(v=office.12).aspx]]
-[[技術詳解: C#で.docx形式のWord文書を作る(Open XML SDK):http://pcnetbeginners.seesaa.net/article/172537863.html]]
-[[OpenXMLSDK ProductivityTool]]
-[[Open XML WordprocessingML ドキュメントのテキストについて習得する:http://msdn.microsoft.com/ja-jp/library/office/ff686712(v=office.14).aspx#Mastering_Understanding]]
-[[セルが縦方向に結合された Open XML WordprocessingML の表を作成する:http://msdn.microsoft.com/ja-jp/library/office/ff951689.aspx]]
-[[OpenXMLWordProcessingML]]
-[[Points, inches and Emus: Measuring units in Office Open XML « Struggles by Lars C.:http://startbigthinksmall.wordpress.com/2010/01/04/points-inches-and-emus-measuring-units-in-office-open-xml/]]
-[[Open XML SDK 2.0 を使用して Word 2010 文書に表を追加する:http://msdn.microsoft.com/ja-jp/library/gg490656.aspx]]
*インストール [#w81feab4]
-[[ダウンロード詳細 Open XML SDK 2.0 for Microsoft Office:http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=C6E744E5-36E9-45F5-8D8C-331DF206E0D0&displaylang=ja]]から、OpenXMLSDKv2.msi、OpenXMLSDKTool.msiをダウンロードして順にインストールする。

*関連ページ [#o15bb91f]
-[[./Word]]
-[[./Excel]]

*docxファイルの構造 [#ze202724]
-docxファイルはzipファイルなので、docxファイルの拡張子をzipに変更すると展開することができる。
-内部はパーツにわかれたxmlファイルの集合。
-全体をプログラムで生成したり既存docxファイルの一部分を書き換えたりすることができる。

*単純なdocxファイルの生成 [#td5860f5]
-VisualStudio2010でコンソールアプリを新規作成する。
-[参照の追加]ダイアログの参照タブで C:\Program Files (x86)\Open XML SDK\V2.0\lib フォルダの DocumentFormat.OpenXml.dll を追加する。
-Main.csに次のコードを記述する。
#pre{{
namespace OpenXMLDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var package = WordprocessingDocument.Create(
                "test.docx", WordprocessingDocumentType.Document))
            {
                MainDocumentPart mainDocumentPart1 = package.AddMainDocumentPart();
                Document document1 = new Document();
                Body body1 = new Body();
                Paragraph paragraph1 = new Paragraph();

                Run run1 = new Run();
                run1.Append(new Text() { Text = "a+b=c" });
                paragraph1.Append(run1);
                body1.Append(paragraph1);
                document1.Append(body1);
                mainDocumentPart1.Document = document1;
            }
        }
    }
}
}}
-実行すると"test.docx"が作成される。
*複雑なdocxの生成 [#n51fecbc]
-Open XML SDK 2.0 Productivity Toolを実行し、[ドキュメントエクスプローラー]ペインにdocxファイルをドロップすると構造を表示してくれる。ツールバーの[コードの反映]をクリックすると、docxを生成するのに必要なプログラムコードが表示される。
-同ツールでSDKのドキュメントも表示できる。
-これらを駆使してwordファイルを作成する。

*パーツの置換 [#dd819989]
-一からdocxファイルを生成するのではなく、既存docxを置換する方法もある。
-[[方法 : Office オープン XML 形式のドキュメントを操作する:http://msdn.microsoft.com/ja-jp/library/aa982683(v=office.12).aspx]]に、"Office オープン XML 形式のドキュメントをプログラムで操作する"という項目があり、これが参考になる。
-上記記事のプログラム。docxファイルをPackageで操作し、docx中のstyles.xmlを新しいstyles.xmlで置き換えている。
#pre{{
    class Program
    {
        private static String stylePath = @"d:\WordOpenXMLFormatSample\NewStylePart\styles.xml";
        private static String packagePath = @"d:\WordOpenXMLFormatSample\SampleWordDocument.docx.zip";

        private static void CopyStream(Stream source, Stream target)
        {
            const int bufSize = 0x1000;
            // const int bufSize = 1024;
            byte[] buf = new byte[bufSize];
            int bytesRead = 0;
            while ((bytesRead = source.Read(buf, 0, bufSize)) > 0)
            {
                target.Write(buf, 0, (int)bytesRead);
            }
            source.Close();
            target.Close();
        }


        static void SwapStylePart(String packagePath, String stylePath)
        {
            using (Package package = Package.Open(packagePath, FileMode.Open, FileAccess.ReadWrite))
            {
                Uri uriPartTarget = new Uri("/word/styles.xml", UriKind.Relative);
                package.DeletePart(uriPartTarget);
                PackagePart packagePartReplacement = package.CreatePart(uriPartTarget, "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml");
                using (FileStream fileStream = new FileStream(stylePath, FileMode.Open,
                    FileAccess.Read))
                {
                    // Load the new styles.xml using a stream.
                    CopyStream(fileStream, packagePartReplacement.GetStream());
                }
            }

        }

        static void Main(string[] args)
        {
            SwapStylePart(packagePath, stylePath);
        }
    }
}}


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS