其实这个功能在度娘一搜大把的代码,其实文中的代码大部分都是出自度娘,只是为了便于自己的记忆与查询,我在这里重复的记录一下代买。我自己定义了一个CExcelOper 的类,该类封装了基本的函数,也没什么好说的,将代码贴上来:
头文件 ExcelOper.h
#include "excel.h"
#include "comdef.h"
#include "COMUTIL.H"
//#include "StructData.h"
class CExcelOper
{
public:
CExcelOper();
virtual ~CExcelOper();
_Application m_oExcelApp; // Excel程序
_Worksheet m_oWorkSheet; // 工作表
_Workbook m_oWorkBook; // 工作簿
Workbooks m_oWorkBooks; // 工作簿集合
Worksheets m_oWorkSheets; // 工作表集合
Range m_oCurrRange; // 使用区域
BOOL InitialExcel();
BOOL OpenExcel(LPCSTR lpstrFileName);
long GetCurrentRowNum();
// BOOL WriteDataToFIR(long lCurrentRow,pstCHResult pdata,CString strSN);
void Search3TempMaxMinValue(int nArryCount,double *pdbArryData,double *pdbGetMaxValue,double* pdbGetMinValue);
BOOL CloseExcel(BOOL bSave,LPCSTR lpstrFileName);
void JudgeSNIsExsit(int nCurrRoe,LPCSTR lpstrSN,long *pnGetCurrRow);
BOOL ReadSourceCurve();
BOOL CalcBW();
BOOL WriteBWToExcel();
void YieldToPeers();
BOOL SearchMinILIndex(double *pdbData,int nCount,int* pnMinIndex);
BOOL SearchBWIndex(int nType,double *pdbData,double dbdeta,int nCount,int nTotalCount,int nCenterIndex,int *pnGetIndex);
double *pdbWL;
double *pdbReadPower[24];
double m_pdbBW[24];
};
下面是CPP
/////////////////////////////////////////////////////////
//函数说明:
// 初始化Excel组件
//Add by wanxin
//Time:20151013
//////////////////////////////////////////////////////////
BOOL CExcelOper::InitialExcel()
{
// if (CoInitialize(NULL)!=0)
// {
// AfxMessageBox("初始化Excel组件支持库失败!");
// return FALSE;
// }
//启动Excel
if (!m_oExcelApp.CreateDispatch( _T( "Excel.Application" ), NULL ) )
{
::MessageBox( NULL, _T( "创建Excel服务失败!" ), _T( "错误提示!" ), MB_OK | MB_ICONERROR);
return FALSE;
}
//设置为显示
m_oExcelApp.SetVisible(FALSE);
m_oWorkBooks.AttachDispatch( m_oExcelApp.GetWorkbooks(), TRUE ); //没有这条语句,下面打开文件返回失败。
//
return TRUE;
}
/////////////////////////////////////////////////////////
//函数说明:
// 打开Excel文件
//Add by wanxin
//Time:20151013
//////////////////////////////////////////////////////////
BOOL CExcelOper::OpenExcel(LPCSTR lpstrFileName)
{
LPDISPATCH lpDisp = NULL;
COleVariant covTrue((short)TRUE);
COleVariant covFalse((short)FALSE);
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
Range oCurCell;
// 打开文件
lpDisp = m_oWorkBooks.Open( lpstrFileName,
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing) );
// 获得活动的WorkBook( 工作簿 )
m_oWorkBook.AttachDispatch( lpDisp, TRUE );
// 获得活动的WorkSheet( 工作表 )
m_oWorkSheet.AttachDispatch( m_oWorkBook.GetActiveSheet(), TRUE );
return TRUE;
}
///////////////////////////////////////////////////////////
//函数说明:
// 获得当前sheet行数
//Add by wanxin
//Time:20151013
//////////////////////////////////////////////////////////
long CExcelOper::GetCurrentRowNum()
{
long lgUsedRowNum = 0;
m_oCurrRange.AttachDispatch( m_oWorkSheet.GetUsedRange(), TRUE );
m_oCurrRange.AttachDispatch( m_oCurrRange.GetRows(), TRUE );
lgUsedRowNum = m_oCurrRange.GetCount();
return lgUsedRowNum;
}