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

請問:如何將多個Query抓出的資料,存成Excel檔

尚未結案
gaui
一般會員


發表:25
回覆:36
積分:12
註冊:2004-06-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-29 16:26:18 IP:61.59.xxx.xxx 未訂閱
請教各位前輩們: 如何將多個Query抓出的資料,存成Excel檔, ex.Query1.Fields[i].AsString Query2.Fields[i].AsString Query3.Fields[i].AsString 的資料,要在同一行,緊接在後。
hagar
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-29 17:35:04 IP:202.39.xxx.xxx 未訂閱
參考 Excel 操作全集: http://delphi.ktop.com.tw/topic.php?topic_id=29495 發表人 - hagar 於 2004/09/29 17:40:26
gaui
一般會員


發表:25
回覆:36
積分:12
註冊:2004-06-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-30 08:51:27 IP:61.59.xxx.xxx 未訂閱
Query.Active := true;. Query.First; M := TStringList.Create; Line := Query.Fields[0].DisplayName; For i := 1 to Query.FieldCount -1 do Line := Line ',' Query.Fields[i].DisplayLabel; M.Add(Line); while not Query.Eof do begin Line := Query.Fields[0].AsString; For i := 1 to Query.FieldCount -1 do Line := Line ',' StringReplace(StringReplace (Query.Fields[i].AsString, #13#10,' ',[rfReplaceAll]),#9,' ',[rfReplaceAll]); M.Add(Line); Query.Next; 以上是我原本將Query匯成csv檔的做法,不過只能匯入一個Query的資料, 下一個Query的資料就會把前一個Query的資料給蓋過,不知道有沒有方法可以改善?
hagar
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-30 09:01:21 IP:202.39.xxx.xxx 未訂閱
begin
  Query.Active := true;.
  Query.First;
  M := TStringList.Create;
  // 這裡加一行試試
  M.LoadFromFile('之前的 csv 檔案');
  Line := Query.Fields[0].DisplayName;
  For i := 1 to Query.FieldCount -1 do
  Line := Line   ','   Query.Fields[i].DisplayLabel;
  M.Add(Line);
  while not Query.Eof do
  begin
    Line := Query.Fields[0].AsString;
    For i := 1 to Query.FieldCount -1 do
      Line := Line   ','   StringReplace(StringReplace (Query.Fields[i].AsString, #13#10,' ',[rfReplaceAll]),#9,' ',[rfReplaceAll]);
    M.Add(Line);
    Query.Next;
  // ..
end;
gaui
一般會員


發表:25
回覆:36
積分:12
註冊:2004-06-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-30 09:08:45 IP:61.59.xxx.xxx 未訂閱
不好意思! M.LoadFromFile('C:\GAUI\單號查詢.csv'); 加上這行,只是重覆將資料再寫入一次而已, 還是沒有辦法將第二個Query的資料寫到第一個Query資料的後面
gaui
一般會員


發表:25
回覆:36
積分:12
註冊:2004-06-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-30 09:11:15 IP:61.59.xxx.xxx 未訂閱
For i := 1 to MasterSQL3.FieldCount -1 do Line := Line ',' StringReplace(StringReplace(MasterSQL3.Fields[i].AsString, #13#10,' ',[rfReplaceAll]),#9,' ',[rfReplaceAll]); 如果將這段的StringReplace改掉,不知是否就可將下個Query的資料填進去
hagar
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-30 09:41:20 IP:202.39.xxx.xxx 未訂閱
看不出所謂的重覆寫入是指哪部份?
gaui
一般會員


發表:25
回覆:36
積分:12
註冊:2004-06-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-09-30 09:48:28 IP:61.59.xxx.xxx 未訂閱
不好意思! 重覆寫入是指 表頭和資料在csv檔中都出現了兩次
hagar
版主


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-09-30 10:20:58 IP:202.39.xxx.xxx 未訂閱
底下的例子是以逗號隔開, 若要以 tab 字元隔開, 則將逗號改成 #9
var
  i: integer;
  Line: string;
  sl: TStringList;
begin
  Query.Active := true;.
  Query.First;      sl := TStringList.Create;
  try
    if FileExists('C:\xx.csv') then // 先前存好的 csv 檔存在便載入
      sl.LoadFromFile('C:\xx.csv')
    else
    begin // 先前的 csv 檔不存在, 則儲存檔頭
      Line := Query.Fields[0].DisplayName;
      For i := 1 to Query.FieldCount -1 do
        Line := Line   ','   Query.Fields[i].DisplayLabel;
      sl.Add(Line);
    end;        while not Query.Eof do
    begin
      Line := Query.Fields[0].AsString;
      For i := 1 to Query.FieldCount -1 do
        Line := Line   ','   Query.Fields[i].AsString;
      sl.Add(Line);
      Query.Next;
    end;
  finally
    sl.Free;
  end;
end;
gaui
一般會員


發表:25
回覆:36
積分:12
註冊:2004-06-11

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