BCB上開啟已儲存的EXCEL檔案? |
答題得分者是:timhuang
|
jimmy_lou45
一般會員 發表:10 回覆:18 積分:5 註冊:2003-07-13 發送簡訊給我 |
我用OpenDialog元件
可是好像不能使用.. 我的程式是用BCB寫的
大家討論的都是Delphi的語法
可是我不知道用bcb的語法
如何, "在BCB中按一個按鈕"->"跑出我已經有存檔的EXCEL檔案,且秀出EXCEL畫出的圖形ㄋ?"
我上面的步驟都做出來了
只是,好像是range設定有問題..所以
跑不出來我所要的圖形...
可否麻煩您看一下... void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenDialog1->Execute())
{ excel=CreateOleObject("excel.Application");
excel.OlePropertySet("Visible",1);
WORKbooks=excel.OlePropertyGet("Workbooks"); //產生Workbooks
WORKbook=WORKbooks.OleFunction("Add");
WORKsheets=WORKbook.OlePropertyGet("Worksheets");
WORKsheet=WORKsheets.OlePropertyGet("Item",1);//設定頁次 Range = WORKsheet.OlePropertyGet("Range","D2:E629");
Range.OlePropertyGet("Select");
chart=WORKbook.OlePropertyGet("Charts");
chart.OleFunction("add");
ActiveChart=WORKbook.OlePropertyGet("ActiveChart");
ActiveChart.OlePropertySet("ChartType",0x00000039); -----------------------------
我是參考您發表的文章,下面的"巨集"寫的
Range("D2:E629").Select
Charts.Add
ActiveChart.ChartType = xlBarClustered
ActiveChart.SetSourceData Source:=Sheets("Sheet3").Range("D2:E629"), PlotBy _
:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet3"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "中心"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "進給量"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "半徑"
End With
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
jimmy_lou45
一般會員 發表:10 回覆:18 積分:5 註冊:2003-07-13 發送簡訊給我 |
您好:
我的問題是:1.在bcb裡開啟一個已經儲存在我硬碟中的excel檔案
(這一步我已經小小的試出來了,但是...不知道這樣寫對不對?執行的結果是可以跑出我已經儲存在硬碟裡excel的檔案)(就是程式裡面只有key第一行的時候,我已經有編號了,請參照下面我的程式) 2.我指定欄位(指定兩行)是為了畫出那兩"行"數值所代表的圖形
(就是,excel中不是有畫圖的功能嗎?先圈選一個欄位的範圍,再按一下那個圖示,圖形就會跑出來的那個操作方法!) 3
如果我指定欄位的話,(程式再加上2~8行)
發生我
"附加檔案的錯誤圖示")
還是我所寫的有錯?
第2~8行是否為我所想像的"圈選excel欄位,然後畫出來"的意思?? 若還有語意不清楚的地方,還麻煩告知...
(很糟糕的是,我還不到24小時,人家就趕的要結果看了,還請多多幫忙~謝謝) //--------------------------------------------------------------------------- #include
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
hi, 若是使用 Delphi 的話, 可以這樣寫:
procedure TForm1.Button1Click(Sender: TObject); var ex, wb, ws, ch: Variant; begin ex := CreateOleObject('Excel.Application'); wb := ex.WorkBooks.Open('c:\1.xls'); ws := wb.WorkSheets['Sheet1']; ex.Visible := true; ch := ex.Charts.Add; // xlColumnClustered = 51 長條圖 ch.ChartType := 51; // xlColumns = 2 ch.SetSourceData(Source:=ws.Range['A1:B7'], PlotBy:=2); // xlLocationAsObject = 2 ch.Location(Where:=2, Name:='Sheet1'); end;改為 bcb 的話, 如下: void __fastcall TForm1::Button1Click(TObject *Sender) { Variant ex, wb, ws, ch; ex = CreateOleObject("Excel.Application"); wb = ex.OlePropertyGet("WorkBooks").OleFunction("Open", "C:\\1.xls"); ws = wb.OlePropertyGet("WorkSheets", "Sheet1"); ex.OlePropertySet("Visible", true); ch = ex.OlePropertyGet("Charts").OleFunction("Add"); ch.OlePropertySet("ChartType", 51); ch.OleFunction("SetSourceData", ws.OlePropertyGet("Range","A1:B7"), 2); ch.OleFunction("Location", 2, "Sheet1"); }附上相關的資料與討論: http://www.progz.ru/viewtopic.php?t=1237 http://www.cbuilder.ru/WinLesson/bles1_2.htm 發表人 - timhuang 於 2003/07/22 23:30:13 |
jimmy_lou45
一般會員 發表:10 回覆:18 積分:5 註冊:2003-07-13 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
jimmy_lou45
一般會員 發表:10 回覆:18 積分:5 註冊:2003-07-13 發送簡訊給我 |
您好
我已經將那個檔案
#include
|
jimmy_lou45
一般會員 發表:10 回覆:18 積分:5 註冊:2003-07-13 發送簡訊給我 |
您好
我已經將那個檔案
#include
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
引言: 您好 我已經將那個檔案我猜想你的C Builder應該是BCB5吧! 試試同時include#include可使還是會出現以下的錯誤耶!! 謝謝!! Build [C Error] Unit1.cpp(5): E2209 Unable to open include file 'Comobj.h' [C Error] Unit1.cpp(21): E2268 Call to undefined function 'CreateOleObject' #includeHAVE A NICE DAY FOR YOU |
jimmy_lou45
一般會員 發表:10 回覆:18 積分:5 註冊:2003-07-13 發送簡訊給我 |
我剛剛已經試成功了耶!(我用的是bcb6)
真的很謝謝您..
但是,再請問一下
ch.OleFunction("SetSourceData", ws.OlePropertyGet("Range","A1:B7"), 2);
//這一行程式應該是設定"range"的吧?那請問一下,"2"是代表什麼意思ㄋ?
ch.OleFunction("Location", 2, "Sheet1");
//相同的,這行程式,"Location", 2, "Sheet1"....這3個東西,各是代表什麼ㄋ? 還有,請問一下,執行完此程式後,我把bcb6關掉,要直接開啟excel檔案,就開不起來了,我之前有看過相關文章,好像是要釋放excel?
不知道,該如何撰寫?? 謝謝您....
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
在上面的 delphi 版的那篇內有常數說明,
ch.OleFunction("SetSourceData", ws.OlePropertyGet("Range","A1:B7"), 2);
//這一行程式應該是設定"range"的吧?那請問一下,"2"是代表什麼意思ㄋ?
是 PlotBy = xlColumn 的意思, 就是資料是直的或是橫的, (以column為資料或是以row為資料的一個參數) ch.OleFunction("Location", 2, "Sheet1");
//相同的,這行程式,"Location", 2, "Sheet1"....這3個東西,各是代表什麼ㄋ?
這裡的 Location 就是 ole 的 function name, 也是一樣, 參數 delphi 版的你會比較容易看懂:
ch.Location(Where:=2, Name:='Sheet1');
意思是將這個圖的貼上 sheet1 as a object, 將圖貼入 sheet1 工作表如同一個物件一樣, 其中的 2 代表著 xlLocationAsObject 之所以會將 delphi 版的作法貼出來就是給你參考, 比較容易看得懂.
|
jimmy_lou45
一般會員 發表:10 回覆:18 積分:5 註冊:2003-07-13 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
void __fastcall TForm1::Button1Click(TObject *Sender) { Variant ex, wb, ws, ch; ex = CreateOleObject("Excel.Application"); wb = ex.OlePropertyGet("WorkBooks").OleFunction("Open", "C:\\1.xls"); ws = wb.OlePropertyGet("WorkSheets", "Sheet1"); ex.OlePropertySet("Visible", true); ch = ex.OlePropertyGet("Charts").OleFunction("Add"); ch.OlePropertySet("ChartType", 51); ch.OleFunction("SetSourceData", ws.OlePropertyGet("Range","A1:B7"), 2); ch.OleFunction("Location", 2, "Sheet1"); //以下為釋放: ex.OleFunction("Quit"); ex = Unassigned; } |
jimmy_lou45
一般會員 發表:10 回覆:18 積分:5 註冊:2003-07-13 發送簡訊給我 |
|
jimmy_lou45
一般會員 發表:10 回覆:18 積分:5 註冊:2003-07-13 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
ok, 那是因為你將離開的程式碼寫在另一個 button2 的 onclick event 中了, 這樣在 button1 中的 Variant ex 的 scope 是無法在 button2 中使用的, 所以你將 ex 放在外面的話, 就可以讓該 ex 變數讓兩個 button 的 onclick event 都讀得到沒錯. 其他的 wb, ws, ch 則只有在 button1 中使用的話, 就可以不用提出來放了.
這個問題是一個變數視界(variable scope)的問題哦!
|
jimmy_lou45
一般會員 發表:10 回覆:18 積分:5 註冊:2003-07-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |