VC++调用Excel

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

示例---将所有单元格设置为文本格式:[cpp]viewplaincopy1._Applicationapp;//Excel应用程序接口2.Workbooksbooks;//工作薄集合3._Workbookbook;//工作薄4.Worksheetssheets;//工作表集合5._Worksheetsheet;//工作表6.Rangerange;//Excel中针对单元格的操作都应先获取其对应的Range对象7.Fontfont;8.Rangecols;9./*10.COleVariant类为VARIANT数据类型的包装,在自动化程序中,通常都使用11.VARIANT数据类型进行参数传递。故下列程序中,函数参数都是通过COleVariant12.类来转换了的。13.*/14.//covOptional可选参数的VARIANT类型15.COleVariantcovOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);16.17.if(!app.CreateDispatch(LExcel.Application)){18.this-MessageBox(L无法创建Excel应用!);19.return;20.}21.22.//获取工作薄集合23.books=app.GetWorkbooks();24.//添加一个工作薄25.book=books.Add(covOptional);26.//获取工作表集合27.sheets=book.GetSheets();28.//获取第一个工作表29.sheet=sheets.GetItem(COleVariant((short)1));30.31.32.range.AttachDispatch(sheet.GetCells(),TRUE);//加载所有单元格33.range.SetNumberFormat(COleVariant(L@));//将单元格设置为文本类型34.35.//合并单元格36.//加载要合并的单元格37.range.AttachDispatch(sheet.GetRange(COleVariant(_T(A1)),COleVariant(_T(D1))),TRUE);38.range.Merge(COleVariant((long)0));39.40.41.42.range.AttachDispatch(sheet.GetCells(),TRUE);//加载所有单元格43.range.SetItem(COleVariant((long)1),COleVariant((long)1),COleVariant(_T(数学系研究生课程统计)));//A144.range.SetItem(COleVariant((long)2),COleVariant((long)1),COleVariant(_T(课程名)));//A245.range.SetItem(COleVariant((long)2),COleVariant((long)2),COleVariant(_T(课时)));//B2函数SetNumberFormat()用于设置单元格的格式,但是首先我们必须知道所有格式的标记。文本类:1、@指定内容按文本显示,主要用于编码、手机号等用数字表示的文本。设定该格式后,可以保证导出excel时,此类文本不会被转成数字显示。数值类:1、0.00表示两位小数,例如3.10367显示为3.102、0.##表示两位小数,当小数末位为0时,0将不显示。例如3.10显示为3.13、#,##0.00表示两位小数,且显示千份位4、#,##0.00;[Red]#,##0.00表示负数红字5、0.00;[Red]0.00;表示负数红字,且数据为0时不显示6、0.00;[Red](0.00);表示正数时两位小数,负数时两位小数并显示红色,0时不显示。0.00;[Red](0.00)只是一个示例,可以为任意的数字格式串,后边再加上;(空格)即表示数据为0时不显示。日期类:1、yyyy-m-d2、yyyy-MM-dd3、yyyy-MM-ddhh:mm:ss4、yyyy年MM月dd日百分比:1、0%2、0.00%详细请打开Excel2003,单元格右键,设置单元格格式,选一种格式,点自定义即可看到该格式的格式串;有的Excel格式串后有带”_”,在使用时,必须去掉。读取xls文件示例://变量定义_Applicationapp;//Excel应用程序接口Workbooksbooks;//工作薄集合_Workbookbook;//工作薄Worksheetssheets;//工作表集合_Worksheetsheet;//工作表Rangerange;//Excel中针对单元格的操作都应先获取其对应的Range对象Fontfont;Rangecols;RangeiCell;LPDISPATCHlpDisp;COleVariantvResult;COleVariantcovTrue((short)TRUE),covFalse((short)FALSE),covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);//初始化if(!app.CreateDispatch(LExcel.Application)){this-MessageBox(L无法创建Excel应用!);return;}app.SetVisible(TRUE);//可见app.SetUserControl(TRUE);//用户可控制//打开XLS文件books.AttachDispatch(app.GetWorkbooks());lpDisp=books.Open(Ld:\\3.xls,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional);//得到Workbookbook.AttachDispatch(lpDisp);//得到Worksheetssheets.AttachDispatch(book.GetWorksheets());//得到当前活跃sheet//如果有单元格正处于编辑状态中,此操作不能返回,会一直等待lpDisp=book.GetActiveSheet();sheet.AttachDispatch(lpDisp);//*****//读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列RangeusedRange;usedRange.AttachDispatch(sheet.GetUsedRange());range.AttachDispatch(usedRange.GetRows());longiRowNum=range.GetCount();//已经使用的行数range.AttachDispatch(usedRange.GetColumns());longiColNum=range.GetCount();//已经使用的列数longiStartRow=usedRange.GetRow();//已使用区域的起始行,从开始longiStartCol=usedRange.GetColumn();//已使用区域的起始列,从开始//读取第一个单元格的值range.AttachDispatch(sheet.GetCells());range.AttachDispatch(range.GetItem(COleVariant((long)1),COleVariant((long)1)).pdispVal);vResult=range.GetValue();CStringstr;if(vResult.vt==VT_BSTR)//字符串{str=vResult.bstrVal;}elseif(vResult.vt==VT_R8)//8字节的数字{str.Format(L%f,vResult.dblVal);}elseif(vResult.vt==VT_DATE)//时间格式{SYSTEMTIMEst;VariantTimeToSystemTime((long)&vResult.date,&st);}elseif(vResult.vt==VT_EMPTY)//单元格空的{str=;}//读取第一个单元格的对齐方式,数据类型:VT_I4//读取水平对齐方式range.AttachDispatch(sheet.GetCells());iCell.AttachDispatch((range.GetItem(COleVariant(long(1)),COleVariant(long(1)))).pdispVal);vResult.lVal=0;vResult=iCell.GetHorizontalAlignment();if(vResult.lVal!=0){switch(vResult.lVal){case1://默认break;case-4108://居中break;case-4131://*左break;case-4152://*右break;}}//垂直对齐方式iCell.AttachDispatch((range.GetItem(COleVariant(long(1)),COleVariant(long(1)))).pdispVal);vResult.lVal=0;vResult=iCell.GetVerticalAlignment();if(vResult.lVal!=0){switch(vResult.lVal){case-4160://*上break;case-4108://居中break;case-4107://*下break;}}//设置第一个单元格字体颜色:红色range.AttachDispatch(sheet.GetCells());range.AttachDispatch((range.GetItem(COleVariant(long(1)),COleVariant(long(1)))).pdispVal);font.AttachDispatch(range.GetFont());font.SetColor(COleVariant((long)0xFF0000));//合并单元格的处理//包括判断第一个单元格是否为合并单元格,以及将第一个单元格进行合并RangeunionRange;range.AttachDispatch(sheet.GetCells());unionRange.AttachDispatch(range.GetItem(COleVariant((long)1),COleVariant((long)1)).pdispVal);vResult=unionRange.GetMergeCells();if(vResult.boolVal==-1)//是合并的单元格{//合并单元格的行数range.AttachDispatch(unionRange.GetRows());longiUnionRowNum=range.GetCount();//合并单元格的列数range.AttachDispatch(unionRange.GetColumns());longiUnionColumnNum=range.GetCount();//合并区域的起始行,列longiUnionStartRow=unionRange.GetRow();//起始行,从开始longiUnionStartCol=unionRange.GetColumn();//起始列,从开始}elseif(vResult.boolVal==0){//不是合并的单元格}//将第一个单元格合并成行,列range.AttachDispatch(shee

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功