如何在BCB中控制Excel,使Excel打开后,自动生成一个空白的WorkBook...(急!!!)(200分)

  • 主题发起人 主题发起人 Grape
  • 开始时间 开始时间
G

Grape

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在BCB中控制Excel,使Excel打开后,自动生成一个空白的WorkBook...
BCB中的ExcelApplication1->Workbooks->Add()方法的参数同Delphi的不同。

急!请高手指教!
 
var
sheet:variant;
idx,i:integer;
begin
Edit1.Text:=TimeToStr(now);

v:=createoleobject('Excel.Application');
v.visible:=true;
v.workbooks.add('C:/Program Files/Microsoft Office/Templates/XEKFBB.XLT');
v.workbooks[1].sheets[1].name:='chinese';
sheet:=v.workbooks[1].sheets['chinese'];


end;
 
PS:我要求的是在BCB下的解决方法。
 
Grape:如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
请认真阅读大富翁论坛规则说明 http://www.delphibbs.com/delphibbs/rules.htm
 
1、下面的方法使你的程序include进大量的代码,编译速度严重下降,
Code Insight反应迟钝(PIII 1G都很迟钝)
但是理解简单,编程容易:

从Server控件页放一个 TExcelApplication 控件到form上(假设名字是ea)
ea->Connect();
ea->Set_Visible(TDefLCID(),TOLEBOOL(1));
_WorkbookPtr wbp=ea->Workbooks->Add(TNoParam(),TDefLCID());
可以对wbp进行其他操作,比如增加sheet、保存workbook等。

2、下面的方法编译快,但不好写:
首先需要 #include <utilcls.h>
Variant ea=Variant::CreateObject("Excel.Application");
ea.OlePropertySet((WideString)"Visible", true);
Variant workbook=ea.OlePropertyGet((WideString)"Workbooks").OleFunction((WideString)"Add");
可以对workbook进行其他操作,比如增加sheet、保存workbook等。

 
bcb 一样的
!我保证你们看到以下的用法一定爽歪歪了!!!
这可是我三天工作的结果。唔。。。
---看最后终结者office。
--------------------------------
如果你们用的office97的server控件,那么用office2000时就要把server上的控件换掉。
做法:
1。在Componet里打开Install Packages.....
2.去掉borland sample automation server components
3.在project中点input type Library....
4.点add加入office2000的类库。(在Microsoft Office/office目录下的)
5。反正是什么Excel9.olb , Msword9.olb 和那些*.olb的东东,有excel的,word的,等。。。
6。palette page:改为servers(因为以前的office的控件完完了)
7。点install就好了。
这样office2000的问题我想应解决了。(如果你用的是什么word.application或excel.application 的控件的话)。
-----------
我的建议:
先用上面一的方法,再用comobj对象。
use comobj, excel_tlb; //excel_tlb 是新excel控件的pas文件,你把新控件放在窗体上看它用的哪个.pas就好了,当然下面要把这个控件去掉。因为comobj不用这个控件。只用这个.pas如excel_tlb中的函数。
var xl:variant;
在事件里写:
xl:=createoleobject('Excel.Application');

然后打开excel或word录一个宏命令,并打开宏命令考入代码。
----以下是宏录下来的宏。
workbooks.add
Range("C5:D7").Select
Sheets("Sheet2").Select
ActiveWindow.SelectedSheets.Delete
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Sheet3").Range("A1")
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet3"
-------
现在把它改为以下:
xl.workbooks.add;
xl.Range['C5:D7'].Select;
xl.Sheets['Sheet2'].Select;
xl.ActiveWindow.SelectedSheets.Delete;
xl.Charts.Add;
xl.ActiveChart.ChartType := xlColumnClustered;
xl.ActiveChart.Location(xlLocationAsObject,'Sheet3');
现在运行一下,我保证你们爽歪歪!
看到规律了吗?
前面加上对象名,()改[],= 改:=,有参数时直接用,后加; 。哈哈,满意了吧,
用office的宏命令可是不用你去想编程的,全是手动。这样少写了一大堆代码。

bbcoll 如有不明白的朋友讨论可:bbcoll@china.com

-------------------------------------------------------
 
我写的上上文,第2点是: "首先需要 #include 《utilcls.h》"

另外,bbcoll,其实实际使用就知道了,delphi的好写,
bcb的写起来不大一样,Grape要的使bcb的写法。如果使delphi的,
更前面已经有了
 
哈收分来了:

看我的代码:
Variant G_XLSFIL,G_NEWXLS;
G_XLSFIL=CreateOleObject("Excel.Application");
G_NEWXLS=G_XLSFIL.Exec(PropertyGet("Workbooks")).Exec(Procedure("Add"));
G_XLSFIL.OlePropertySet("Visible",(Variant)true);

G_XLSFIL.Exec(PropertyGet("Cells")<<1<<1).Exec(PropertySet("Value")<<"your's values");

如何,送分吧,我的QQ:7603844
 
多人接受答案了。
 
后退
顶部