[心得] 使用Excel-XML在網頁上
這篇主要是要回應cjoe大和其他對這個格式有疑問的大大
另外小弟才疏學淺,如果有錯歡迎指正
→
04/03 17:29,
04/03 17:29
→
04/03 17:30,
04/03 17:30
→
04/03 17:31,
04/03 17:31
→
04/03 17:31,
04/03 17:31
Excel-XML是Excel 2000以後就有的一種存檔格式,在Excel 2007裡他叫做XML試算表2003
在Office 2007裡的OpenXML就是基於這個,但是他是把多媒體等格式用ZIP打包再一起
相關的技術資訊可以看這篇MSDN文章:
http://msdn.microsoft.com/zh-tw/library/aa338205(en-us).aspx
因此Office 2007檔案格式還是可以分離出XML來,如果是Excel 2007,把檔案副檔名改成
zip之後,檔案在"xl"這個資料夾裡,不過要這樣做的人應該內容裡都沒有圖,所以存成
Office 2007預設格式還費工
那XML的優勢就是XML就是資料,他不像Excel存出來的HTML用一堆CSS把資料和呈現
打亂,讓編修人員想改也不是,不改也不是,XML的另外一個優勢就是Ajax和任何的
Server-side script都可以讀取,對於小型的應用來說,藉由Excel產生XML資料庫
反而比後台好用,當然,Excel XML不是沒有缺點,就Ajax來說,因為"\n"在
IE和其他瀏覽器裡不一樣,FX認為是Text node,但是IE則不會,而操作XML DOM
在FX和IE提供的method不一樣,也沒有server-side script方便好用(比如說C#)
不過應該是瑕不掩瑜
因為操作XML DOM應該是Ajax的基本功,就不需要講太多了,我還是回應一下上面的
問題好了
第一個是Excel裡都有型別,比如說數字,文字,然後比如說原本有一個欄位是
2035.00這樣,然後你的格式設成「文字」一定可以正常顯是,但是你刪掉了CSS之後
Excel就不知道原本的型別是什麼,他會自己去猜,所以就造成你原本問的格式跑掉的
問題
第二個是XML格式可以合併欄位嗎?請注意以下的語法
<Worksheet ss:Name="Sheet1">
<Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="1" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="16.5">
<Row>
<Cell ss:MergeAcross="2" ss:StyleID="s63"><Data
ss:Type="Number">123</Data></Cell>
</Row>
</Table>
當我們把A1:A3合併之後,他就會補上ss:MergeAcross的屬性給這個node,所以應該已經
解答你的問題了,然後我們要的也和屬性無關,就是最中間那個Textnode,"123"就好了XD
第三個是User轉存會不會有問題,應該不會有問題吧,你只要給他們講一下
(存成HTML也得講一下吧!),他們就會存了,你也可以套過來用
目前小弟有一個實作品就是一個估價單的網頁,網頁如下:
http://www.pavilion-gift.com.tw/report/excel.html
小弟原本想把程式分享到板上的,不過還想再把它改成電子型錄的型式在釋出
但是這支程式目前已經在正常運作了,這位民宿老闆沒有回報不正常的情況
所以應該對於一般使用者來說很方便,畢竟你做一個後台還得訓練一下,
Excel他們原本就會用,對小型方案來說不是很好嗎?
最後要不要安裝軟體呢?本來就不需要啊,不是說Office 2000之後就支援這種XML了嗎
如果你不放心,要使用者存成OpenXML(Office 2007),那就得裝Office 2007相容套件
你裝好使用者就可以用了,應該也沒有什麼感覺,對使用者來說他們還可以打開新版
Office檔案格式,搞不好還比較高興呢!
(但是存成XLSX之後你不能馬上用Ajax打開,你得自己手動把檔案抽離出來)
至於該怎麼操作Office XML的DOM,ㄟ...自己看那張網頁裡怎麼寫吧!
--
新的Blog歡迎大家多多參觀喔~
http://kelunyang.wordpress.com
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.156.65
※ 編輯: Kelunyang 來自: 220.132.156.65 (04/03 23:37)
推
04/04 09:46, , 1F
04/04 09:46, 1F
推
04/04 23:32, , 2F
04/04 23:32, 2F