ADOQuery匯出Excel如何一次匯出一列 |
答題得分者是:sryang
|
allenpower
一般會員 發表:13 回覆:13 積分:5 註冊:2007-01-06 發送簡訊給我 |
我是用ADOQuery+DataSource+DBGrid 從MSSQL 抓取資料
但匯出到EXCEL我只能做到一欄一欄匯 1如何做到一次匯一列呢 2另外該如何從ADOQuery抓取欄位名稱呢? 如下是我的程式 i=0; ADOQuery1->First(); while (i < ADOQuery1->RecordCount){ rSQL0=ADOQuery1->Fields->Fields[0]->AsInteger; rSQL1=ADOQuery1->Fields->Fields[1]->AsInteger; rSQL2=ADOQuery1->Fields->Fields[2]->AsInteger; rSQL3=ADOQuery1->Fields->Fields[3]->AsInteger; rSQL4=ADOQuery1->Fields->Fields[4]->AsInteger; rSQL5=ADOQuery1->Fields->Fields[5]->AsInteger; rSQL6=ADOQuery1->Fields->Fields[6]->AsString; rSQL7=ADOQuery1->Fields->Fields[7]->AsString; Range=Worksheet.OlePropertyGet("Cells",i 2,1); Range.OlePropertySet("Value",rSQL0); Range=Worksheet.OlePropertyGet("Cells",i 2,2); Range.OlePropertySet("Value",rSQL1); Range=Worksheet.OlePropertyGet("Cells",i 2,3); Range.OlePropertySet("Value",rSQL2); Range=Worksheet.OlePropertyGet("Cells",i 2,4); Range.OlePropertySet("Value",rSQL3); Range=Worksheet.OlePropertyGet("Cells",i 2,5); Range.OlePropertySet("Value",rSQL4); Range=Worksheet.OlePropertyGet("Cells",i 2,6); Range.OlePropertySet("Value",rSQL5); Range=Worksheet.OlePropertyGet("Cells",i 2,7); Range.OlePropertySet("Value",StringToOleStr(rSQL6)); Range=Worksheet.OlePropertyGet("Cells",i 2,8); Range.OlePropertySet("Value",StringToOleStr(rSQL7)); i=i 1; ADOQuery1->MoveBy(1); }
------
P |
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
|
allenpower
一般會員 發表:13 回覆:13 積分:5 註冊:2007-01-06 發送簡訊給我 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
|
allenpower
一般會員 發表:13 回覆:13 積分:5 註冊:2007-01-06 發送簡訊給我 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
用剪貼簿的話,就用 _WorkSheet.Paste 來處理,不過剪貼簿的內容要事先塞好,有些小麻煩
要一次匯整列的話,很簡單,用一個 Variant Array 放整列的值,然後用 _WorkSheet.Range[].value := 這個 Variant Array 就可以了 像這樣: ExcelApplication1:TExcelApplication procedure TForm4.Button7Click(Sender: TObject); var i: integer; buffer: Variant; worksheet: _Worksheet; begin ExcelApplication1.Connect; ExcelApplication1.Workbooks.Add('', $0804); worksheet := ExcelApplication1.ActiveSheet as _Worksheet; ADOConnection2.Connected := True; ADODataSet3.Open; i := 1; buffer := VarArrayCreate([0, 3], VarVariant); // 於第一列放欄位名稱 buffer[0] := ADODataSet3.FieldByName('FIELD_1').FieldName; buffer[1] := ADODataSet3.FieldByName('FIELD_2').FieldName; buffer[2] := ADODataSet3.FieldByName('FIELD_3').FieldName; buffer[3] := ADODataSet3.FieldByName('FIELD_4').FieldName; worksheet.Range[Format('A%d', [i]), Format('D%d', [i])].Value := buffer; Inc(i); while not ADODataSet3.Eof do begin // 準備一列的資料 // 用 =T("") 把文字資料包起來,以免都是數字的文字資料被 Excel 當成數字 buffer[0] := '=T("' ADODataSet3.FieldByName('FIELD_1').AsString '")'; buffer[1] := '=T("' ADODataSet3.FieldByName('FIELD_2').AsString '")'; buffer[2] := '=T("' ADODataSet3.FieldByName('FIELD_3').AsString '")'; buffer[3] := '=T("' ADODataSet3.FieldByName('FIELD_4').AsString '")'; worksheet.Range[Format('A%d', [i]), Format('D%d', [i])].Value := buffer; ADODataSet3.MoveBy(1); Inc(i); end; ADODataSet3.Close; ADOConnection2.Connected := False; worksheet := nil; ExcelApplication1.Visible[$0804] := true; ExcelApplication1.Disconnect; end;
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
|
allenpower
一般會員 發表:13 回覆:13 積分:5 註冊:2007-01-06 發送簡訊給我 |
第二個問題解決
我用如下方法抓到欄位名稱 for(rSQL=0;rSQL<8;rSQL ) { rSQLTitle=DBGrid1->Columns->Items[rSQL]->Title->Caption;//抓欄位名稱 Range=Worksheet.OlePropertyGet("Cells",1,rSQL 1);//該cell Range.OlePropertySet("Value",StringToOleStr(rSQLTitle));//丟欄位名 } 我發現我開始PO錯 我應該po在BCB 第一個問題用這方法好像BCB不能用
------
P |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |