Office OpenXML-Excel(一)


適用於

2007 Microsoft Office 套件,Microsoft Office Excel 2007,Microsoft Office PowerPoint 2007,Microsoft Office Word 2007

OpenXML優勢

用戶可以在Office應用程序和企業系統之間使用XML和ZIP技術來交換數據。文檔是全局可以訪問的。並且,您還可以減少文件損壞的風險。

Office XML 格式的結構

   基於簡單的分部分的壓縮的ZIP文件格式。在新的Office Open XML格式的核心使用一些XML的引用架構和一個ZIP容器。每個文件都是由一些部件的集合組成的;這個集合定義了文檔。

文檔部件是存儲在容器文件當中,或者存儲在基於工業標准的ZIP格式的包中。許多部件都是用來描述應用程序數據,元數據,以及自定義數據的XML數據,它們都是存儲在容器文件當中的。

 新建一個Excel文件把后綴名該為為ZIP格式,然后解壓我們會看到如下結構;

 

_rels 目錄

這個目錄中包含一個.rels文件,它定義了包中的根關系。它是在解析整個包時首先要瀏覽的第一個文件;.rels 文件包含了基於起始部件(虛擬的起始部件)的關系.

使用OpenXML 導出Excel

首先在http://www.microsoft.com/en-us/download/details.aspx?id=5124 下載OpenXMLSDKv2和OpenXMLSDKTool;

然后在建立一個Excel表格用OpenXMLSDKTool 打開,如下圖所示

建立一個新項目,建立一個新類把左側的代碼拷貝到這個新類中;然后我們把想放入Excel中的數據傳遞到這個類中。

在這個新類中定義一個新的靜態方法用來生成表的行代碼如下:

View Code
 private static void GenerateTableRow(SheetData sheetData1, Persion person, uint row)
        {
            Row row2 = new Row() { RowIndex = (UInt32Value)row, Spans = new ListValue<StringValue>() { InnerText = "1:4" } };
            Cell cell5 = new Cell() { CellReference = "A" + row, StyleIndex = (UInt32Value)1U, DataType = CellValues.String, CellValue = new CellValue(person.Name) };
            Cell cell6 = new Cell() { CellReference = "B" + row, StyleIndex = (UInt32Value)1U, DataType = CellValues.Number, CellValue = new CellValue(person.Age.ToString()) };
            Cell cell7 = new Cell() { CellReference = "C" + row, StyleIndex = (UInt32Value)1U, DataType = CellValues.String, CellValue = new CellValue(person.Address) };
            Cell cell8 = new Cell() { CellReference = "D" + row, StyleIndex = (UInt32Value)1U, DataType = CellValues.String, CellValue = new CellValue(person.Company) };

            row2.Append(cell5);
            row2.Append(cell6);
            row2.Append(cell7);
            row2.Append(cell8);

            sheetData1.Append(row2);
        }

        private static void GenerateTableHeader(SheetData sheetData1)
        {
            Row row1 = new Row() { RowIndex = (UInt32Value)1U, Spans = new ListValue<StringValue>() { InnerText = "1:4" } };

            Cell cell1 = new Cell() { CellReference = "A1", StyleIndex = (UInt32Value)2U, DataType = CellValues.SharedString };
            CellValue cellValue1 = new CellValue();
            cellValue1.Text = "0";

            cell1.Append(cellValue1);

            Cell cell2 = new Cell() { CellReference = "B1", StyleIndex = (UInt32Value)2U, DataType = CellValues.SharedString };
            CellValue cellValue2 = new CellValue();
            cellValue2.Text = "1";

            cell2.Append(cellValue2);

            Cell cell3 = new Cell() { CellReference = "C1", StyleIndex = (UInt32Value)2U, DataType = CellValues.SharedString };
            CellValue cellValue3 = new CellValue();
            cellValue3.Text = "2";

            cell3.Append(cellValue3);

            Cell cell4 = new Cell() { CellReference = "D1", StyleIndex = (UInt32Value)2U, DataType = CellValues.SharedString };
            CellValue cellValue4 = new CellValue();
            cellValue4.Text = "3";

            cell4.Append(cellValue4);

            row1.Append(cell1);
            row1.Append(cell2);
            row1.Append(cell3);
            row1.Append(cell4);


            sheetData1.Append(row1);
        }

然后在主函數中通過調用這個新類把數據傳過去就能生成Excel。

具體代碼請下載參考:http://files.cnblogs.com/changminglong/OfficeOpenXMLTest.rar

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM