快速业务通道

C++Builder 6中开发Office程序心得(一)

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29
/ *********************************************************************//
interface IWorksheets : public IDispatch
{
public:
... ...
HRESULT STDMETHODCALLTYPE Copy(VARIANT Before/*[in,opt]*/= TNoParam(),
VARIANT After/*[in,opt]*/= TNoParam(),
... ...
HRESULT STDMETHODCALLTYPE Move(VARIANT Before/*[in,opt]*/= TNoParam(),
VARIANT After/*[in,opt]*/= TNoParam(),
long lcid/*[in]*/= TDefLCID()); // [637]
... ...

三、编程指南

(一) ExcelApplication的启动、退出

我们平时所说的启动/退出Excel,在BCB6中应该被确切的说成是ExcelApplication的启动/退出。对应的控件是C++Builder 6中开发Office程序心得(一)。用来启动、退出的代码分别如下:

void __fastcall TMainForm::EABtnClick(TObject *Sender)
{
try
{
EA->Connect();
}
catch(...)
{
ShowMessage("Can not launch server");
}
   EA->set_Caption((WideString)"Excel Server Invoked by BCB");
EA->set_Visible(0,true);
}
   __fastcall TMainForm::~TMainForm()
{
EA->set_DisplayAlerts(0,false);
EA->Quit();
}

注意,Office控件多以接口形式互相关联,所以连接的方法也被贯之以Connect的名称。由于Excel Application一定是顶层对象,所以它的Connect方法不需要指定参数。

set_Caption是用来设置Excel Application的标题。请注意要用WideString,而不是String。

set_Visible(0, true)是使Excel Application可见。这里参数0是Locale ID。

Excel控件的封装是很奇怪的——也许是因为BCB 6只支持到Office 2000而目前我们基本都是要操作Office 2003而引起的版本兼容问题。一般来说,我们希望直接使用类似属性的操作方法来修改。但是,有些属性,如Visible,就必须用“set_属性/get_属性 ”的方式进行操作。这不是说Excel Application控件中没有Visible这个属性。这个属性确实存在于Excel Application控件中,但是如果你想直接操作Visible属性,那么无论你写成:“EA->Visible=true;”还是“EA->Visible[0]=true;”,编译时都会出错!提示“TExcelApplication::Visible is not accessible. ”。而更奇怪的是,如果我们直接操作属性,那么即使编译能够通过,也可能没有实际效用!有兴趣的读者可以测试一下Caption属性的操作。

一般而言,用set_属性/get_属性的方式,一定可以操作一个属性。但是,有些Set方法的命名也不遵守这个规律,后文即将涉及。

退出时,可以根据个人的喜好,设置DisplayAlerts属性。如果设置为true,那么在退出时,如果对Sheet或Workbook进行了一些需要存盘的操作,会有一个确认框出现。

以前曾经有一种说法,说是这样启动并正常退出的Excel Application,退出后会在内存中留下一个Excel进程。在我的机器上,没有这样的情形。

需要补充的是ExcelApplication控件的ConnectKind属性。它一共有五个可选值:ckAttachToInterface/ckNewInstance/ckRunningOrNew/ckRemote/ckRunning。一般我都会用ckRunningOrNew。其它的选项我倒没有进行过测试。

(三) ExcelWorksheet的操作

在上文连接Workbook的代码中,我也同时连接了TExcelWorksheet,其控件图标是C++Builder 6中开发Office程序心得(一)。所以完整的代码段如下:

void __fastcall TMainForm::EWBBtnClick(TObject *Sender)
{
EWB->ConnectTo(EA->Workbooks->Add(TNP, 0));
// Connect to worksheet as well
EWS1->ConnectTo(EWB->Worksheets->get_Item(V("Sheet1")));
EWS2->ConnectTo(EWB->Worksheets->get_Item(V(2)));
  EWS3P=EWB->Worksheets->get_Item(V("Sheet3"));
EWS3->

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号