全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2529
推到 Plurk!
推到 Facebook!

EXCEL輸出問題

缺席
lasterliu
一般會員


發表:38
回覆:57
積分:19
註冊:2007-11-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-03-04 16:47:35 IP:139.223.xxx.xxx 訂閱

詢問各位大大,我在將檔案輸出成EXCEL檔時,碰到一個問題,就是我的標題欄位明明有74個,為什麼每次都只能輸出65個。
因此想詢問有沒有大大了解原因及解決方法 。

procedure TMWPR000F.BT_ChangeXLSClick(Sender: TObject);
Const
// 設定欄位寬度
Width : Array[1..74] of Real = (11.5,5,6.5,9,18.5,6.5,9,13.5,12,13,9,9,6,5,7,5,4.5,7,7,6.5,6,6,6,6.5,7,10.5,11.5,11.5,6,8.5,10,8.5,10,11.5,5,7.5,9,5,7,9,6,8,10,6,11,12,8.5,12,8.5,13.5,11.5,10,8,8.5,9,9,9.5,7.5,10,10,4.5,7.5,13,6,6,5,5,5,5,6,5,7,5,5,5);
var
MyExcel : Variant;
x,y : integer;
begin
inherited;
MyExcel := CreateOleOBject('Excel.Application');
MyExcel.WorkBooks.Add;
MyExcel.Visible := True;
y:=1;
for x:=1 to ADOSQL1.FieldCount do
begin
// 將標題設為第一欄內容
MyExcel.WorkBooks[1].WorkSheets[1].Cells[y,x] := ADOSQL1.Fields[x-1].DisplayName;
// 標題欄位選取
MyExcel.WorkBooks[1].WorkSheets[1].Cells[y,x].Select;
// 將標題欄位變粗體字
MyExcel.Selection.Font.Bold := true;
// 將標題欄位變色
//MyExcel.WorkBooks[1].WorkSheets[1].rows[1].columns[x].Interior.Color := $0C0A0B6;;
// 自動設定欄位寬度
//MyExcel.WorkBooks[1].WorkSheets[1].Columns[x].ColumnWidth := ADOSQL1.Fields[x-1].DisplayWidth;
// 手動設定欄位寬度
MyExcel.WorkBooks[1].WorkSheets[1].Columns[x].ColumnWidth := Width[x-1];
end;
inc(y);
while not ADOSQL1.Eof do
begin
for x:=1 to ADOSQL1.FieldCount do
MyExcel.WorkBooks[1].WorkSheets[1].Cells[y,x] := ADOSQL1.Fields[x-1].AsString;
inc(y);
ADOSQL1.Next;
end;
end;

以下為我出現的錯誤訊息(此錯誤訊息為我將迴圈的ADOSQL1.FieldCount 改成真實欄數 74 才會發生,不然他會順利跑完,但只會列出65個欄位)。
Project MWPR000.exe raised exception class EListError with message 'List index out of bounds(65)'.Process stopped.

麻煩各位大大替小弟解答一下~~

編輯記錄
lasterliu 重新編輯於 2008-03-04 16:56:28, 註解 無‧
lasterliu 重新編輯於 2008-03-04 17:03:51, 註解 無‧
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-03-04 16:54:30 IP:218.18.xxx.xxx 未訂閱
看不到你的附檔!
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-03-05 15:38:24 IP:61.67.xxx.xxx 未訂閱
1.你的真確定你的fieldcount 有75個嗎? 請再確認
2.fieldcount 是從 0開始計算, 而非是1
lasterliu
一般會員


發表:38
回覆:57
積分:19
註冊:2007-11-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-03-05 23:12:32 IP:61.220.xxx.xxx 訂閱
回P.D大大~~~
P.D大大,我的欄位我算過是74個,原本的程式我只取(Select * From A)欄位只有63個,程式就都OK。
接著我將程式改為(Select * From A,B)欄位變成74個,而結果卻只有第一個TABLE中的63個欄位加第二個TABLE的前兩個欄位,就不跑了。

因此想詢問各位大大,看是否知道為什麼?麻煩大家給小弟解答一下~~~︿︿謝謝
lasterliu
一般會員


發表:38
回覆:57
積分:19
註冊:2007-11-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-03-07 08:35:10 IP:139.223.xxx.xxx 訂閱
各位大大,到現在我還是不懂為什麼他只能輸出65個,它顯示的錯誤訊息,我也不能理解,
若有大大對問題有不清楚的地方,歡迎提出,小弟看到一定馬上回覆,希望各位大大幫忙一下了^^
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-03-07 10:32:42 IP:61.67.xxx.xxx 未訂閱
1.一般join兩個資料庫時我們通常不會使用 select * 方式操作(應該說根本不會), 我們寧可多花一分鐘把所有欄位打入, 例如 select A.FIELD1, A.FIEL2, B.FIEL1 
2.你的完整錯誤是否可以擷圖下來貼上來看, 因為有時候你認知中翻譯出來讓我們知道的訊息不一定是原文的意思!
===================引 用 lasterliu 文 章===================
回P.D大大~~~
P.D大大,我的欄位我算過是74個,原本的程式我只取(Select * From A)欄位只有63個,程式就都OK。
接著我將程式改為(Select * From A,B)欄位變成74個,而結果卻只有第一個TABLE中的63個欄位加第二個TABLE的前兩個欄位,就不跑了。

因此想詢問各位大大,看是否知道為什麼?麻煩大家給小弟解答一下~~~︿︿謝謝
系統時間:2024-05-05 10:56:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!