一.引入自动化库
点击菜单栏查看->建立类向导->添加库
二.在工程对应的APP类中加入下面方框中的语句
三.在程序相应的部分添加内容,使得可以对EXCEL2003操作,本文在DEBUG目录下新建了两个文件夹,一个用来装模板文件(名称为模板,模板名称为template),一个用来装EXCEL输出文件(名称为结果)。实现的功能为:
点击按钮,向EXCEL中的A1到A10单元添加粗体的“HELLO WORLD!”,然后保存在结果文件夹。
void CMy002Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
/**********************以下为确定导出数据文件的名称***********************/
//查找文件夹中已有的文件,文件名依次递增例如EXCEL 2011-9-18 0001;EXCEL2011-9-18 00002
TCHAR pBuf[MAX_PATH];
CString appath;
GetModuleFileName(NULL, pBuf, MAX_PATH);
(strrchr(pBuf, '\\'))[1] = 0;
appath=pBuf;
appath+="结果\\*.xls";
CString name,left,right,mid;
CFileFind finder;//CFileFind类用于寻找文件
BOOL working=finder.FindFile(appath);
while(working)
{
working=finder.FindNextFile();
name=finder.GetFileName();
}
//left=EXCEL2011-9-18 right=0001.xls mid=0001(Cstring类) mid1=0001(int类)
int pos=name.Find(" ");
left=name.Left(pos);
right=name.Right(name.GetLength()-pos-1);
int pos1=right.Find(".");
mid=right.Left(pos1);
int m_mid1=atoi(mid);
//m_lei表示名称 temp表示时间 temp1=名称+时间
CString temp,temp1,m_kongge,m_name,m_lei;
CTime time;
time=time.GetCurrentTime();
temp=time.Format("%Y-%m-%d");
m_kongge=" ";
m_lei="EXCEL表";
temp1=m_lei+temp;
if(temp1==left)
{
m_mid1++;
CString m_mid;
m_mid.Format("%.4d",m_mid1);
m_name=m_lei+temp+m_kongge+m_mid;
}
else
{
CString m_d;
m_d.Format("%.4d",1);
m_name=m_lei+temp+m_kongge+m_d;
}
/**************以上为确定导出数据文件的名称****************************/
GetModuleFileName(NULL, pBuf, MAX_PATH);
(strrchr(pBuf, '\\'))[1] = 0;
appath=pBuf;
appath+="结果\\";
//打开文件对话框的初始化
CFileDialog fileDlg(FALSE,NULL,m_name);
fileDlg.m_ofn.lpstrFilter="EXCEL Files(*.xls)\0*.xls\0All Files(*.*)\0*.*\0\0";
fileDlg.m_ofn.lpstrDefExt="XLS";
fileDlg.m_ofn.lpstrInitialDir=appath;
if(IDOK==fileDlg.DoModal())
{
//向EXCEL文件中写入数据信息
_Application app;//应用程序对象
Workbooks books;//工作簿集合
_Workbook book;//工作簿
Worksheets sheets;//工作表集合
_Worksheet sheet;//工作表
Range range;//单元格区域
Font font;//字体
Range cols;//列区域
/*
COleVariant类为VARIANT数据类型的包装,在自动化程序中,通常都使用
VARIANT数据类型进行参数传递。故下列程序中,函数参数都是通过COleVariant
类来转换了的。
*/
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
//covOptional 可选参数的VARIANT类型
if( !app.CreateDispatch("Excel.Application") )
{
this->MessageBox("无法创建Excel应用!");
return;
}
app.SetVisible(false);
app.SetUserControl(true);
//利用模板文件建立EXCEL
//模板在在debug目录下的模板文件夹内模板名字为template
TCHAR pBuf[MAX_PATH];
CString strPath;
GetModuleFileName(NULL, pBuf, MAX_PATH);
(strrchr(pBuf, _T('\\')))[1] = 0;
strPath=pBuf;
strPath+="模板\\template";
/*两种新建工作簿的方法,如下*/
//books=app.GetWorkbooks();
//book=books.Add((COleVariant)strPath);
//sheets=book.GetSheets();
books.AttachDispatch(app.GetWorkbooks(),true);
book.AttachDispatch(books.Add(COleVariant(strPath)));
//得到Worksheets
sheets.AttachDispatch(book.GetWorksheets(),true);
sheet=sheets.GetItem(COleVariant((short)1));
//向EXCEL中A1到A10添加HELLO WORLD!
CString ming,hao,danyuan;
ming="A";
for(int i=1;i<=10;i++)
{
hao.Format("%d",i);
danyuan=ming+hao;
range=sheet.GetRange(COleVariant(danyuan),COleVariant(danyuan));
range.SetValue2(COleVariant("HELLO EXCEL!"));
font=range.GetFont();
font.SetBold(COleVariant((short)TRUE));
}
//向单位格中添加货币格式的数字
/*range=sheet.GetRange(COleVariant("A2"),COleVariant("A2"));
range.SetFormula(COleVariant("=RAND()*100000"));
range.SetNumberFormat(COleVariant("$0.00"));*/
cols=range.GetEntireColumn();
cols.AutoFit();//列自动调整大小
CString path1=fileDlg.GetPathName();
//保存工作簿
sheet.SaveAs(path1,covOptional,
covOptional,covOptional,
covOptional,covOptional,covOptional,covOptional,covOptional,covOptional);
}
}
最后生成的EXCEL文件为