XLSfile.pas 的修訂版 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
之前使用 csv 的格式,一直覺得還不錯用,但最近資料量大了,才發現有 64K 的限制,於是看了大家努力作出的 XLSfile.pas
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=22849 本來想要把它改成 BCB 的,但在改寫的過程又遇到困難,主要是 Delphi 在單一 Unit 內可以任意使用別人的 private 及 protected 屬性,如果要快速轉換,變成要將大部分的 method 及 property 都變成 public,另外還有 Set 的 Default 值在 Delphi 用 [] 即可: procedure CellStr(vCol,vRow:word;aValue:String;vAtribut:TSetOfAtribut=[]); 但是在 BCB 中,不知道該用什麼,變成,所有的 CellXXX 都要再作一份沒有設定 Atribut 的... 實在是有點麻煩 於是決定直接修改 >
另外,加入了自己常用的 ><>< src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=6939849&CC=155211"> C及指標教學,計算機概論,資訊管理導論...
http://coolsite.to/dllee | | 介紹Shells,LiteStep,GeoShell....
http://coolsite.to/ushells | |
C及指標教學,計算機概論,資訊管理導論... http://coolsite.to/dllee | 介紹Shells,LiteStep,GeoShell.... http://coolsite.to/ushells |
引言: 給站長天使大人: 為什麼小弟所 post 出的分享或發表文章都不會出現 針對這一篇【分享】文章,您可以如下回應 針對這一篇【發表】文章,您可以如下回應 還是說這樣的選項是自己看不見的呢? 我的系統是 Win98,IE5.00.2614.3500, 有使用類似 KKman 的 Scope (http://cyberian.tripod.com) 沒空更新的網頁...1.因為是自己發表的【分享】【發表】..文章,自己是無法對自己推薦給分的. 2.若是自己發表的【問題】,可以對答題者給分 3.還有KKMAN是完全與IE相容的. ~~~Delphi K.Top討論區站長~~~
C及指標教學,計算機概論,資訊管理導論... http://coolsite.to/dllee 介紹Shells,LiteStep,GeoShell.... http://coolsite.to/ushells
引言: 1.因為是自己發表的【分享】【發表】..文章,自己是無法對自己推薦給分的. 2.若是自己發表的【問題】,可以對答題者給分 3.還有KKMAN是完全與IE相容的. ~~~Delphi K.Top討論區站長~~~了解了 在修改這個 ><>< src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=6939849&CC=155211">
引言: 在修改這個 Unit 後的心得是... 如果有空,還是要多多學學 Delphi 的語法,因為真的是比較「自由」,而且,作出來的 Unit 不但 Delphi 能用,在 BCB 也是一樣好用。 另外還更正之前所說的 csv 64K 的限制... 其實是如同 XLSfile.pas 的限制,有 64K Row 的限制才對。 不過,用 XLSfile.pas 還是比 csv 好,因為可以設定每個欄位的格式。 每次由 Excel 自行判斷時,總是將 000 001 002 ... 之類的編號轉為 0 1 2 ... 使用 XLSfile.pas 就能定出每格都是「字串」,請 Excel 不要自作聰明將它們轉成「數字」。使用XLSfile.pas匯出資料,可以成功且方便的匯出.xls!! 可是,所匯出的資料,不知是否因為資料還透過delphi資料型態(word,string)之暫存等原因,所以對於為unicode的文字則無法順利直接匯出,會變成 "?" 呢??!!
引言: 不好意思請問一下... 因為小弟還沒學過 Delphi 但是想用一下這個功能 我在 BCB5 的 Project 直接 Add XLSFile.pas 然後在我作的一個 Form 裡面 StrinGrid 呼叫 StringGridToXLS(strGrid, "C:\testxls.xls"); 我不知道該怎麼使用才正確...< >可否指點一下哩...< >如果您的 TStringGrid 就叫作 strGrid ,則叫用 StringGridToXLS(strGrid, "C:\\testxls.xls"); 即可。在 C/C++ 中要產生 '\' 可是要用 '\\' 才行。 沒空更新的網頁...
C及指標教學,計算機概論,資訊管理導論... http://coolsite.to/dllee | 介紹Shells,LiteStep,GeoShell.... http://coolsite.to/ushells |
引言: 使用XLSfile.pas匯出資料,可以成功且方便的匯出.xls!! 可是,所匯出的資料,不知是否因為資料還透過delphi資料型態(word,string)之暫存等原因,所以對於為unicode的文字則無法順利直接匯出,會變成 "?" 呢??!!對於 UniCode 我是不太了解啦,因為有 Source ,如果可以的話,您可以試著將 XLSfile.pas 中的 String 改成 WideString 試試看。 沒空更新的網頁...
C及指標教學,計算機概論,資訊管理導論... http://coolsite.to/dllee | 介紹Shells,LiteStep,GeoShell.... http://coolsite.to/ushells |
引言: XSLfile 寫的真的不錯! 但 小弟來遇到一到問題! 就是轉出的檔案可以正常在EXCEL讀出來! 但若以openoffice 開時就讀不出來了! 可以先以EXCEL開後再存檔(不做異動) openoffice就可正常開啟了! 好奇怪??? 好像是檔頭少了識別字串的樣子! 不知各位先進有遇過這樣問題嗎??1. XSLFile用的是舊版的Excel, 才有這樣問題, 包括上面所說Unicode也是同樣 2. 領航天使貼了較完整的Excel Formate, 我可能找時間擴充一下改為BIFF8格式, 同時如果忽略Excel太複雜的format, 只考慮Table型態, 應可同時讀寫 3. dllee所說, delphi可任意讀寫private是不正確的, 只有protected可以.
TXLSWriter = class(Tobject) private fStream:TMemoryStream; FileName:String; maxCols,maxRows:Word; procedure WriteWord(w:word); procedure WriteBOF; procedure WriteEOF; procedure WriteDimension; procedure CellWord(vCol,vRow:word;aValue:word;vAtribut:TSetOfAtribut=[]); procedure CellDouble(vCol,vRow:word;aValue:double;vAtribut:TSetOfAtribut=[]); procedure CellStr(vCol,vRow:word;aValue:String;vAtribut:TSetOfAtribut=[]); procedure WriteField(vCol,vRow:word;Field:TField); public constructor create(vFileName:string); destructor destroy;override; end;用 BCB5 compile 照過,也正常執行沒有問題! 我之前會說「Delphi 在單一 Unit 內可以任意使用別人的 private 及 protected 屬性」,是因為曾經試著轉過本例及其他 DELPHI code 所得到的教訓,如果 Delphi/BCB 共同開發,Delphi 的開發成員如果將屬性都設成了 private ,那他自己用的很爽,用 BCB 的就會很X,因為連繼承都無法使用!! 現在看到許多的 Delphi Code(Delphi Open Source 的比 BCB Open Source 的多蠻多的) 似乎很好用,但想轉 BCB 或修改(有時真的是看不太懂 ),就會遇到許多問題。 沒空更新的網頁...<><>>介紹>
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |