線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2251
推到 Plurk!
推到 Facebook!

將GRID的資料填入EXCEL

答題得分者是:Fishman
h5rong
一般會員


發表:32
回覆:44
積分:15
註冊:2003-08-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-11 10:36:55 IP:61.221.xxx.xxx 未訂閱
之前有討論過將GRID的資料填入EXCEL,如下: >with QueryDM.qry_Produce do >begin //讀取Grid Display Label 放入Execl >for j := 0 to FieldCount - 1 do >MsExcelWorkSheet.Range[Chr(65 j) '1'].Value := >Fields[j].DisplayLabel; >first; >i := 2; >while not eof do >begin //讀取Grid Data Label 放入Execl >for j := 0 to FieldCount - 1 do >MsExcelWorkSheet.Range[Chr(65 j) IntToStr(i)].Value := >Fields[j].AsString; 請問由grid import 至 Excel,依上述寫法,是否grid有欄位數量的限制, 因我發現讀取 grid 之欄位數超過26欄時,出現-- "OLE eror 800A03EC" 之錯誤訊息.請問該如何解? 謝謝 .....
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-11 10:48:57 IP:210.65.xxx.xxx 未訂閱
Hi:    那錯誤訊息不是欄位的限制的問題,Excel 欄位限制為 256,而是 Excel 欄位名稱的問題,因 Excel 欄位為 A~Z,再來為 AA,AB,.....,我寫了一個 Function 來轉換數字與欄位,供你參考。
function ExcelCol(ACol : Word) : String;
VAR
    I1,I2 : INTEGER;
    S1,S2 : STRING;
begin
    IF (ACol > 0) and (ACol <= 256) THEN
        BEGIN
            I1 := TRUNC((ACol - 1) / 26);
            I2 := ((ACol - 1) MOD 26);
            IF I1 = 0 THEN
                S1 := ''
            ELSE
                S1 := CHR(I1   64);
            S2 := CHR(I2  65);
            ExcelCol := S1   S2;
        END
    ELSE
        ExcelCol := '';
end;
-------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
h5rong
一般會員


發表:32
回覆:44
積分:15
註冊:2003-08-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-11 11:24:51 IP:61.221.xxx.xxx 未訂閱
感謝您的答覆: 依據您的提示: > 是 Excel 欄位名稱的問題,因 Excel 欄位為 A~Z,再來為 AA,AB,....., 嘗試將Excel 欄位名稱 指令改成 for j := 1 to 30 do MsExcelWorkSheet.Range[Chr(65 j) '1'].Value :='測試' 只是很單純將欄位名稱,填入"測試",內容尚未填入,依然出現 "OLE eror 800A03EC" 之錯誤訊息, 但如果將 for j := 0 to 30 do 改成 for j := 1 to 25 do 一切又正常,不曉得,是那各環節出錯? 謝謝.....
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-11 11:41:32 IP:202.39.xxx.xxx 未訂閱
字元不對了: Chr(65 26) -> '[' Chr(65 27) -> '\' Chr(65 28) -> ']' Chr(65 29) -> '^' Chr(65 30) -> '-' --- Everything I say is a lie.
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-11 11:46:43 IP:210.65.xxx.xxx 未訂閱
Hi:    是的,當你是第 26 欄時,你必須將欄位轉換為 'AA' + '1',即 'AA1',因此必須使用該 Function 來做這件事
for j := 1 to 30 do
    MsExcelWorkSheet.Range[ExcelCol(J)   '1'].Value :='測試';
-------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
h5rong
一般會員


發表:32
回覆:44
積分:15
註冊:2003-08-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-11 12:19:15 IP:61.221.xxx.xxx 未訂閱
謝謝各位的提醒 !!
系統時間:2024-06-03 4:15:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!