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

如何取出excel中的值

尚未結案
vengeance
一般會員


發表:9
回覆:11
積分:4
註冊:2004-05-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-30 00:07:41 IP:61.228.xxx.xxx 未訂閱
在上圖中,我想在程式中建一個一維的array,大小為1024 int a[1024]; a[D]=F; //D為D行的值,F為F行的值 ex:a[5]=9 , a[14]=21. 請問是否有方法抓excel中的值傳到BCB程式中? 謝謝 一年當五年用
------
一年當五年用
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-30 01:51:17 IP:221.169.xxx.xxx 未訂閱
vengeance:建議使用ADO元件;
Form1放一ADOConnection,ADOQuery。OpenDialog
範例:
    ADO1->Active=false;
    ADOConnection1->Connected=false;
    AnsiString S,SLine_File;
    S="provider=Microsoft.Jet.OLEDB.4.0;Data Source=" OpenDialog1->FileName ";Extended Properties=Excel 8.0;Persist Security Info=False";
    ADOConnection1->Provider="Microsoft.Jet.OLEDB.4.0";
    ADOConnection1->ConnectionString=S;
    ADOConnection1->Connected=true;
    //下面為讀取Excel工作表名稱
    ADOConnection1->GetTableNames(Memo1->Lines,false);
    for (int j = 0; j < Memo1->Lines->Count ; j  ) {
      S=Memo1->Lines->Strings[j];
      if (S.Pos("$_") == 0) {
        ListBox1->Items->Add(S.SubString(1,S.Pos("$")-1));
      }
    }
    //取第一個工作表
    SLine_File=ListBox1->Items->Strings[0];
    ADO1->CommandText="select * from [" SLine_File "$]";
    ADO1->CommandType=cmdUnknown;
    try  {
      ADO1->Active=true;
    }
    catch(...) {
      ADO1->Active=false;
      ADOConnection1->Connected=false;
    }
    int a[1024],i;
    for (i=0;i<1024;i  ) {
      a[i]=0;
    }
    int F=6; // 這是你定義的F
    // 若你定義的F大於讀入的FieldCount
    if (F > ADO1->FieldCount) 
      F=ADO1->FieldCount;  
    AnsiString buffer;
    i=0;
    ADO1->First();
    while ( ! ADO1->Eof && i < 1024) {
      buffer=ADO1->Fields->Fields[i]->DisplayText.Trim()
      a[i]=StrToIntDef(buffer,0); // 保證你Excel讀入的值一定為整數,此為防Excel值為空白或為其他值。
      Application->ProcessMessages();
      ADO1->Next();    
      i  ;
    }
請參考!
Andy Chang
------
Andy Chang
vengeance
一般會員


發表:9
回覆:11
積分:4
註冊:2004-05-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-30 13:42:52 IP:61.228.xxx.xxx 未訂閱
andychang1690兄 你好 //取第一個工作表
    SLine_File=ListBox1->Items->Strings[0];
    ADO1->CommandText="select * from [" SLine_File "$]";
    ADO1->CommandType=cmdUnknown;
    try  {
      ADO1->Active=true;
    }
    catch(...) {
      ADO1->Active=false;
      ADOConnection1->Connected=false;
    }
    int a[1024],i;
    for (i=0;i<1024;i  ) {
      a[i]=0;
    }
執行上面紅色兩行會發生錯誤 [C Error] Unit1.cpp(43): E2247 'TCustomADODataSet::CommandText' is not accessible WHY? 還有你的ADO1是ADOQuery1嗎? 謝謝 一年當五年用 發表人 - vengeance 於 2005/05/30 17:20:15
------
一年當五年用
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-30 14:49:41 IP:210.68.xxx.xxx 未訂閱
vengeance您好:    PO程式碼的方式請參考版規說明,煩請修改謝謝您的配合 >
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-30 14:55:01 IP:221.169.xxx.xxx 未訂閱
vengeance:
1.ADO1是ADOQuery1。
2.我運行程式沒錯,BCB6。
  你方便Post你部份程式碼嗎?
Andy Chang
------
Andy Chang
vengeance
一般會員


發表:9
回覆:11
積分:4
註冊:2004-05-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-30 17:43:16 IP:61.228.xxx.xxx 未訂閱
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if(OpenDialog1->Execute())
    {
        ADOQuery1->Active=false;
        ADOConnection1->Connected=false;
        AnsiString S,SLine_File;
        S="provider=Microsoft.Jet.OLEDB.4.0;Data Source=" OpenDialog1->FileName 
        ";Extended Properties=Excel 8.0;Persist Security Info=False";
        ADOConnection1->Provider="Microsoft.Jet.OLEDB.4.0";
        ADOConnection1->ConnectionString=S;
        ADOConnection1->Connected=true;
        ///下面為讀取Excel工作表名稱
        ADOConnection1->GetTableNames(Memo1->Lines,false);
        for (int j = 0; j < Memo1->Lines->Count ; j  )
        {
                S=Memo1->Lines->Strings[j];
                if (S.Pos("$_") == 0) {
                ListBox1->Items->Add(S.SubString(1,S.Pos("$")-1));
        }
    }
    //取第一個工作表
    SLine_File=ListBox1->Items->Strings[1];
    RichEdit1->Lines->Add(SLine_File);
    ADOQuery1->CommandText="select * from [" SLine_File "$]";
    ADOQuery1->CommandType=cmdUnknown;
    try  {
      ADOQuery1->Active=true;
    }
    catch(...) {
      ADOQuery1->Active=false;
      ADOConnection1->Connected=false;
    }
ADOQuery好像沒有CommandType和CommandText這兩個函式 一年當五年用
------
一年當五年用
vengeance
一般會員


發表:9
回覆:11
積分:4
註冊:2004-05-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-30 19:32:40 IP:61.228.xxx.xxx 未訂閱
ADO1->CommandText="select * from [" SLine_File "$]";
ADO1->CommandType=cmdUnknown;
    
替換成    ADOQuery1->Connection = ADOConnection1;
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("select * from [" SLine_File "$]");
ADOQuery1->Open();
就可以用了 謝謝andychang1690兄 一年當五年用
------
一年當五年用
系統時間:2024-04-29 12:55:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!