VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 785|回复: 3

关于C++ Builderf操纵Excel表的问题,向大虾请教

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-28 16:40:01 | 显示全部楼层 |阅读模式
我是用OLE来操纵EXCEL表的,打开表,存入数据都没有问题,问题是如果一个表已经通过应用程序打开,以后如何判断EXCEL表已经打开,避免重复打开Excel程序,和某个工作表,谢谢诸位仁兄的帮助
回复

使用道具 举报

0

主题

27

帖子

24.00

积分

新手上路

Rank: 1

积分
24.00
发表于 2020-3-3 10:15:01 | 显示全部楼层
TCOM_Application iExcelApp;
    HRESULT hr;
    IUnknown * IUnExcelAppPtr;
    hr=GetActiveObject(CLSID_ExcelApplication,0,(IUnknown **)&IUnExcelAppPtr);
    if(hr==MK_E_UNAVAILABLE)
    {
      ShowMessage("没有Excel启动,重新启动Excel用来控制。");
      try{iExcelApp=CoExcelApplication::Create();}
      //CoExcelApplication  位于 Excel_2k.h
      catch(...) {ShowMessage("启动 Excel 出错, 大概是没装Excel");return;}
    }
    else
    {
      ShowMessage("已经有个Excel启动了,就【接】上这个操作。");
      IUnExcelAppPtr->QueryInterface(IID__Application,(void**)&iExcelApp) ;
      IUnExcelAppPtr->Release();
    }
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-3-3 11:30:01 | 显示全部楼层
枚举Excel应用程序的实例,对每一个实例找当前打开的文件
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-3-17 11:45:01 | 显示全部楼层
谢谢两位大虾,问题解决了,呵呵。我把我的代码也帖上以后供大家交流。献丑:
#include <vcl.h>
#pragma hdrstop
#include "Comobj.hpp"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#define PG OlePropertyGet
#define PS OlePropertySet
#define FN OleFunction
#define PR OleProcedure
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Variant ExcelApp,WorkBook1,Sheet1,Range;
    bool bExcelRun = true;
    HWND h = NULL;
    h = FindWindow(0,"Microsoft Excel - 数据模板1");
    if(h == NULL)
    {
        try
        {
            GetActiveOleObject("Excel.Application");
        }
        catch(...)
        {
            bExcelRun = false;
        }
        if(bExcelRun == false)
        {
            ExcelApp = Variant::CreateObject("Excel.Application");
        }
        else
        {
            ExcelApp = Variant::GetActiveObject("Excel.Application");
        }
        ExcelApp.PS("Visible",(Variant)true);
        ExcelApp.PG("WorkBooks").FN("Add","F:\\mydata\\数据模板.xlt");
    }
    else
    {
        ExcelApp = Variant::GetActiveObject("Excel.Application");
        WorkBook1 = ExcelApp.PG("ActiveWorkBook");
    }
    WorkBook1 = ExcelApp.PG("ActiveWorkBook");
    Sheet1 = WorkBook1.PG("ActiveSheet");
    Sheet1.PG("Cells",10,10).PS("Value",100.05);

}
呵呵。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表