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

請教BCB與OLE的溝通的問題!

尚未結案
Rattler
一般會員


發表:11
回覆:4
積分:3
註冊:2004-07-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-08 19:05:40 IP:203.69.xxx.xxx 未訂閱
我在BCB中將Excel中的值讀入BCB的StringGrid中 我的寫法大至如下:    #define PG OlePropertyGet #define PS OlePropertySet #define FN OleFunction #define PR OleProcedure //=======================            Variant path = "D:\Fund_Format.xls"; Ex=Variant::CreateObject("Excel.Application"); Ex.PG("WorkBooks").PR("Open",path); Wb=Ex.PG("ActiveWorkBook"); Sh1=Wb.PG("Worksheets","Fund"); 以上我的path是宣告成Variant,而我直接給此一字串(D:\Fund_Format.xls)是可以Work的 但是,若我是用OpenDialog來讀取檔案名稱時就會發生錯誤!!如下... if(OpenDialog->Execute()){ path = OpenDialog->FileName; } 我設過中斷點,看直接給字串時,path的型態好像是VOldStr的樣子 但是我不知道這是什麼東西,又該如何去宣告及使用呢 因為從OpenDialog中讀出來的型態好像是AnsiString的樣子 所以在這裡請教一下各位前輩!!
arnoyu
中階會員


發表:73
回覆:88
積分:67
註冊:2003-03-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-08 21:06:11 IP:61.56.xxx.xxx 未訂閱
(1) 在BCB中將Excel中的值讀入BCB的StringGrid中 請先參考axsoft 版主所貼的這篇:  http://delphi.ktop.com.tw/topic.php?topic_id=20138    裡面有提到: Ex=Variant::CreateObject("Excel.Application"); Ex.PG("WorkBooks").PR("Open","c:\\book1.xls"); 我試了一下,確定 Variant path = "D:\Fund_Format.xls "; Ex.PG("WorkBooks").PR("Open",path); 要改成: Variant path = "D:\\Fund_Format.xls "; Ex.PG("WorkBooks").PR("Open",path); 如此路徑才能正確.. (2) 我試了一下底下的程式碼:
//---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
Variant path ;
path="C:\\test1.txt";
OpenDialog1->FileName=path;
if(OpenDialog1->Execute()){
path = OpenDialog1->FileName;
ShowMessage(path);
}
}
//---------------------------------------------------------------------------     
結果如下: 確定Variant跟AnsiString在運算子多載方面有作處理啊 我個人覺得,您的問題可能發生在: < class="code"> Ex=Variant::CreateObject("Excel.Application"); Ex.PG("WorkBooks").PR("Open",path); Wb=Ex.PG("ActiveWorkBook"); Sh1=Wb.PG("Worksheets","Fund"); 您可參考下面這篇: http://delphi.ktop.com.tw/topic.php?topic_id=22668 ===三人行必有我師焉===
Rattler
一般會員


發表:11
回覆:4
積分:3
註冊:2004-07-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-08 22:33:54 IP:203.69.xxx.xxx 未訂閱
嗯!! 其實還是不太懂  ^^" sorry!! 我看我說清楚點好了    我在下面開啟一Excel檔
   Variant Ex,Wb,Sh1,path;
   AnsiString temp;       if(OpenDialog->Execute()){
     temp = OpenDialog->FileName;
   }
   else
     return;
然後我把temp的值秀出來,再把值給path
ShowMessage(temp);
path = temp;
然後,我試著設了中斷點來看,值也是給對了!! 但結果會是................ 所以我是猜會不會是因為用OLE所提供的方式來做存取,所以傳入的變數 也有固定的型態,就像是用WinAPI時常會用到wchar_t的道理是一樣的吧 < > 先謝過囉 !! < >
arnoyu
中階會員


發表:73
回覆:88
積分:67
註冊:2003-03-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-09 11:08:00 IP:61.56.xxx.xxx 未訂閱
會不會是這個問題!? Workbook.OleFunction("SaveAs",  StringToOleStr(Edit1->Text.c_str())); 參考一下底下這兩篇: 資料匯出至 Excel 出問題求救!!! http://delphi.ktop.com.tw/topic.php?topic_id=27069 【BCB】【分享】將資料庫資料轉入Excel並畫出圖表 http://delphi.ktop.com.tw/topic.php?topic_id=40909 ===三人行必有我師焉===
Rattler
一般會員


發表:11
回覆:4
積分:3
註冊:2004-07-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-09 11:51:15 IP:203.69.xxx.xxx 未訂閱
引言: 會不會是這個問題!? Workbook.OleFunction("SaveAs", StringToOleStr(Edit1->Text.c_str())); 參考一下底下這兩篇: 資料匯出至 Excel 出問題求救!!! http://delphi.ktop.com.tw/topic.php?topic_id=27069 【BCB】【分享】將資料庫資料轉入Excel並畫出圖表 http://delphi.ktop.com.tw/topic.php?topic_id=40909 ===三人行必有我師焉===
喔!! 真的解決了!! 太感謝了!! 要用StringToOleStr來轉換類型沒錯
系統時間:2024-07-08 11:31:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!