下載和編譯 Open XML SDK

咱們須要一些工具來開始 Open XML 的開發。git

開發工具

推薦的開發工具是 Visual Studio 社區版。github

開發工具:Visual Studio Community 2013shell

下載地址:http://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspxwindows

包含了 Visual Studio Professional 2013 所有功能,能夠在學習環境中、學術研究、參與開源項目中無償使用。工具

固然,若是你有 Visual Studio 的 2012 版,或者 2013 版也可使用。visual-studio

下載源代碼

GitHub 項目地址:https://github.com/officedev/open-xml-sdk學習

GitCafe 項目地址:https://gitcafe.com/msopentech_china/open-xml-sdk開發工具

在 GitCafe 的頁面上,右上角的下載圖標,能夠直接下載源碼,或者在它的下面是複製 Git 地址的按鈕,灰色的按鈕,不太明顯,你能夠直接經過 Git 來獲取源碼。ui

 

若是你已經使用 VS2013 ,那麼直接就可使用 Git 來獲取源碼了。this

若是你沒有使用 Visual Studio 社區版,也沒有使用 Git, 也能夠本身動手編譯 Open XML SDK.

在獲取的 Visual Studio 項目中包含預生成命令行,該命令行生成 PowerShell 腳本(和普通命令行生成腳本的方法基本相同),用於設置 AssemblyInfo.cs 版本字符串。要執行此預生成命令行,您必須按照前文所述的方法設置執行策略。若有多個 PowerShell 快捷方式,請確保使用正確的快捷方式進行 Visual Studio 安裝。

若是收到錯誤提示「The command "cd C:\Users\Eric\Documents\Open-Xml-Sdk\ powershell ./SetAssemblyVersionString.ps1" exited with code 1」,那麼您須要設置執行策略。您還能夠從 Visual Studio 中運行另外一個 PowerShell 腳本執行策略。要設置此執行策略:

  • 以管理員身份打開命令提示(非 PowerShell 控制檯)。
  • 輸入如下命令:

C:\windows\system32>c:\windows\syswow64\WindowsPowerShell\v1.0\powershell.exe -command set-executionpolicy unrestricted

這一段的工做就是爲了自動生成 AssemblyInfo.cs 這個文件,生成的結果以下:

// Copyright (c) Microsoft Open Technologies, Inc.  All rights reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
using System;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Resources;
using System.Security;

// General Information about an assembly is controlled through the following 
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("DocumentFormat.OpenXml")]
[assembly: AssemblyDescription("Open XML Format SDK 2.5")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft Open Technologies, Inc.")]
[assembly: AssemblyProduct("Open XML Format SDK 2.5")]
[assembly: AssemblyCopyright("© 2014 Microsoft Open Technologies, Inc.  Licensed under the Apache License, Version 2.0.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible 
// to COM components.  If you need to access a type in this assembly from 
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
[assembly: CLSCompliant(true)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("5439c83f-c709-4487-b979-ce607e81b63e")]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Revision and Build Numbers 
// by using the '*' as shown below:
[assembly: AssemblyVersion("2.5.5893.1380")]
[assembly: AssemblyFileVersion("2.5.5893.1380")]

[assembly: NeutralResourcesLanguageAttribute("en-US")]
[assembly: AllowPartiallyTrustedCallers]
[assembly: SecurityTransparent]

編譯完成以後,就能夠獲得一個名爲 DocumentFormat.OpenXml.dll 的程序集了。

使用 OpenXML SDK

生成 Word 文檔

在頁面 https://msdn.microsoft.com/zh-cn/library/office/gg278308.aspx 中,微軟提供了 Word 文件結構的一個簡單說明,並提供了一個簡單的示例來生成一個基本的 Word 文檔。咱們能夠修改爲以下的代碼,經過命令行接收兩個參數,第一個參數是 Word 文件的名稱,第二個參數是文件的內容。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using DocumentFormat.OpenXml.Spreadsheet;

namespace OpenXMLSDK_App
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = args[0];
            string msg = args[1];
            CreateWordDoc(path, msg);
        }

        public static void CreateWordDoc(string filepath, string msg)
        {
            using (WordprocessingDocument doc = WordprocessingDocument.Create(filepath, WordprocessingDocumentType.Document))
            {
                // Add a main document part. 
                MainDocumentPart mainPart = doc.AddMainDocumentPart();

                // Create the document structure and add some text.
                mainPart.Document = new Document();
                Body body = mainPart.Document.AppendChild(new Body());
                Paragraph para = body.AppendChild(new Paragraph());
                DocumentFormat.OpenXml.Wordprocessing.Run run = para.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Run());

                // String msg contains the text, "Hello, Word!"
                run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text(msg));
            }
        }
    }
}

咱們以下使用生成的程序。

.\OpenXMLSDK_App.exe hello.docx "Hello, world."

這樣將會生成一個名爲 hello.docx 的文件。生成出來的文件其實是一個 ZIP 文件,能夠將文件的擴展名修改成 .zip,打開以後結構以下。

在 word 文件夾中有一個 document.xml 文件,其中的內容以下所示:

<?xml version="1.0" encoding="utf-8"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <w:body>
    <w:p>
      <w:r>
        <w:t>Hello, world.</w:t>
      </w:r>
    </w:p>
  </w:body>
</w:document>

w 是 XML 的命名空間,document 表示主文檔部件的根元素,body 相似於 HTML 中的 body, 包含主文章的塊級別結構集合的容器,p 表示一個段落,r 表示一段連續的文本,t 一段文字。

生成 Excel 文檔

在頁面 https://msdn.microsoft.com/zh-cn/library/office/gg278316.aspx 中,微軟提供了 Excel 文檔的說明和示例,其中的 CreateSpreasheetWorkbook 靜態方法能夠直接粘貼到剛纔的類中。

public static void CreateSpreadsheetWorkbook(string filepath)
{
    // Create a spreadsheet document by supplying the filepath.
    // By default, AutoSave = true, Editable = true, and Type = xlsx.
    SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook);

    // Add a WorkbookPart to the document.
    WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
    workbookpart.Workbook = new Workbook();

    // Add a WorksheetPart to the WorkbookPart.
    WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
    worksheetPart.Worksheet = new Worksheet(new SheetData());

    // Add Sheets to the Workbook.
    Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());

    // Append a new worksheet and associate it with the workbook.
    Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "mySheet" };
    sheets.Append(sheet);

    workbookpart.Workbook.Save();

    // Close the document.
    spreadsheetDocument.Close();
}

寫一段程序調用這個方法,就會獲得一個 xlsx 文件,其中包含了一個 mySheet 的頁面。

生成的 XML 內容以下:

<?xml version="1.0" encoding="utf-8"?>
<x:workbook xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <x:sheets>
        <x:sheet name="mySheet" sheetId="1" r:id="Rddc7711f116045e5" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" />
    </x:sheets>
</x:workbook>

 程序很容易讀懂,咱們經過簡單的代碼就能夠生成 Word 或者 Excel 文件了。

相關文章
相關標籤/搜索