用XML操作Excel檔案

來源:互聯網
上載者:User

用XML操作Excle檔案

在項目中有時候需要將資料輸出到Excle,辦法很多,比如說用ADO,但是這些都不能滿足效能上的要求,如果你將10W條資料用ADO方式寫入資料庫,速度是很慢的。而且還不能對產生的Excle設定格式。

一個偶然的機會,我發現將Excle檔儲存為XML(表格),然後用記事本開啟就會發現,整個檔案就是一個XML資料.對這個檔案進行操作還能得到複雜的效果,比如:合併儲存格,字型,顏色,甚至是為儲存格設定公式。

比如這樣的:

一些值得注意的地方:
一 .檔案頭部有以下資訊:
<?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"> <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"> <Author>xRoy</Author> <LastAuthor>xRoy</LastAuthor> <Created>2009-02-25T03:21:56Z</Created> <Company>SunnySec</Company> <Version>11.9999</Version> </DocumentProperties>
其中,一下幾個部分可以修改,其意思很簡單,懂點E文就知道了.
<Author>xRoy</Author> <LastAuthor>xRoy</LastAuthor> <Created>2009-02-25T03:21:56Z</Created> <Company>SunnySec</Company> <Version>11.9999</Version>
二 .接下來你將看到<Styles>部分,大概就像這樣:
<Styles> <Style ss:ID="Default" ss:Name="Normal"> <Alignment ss:Vertical="Center"/> <Borders/> <Font ss:FontName="宋體" x:CharSet="134" ss:Size="12"/> <Interior/> <NumberFormat/> <Protection/> </Style> <Style ss:ID="s21"> <Alignment ss:Vertical="Center"/> <Borders> <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/> <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/> <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/> <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/> </Borders> <Font ss:FontName="宋體" x:CharSet="134" ss:Size="12"/> <Interior ss:Color="#800080" ss:Pattern="Solid"/> <NumberFormat/> <Protection/> </Style> <Styles/>
  <Styles>部分定義了一個樣式的集合,每一種樣式都在<Style></Style>中描述,我的理解是,每一個樣式都是代表了一個儲存格的形態,注意是一個,能不能在一個儲存格上組合多個此處定義的樣式,還沒測試.在<Style>中:
  ss:ID        定義該樣式的名稱,要使用一個樣式的時候需要用到.
  <Borders><Borders/> 這個東西就說明目前的儲存格的四個邊的樣式(有沒有線條?線條多粗..)
  Font        定義儲存格上文字的樣式
  Interior: 指的是底色,ss:Color用於描述顏色,ss:Pattern 描述如何繪製
三 .資料部分
在這部分,你會看見類似這樣的內容:
<Worksheet ss:Name="Sheet1"> <Table ss:ExpandedColumnCount="9" ss:ExpandedRowCount="6" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"> <Column ss:AutoFitWidth="0" ss:Width="50.25"/> <Column ss:AutoFitWidth="0" ss:Width="92.25"/> <Column ss:AutoFitWidth="0" ss:Width="102.75"/> <Column ss:AutoFitWidth="0" ss:Width="80.25"/> <Column ss:AutoFitWidth="0" ss:Width="83.25"/> <Column ss:AutoFitWidth="0" ss:Width="59.25"/> <Column ss:AutoFitWidth="0" ss:Width="58.5"/> <Column ss:AutoFitWidth="0" ss:Width="133.5"/> <Column ss:AutoFitWidth="0" ss:Width="198.75"/>
說明:   
<Worksheet ss:Name="Sheet1">   
這裡說明有一個叫做Sheet1的表單
<Table ss:ExpandedColumnCount="9" ss:ExpandedRowCount="6" x:FullColumns="1"
   x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
對於這個表單的總體資料描述:
ss:ExpandedColumnCount="9"   資料表格有9列  
ss:ExpandedRowCount="6"      資料表格有6行
後面的就是設定一些預設屬性,如果你在後面具體的表格上沒有指定樣式,就會用到這些.
<Column ss:AutoFitWidth="0" ss:Width="50.25"/>
依次定義ss:ExpandedColumnCount個列的寬和高
接下來就是資料部分了,完整的一行大概是這樣的:
<Row ss:AutoFitHeight="0"> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">交易類型</Data></Cell> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">產品名稱</Data></Cell> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">收方單位</Data></Cell> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">產品開始序號</Data></Cell> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">產品結束序號</Data></Cell> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">數量</Data></Cell> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">操作員</Data></Cell> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">時間</Data></Cell> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">備忘</Data></Cell> </Row>
<Row ></Row>部分描述的這一行的預設屬性,它也可以指定樣式,比如<Row ss:AutoFitHeight="0" ss:StyleID="s22">,這樣的話,在這一行上面,任何沒有特殊指定樣式的表格都是這個預設樣式.
<Cell><Cell/>部分描述具體一個表格的樣式,必須使用前面你已經定義好的<Style>.
四 .資料尾部
就是這個樣子:
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> <Unsynced/> <Selected/> <Panes> <Pane> <Number>3</Number> <ActiveRow>6</ActiveRow> </Pane> </Panes> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet>
這些一般用處不大,沒有仔細研究.

其他:在程式中可以用TinyXML來操作XML,另外還有編碼問題要考慮,檔案儲存為*.xml,你發現即使安裝的Excle,這個問預設的開啟檔案可能也不是Excle,有個技巧,將你檔案的頭部插入2 個位元組,內容為[0xFF,0xFE].

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.