分享
 
 
 

C++Builder中使用Excel的类

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

使用方法,把下面的RtpExcel中的RtpExcel.h段存成文件RtpExcel.h,

RtpExcel.c存成文件RtpExcel.c并保存,加入到C++Builder的工程中即可使用。

/*

RtpExcel.h

*/

//---------------------------------------------------------------------------

#ifndef RptExcelH

#define RptExcelH

#include <utilcls.h>

struct RptPageSetup

{

String sLeftHeader;

String sLeftFooter;

String sCenterheader;

String sRightHeader;

String sRightFooter;

String sCenterFooter;

};

struct RptInf

{

RptPageSetup RptPage;

String tTitle;

String tFirstRowL;

String tFirstRowR;

};

class CRptExcel

{

public:

CRptExcel();

~CRptExcel();

//从sBeginRow行开始设置数据并初始化边框

bool SetData(const RptInf& rInf,TDataSet* pSet);

bool PrintRpt();

private:

//初始化应用程序对象

bool InitApp();

//设置excel程序对象的可见性

bool SetAppVisible(bool bVisible);

private:

bool SetCellBorder();

bool SetInfTable();

bool SetInfCom();

bool SetTitle();

bool SetTopRow();

bool SetCellValue();

bool NewWorkBook();

bool NewExcelApp();

private:

TDataSet *m_pSet;

Variant m_ExcelApp;

Variant m_Sheet;

Variant m_WorkBook;

Variant m_Range;

unsigned int m_RowLast;

unsigned int m_RowBegin;

char m_cBegin;

char m_cEnd;

unsigned int m_RowCount;

unsigned int m_ColCount;

String m_sTitle;

String m_sCompanyInf;

String m_sA3Content;

String m_sLastCol3Content;

bool m_bAppRun;

private:

String m_sError;

};

//---------------------------------------------------------------------------

#endif

//---------------------------------------------------------------------------

/*

RptExcel.c

*/

#include <vcl.h>

#pragma hdrstop

#include "Excel_2K_SRVR.h"

#include "RptExcel.h"

CRptExcel::CRptExcel()

{

m_pSet=NULL;

m_bAppRun=false;

}

CRptExcel::~CRptExcel()

{

if(m_bAppRun)

{

m_ExcelApp.OleFunction ("Quit");

}

}

bool CRptExcel::PrintRpt()

{

if(!InitApp()) return false;

if(!SetCellValue()) return false;

if(!SetCellBorder()) return false;

if(!SetTitle()) return false;

if(!SetInfCom()) return false;

if(!SetInfTable()) return false;

if(!SetTopRow()) return false;

SetAppVisible(true);

return true;

}

bool CRptExcel::InitApp()

{

if(!NewExcelApp()) return false;

if(!NewWorkBook()) return false;

return true;

}

bool CRptExcel::NewExcelApp()

{

try

{

m_ExcelApp = Variant::CreateObject("excel.application");

m_bAppRun=true;

}

catch(...)

{

m_sError="不能初始化Excel应用程序对象!";

return false;

}

return true;

}

bool CRptExcel::NewWorkBook()

{

Variant all_workbooks;

//-- Get workbooks collection

all_workbooks = m_ExcelApp.OlePropertyGet("Workbooks");

//-- Set number of worksheets to 1

m_ExcelApp.OlePropertySet("SheetsInNewWorkbook",(Variant)1);

//-- Create a new workbook

m_WorkBook=all_workbooks.OleFunction("Add");

m_Sheet=m_WorkBook.OlePropertyGet("ActiveSheet");

return true;

}

bool CRptExcel::SetAppVisible(bool bVisible)

{

m_ExcelApp.OlePropertySet("Visible",(Variant)bVisible);

return true;

}

//得到m_cEnd,m_cBegin;m_RowLast;m_RowBegin;的值

bool CRptExcel::SetData(const RptInf& rInf,TDataSet* pSet)

{

m_ColCount=pSet->FieldCount;

m_cBegin='A';

m_cEnd='A'+m_ColCount;

m_RowBegin=4;

m_RowCount=pSet->RecordCount;

m_RowLast=m_RowBegin+m_RowCount;

m_pSet=pSet;

m_sTitle=rInf.tTitle;

m_sA3Content=rInf.tFirstRowL;

m_sLastCol3Content=rInf.tFirstRowR;

m_sCompanyInf=rInf.RptPage.sLeftHeader;

return true;

}

bool CRptExcel::SetCellValue()

{

char ctemp,cEnd;

int iRow,iRowLast;

unsigned int index;

Variant cell;

String str;

if(!m_pSet)

{

m_sError="没有设置数据集!";

return false;

}

if(m_pSet->Eof&&m_pSet->Bof)

{

m_sError="数据集为空";

return false;

}

if(m_ColCount<=0)

{

m_sError="列数读取出错!";

return false;

}

ctemp='A';iRow=4;

for(index=0;index<m_ColCount;index++)

{

ctemp='A'+index;

str.sprintf("%c%d",ctemp,iRow);

cell=m_Sheet.OlePropertyGet("Range",str);

str=m_pSet->Fields->Fields[index]->FieldName;

cell.OlePropertySet("Value",str);

if(ctemp=='Z')

{

m_sError="列数太多出错";

return false;

}

}

iRow++;ctemp='A';

m_pSet->First();

while(!m_pSet->Eof)

{

for(index=0;index<m_ColCount;index++)

{

ctemp='A'+index;

str.sprintf("%c%d",ctemp,iRow);

cell=m_Sheet.OlePropertyGet("Range",str);

str=m_pSet->Fields->Fields[index]->AsString;

cell.OlePropertySet("Value",str);

}

iRow++;

m_pSet->Next();

}

return true;

}

bool CRptExcel::SetTitle()

{

String str;

char ct;

str.sprintf("%c%d:%c%d",'A',1,('A'+m_ColCount),1);

Variant vCell;

try

{

vCell=m_Sheet.OlePropertyGet("Range",str);

vCell.OlePropertySet("Value",m_sTitle);

}

catch(...)

{

m_sError="设置表头信息时出错!";

return false;

}

return true;

}

//设置公司的信息到页眉页脚处

bool CRptExcel::SetInfCom()

{

try{

Variant PageHeader=m_Sheet.OlePropertyGet("PageSetup");

PageHeader.OlePropertySet("RightHeader","&D ");

PageHeader.OlePropertySet("LeftHeader",m_sCompanyInf);

}

catch(...)

{

m_sError="设置页眉信息时出错!";

return false;

}

return true;

}

bool CRptExcel::SetInfTable()

{

try{

Variant PageHeader=m_Sheet.OlePropertyGet("PageSetup");

PageHeader.OlePropertySet("RightFoot","&P/&N");

PageHeader.OlePropertySet("LeftFoot",m_sTitle);

}

catch(...)

{

m_sError="设置表头信息时出错!";

return false;

}

return true;

}

bool CRptExcel::SetTopRow()

{

try{

Variant vCell=m_Sheet.OlePropertyGet("Range","A3");

vCell.OlePropertySet("Value",m_sA3Content);

String str;

str.sprintf("%c3",'A'+m_ColCount);

vCell.OlePropertyGet("Range",str);

vCell.OlePropertySet("Value",m_sLastCol3Content);

}

catch(...)

{

m_sError="设置表头信息时出错!";

return false;

}

return true;

}

bool CRptExcel::SetCellBorder()

{

String str;

char ct='A';

for(unsigned int index=m_RowBegin;index<m_RowLast+1;index++)

{

for(unsigned int j=0;j<m_ColCount;j++)

{

ct='A'+j;

Variant vCell,vBorder;

try{

str.sprintf("%c%d",ct,index);

vCell=m_Sheet.OlePropertyGet("Range",str);

vCell.OlePropertyGet("Borders").OlePropertySet("linestyle",xlContinuous);

if(j==0)//对第一列的单元格设置其左边界为粗

{

vBorder=vCell.OlePropertyGet("Borders",xlEdgeLeft);

vBorder.OlePropertySet("linestyle",xlContinuous);

vBorder.OlePropertySet("weight",xlThick);

}

if(j==m_ColCount-1)//the Right Edge of last col

{

vBorder=vCell.OlePropertyGet("Borders",xlEdgeRight);

vBorder.OlePropertySet("linestyle",xlContinuous);

vBorder.OlePropertySet("weight",xlThick);

}

if(index==m_RowBegin)//the first row having data

{

vBorder=vCell.OlePropertyGet("Borders",xlEdgeTop);

vBorder.OlePropertySet("linestyle",xlContinuous);

vBorder.OlePropertySet("weight",xlThick);

}

if(index==m_RowLast)

{

vBorder=vCell.OlePropertyGet("Borders",xlEdgeBottom);

vBorder.OlePropertySet("linestyle",xlContinuous);

vBorder.OlePropertySet("weight",xlThick);

}

}

catch(...)

{

m_sError="设置边框时出错!";

return false;

}

}

}

return true;

}

//---------------------------------------------------------------------------

#pragma package(smart_init)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有