之前做操作EXCEL文件也有好几次了,但是每次都是从网文上复制粘贴,从没有自己仔细研究过,所以遇到问题也只从网上寻找答案,一点自己的见解也没有,意识到这种方式不可取,才有了这篇文章。大神飘过即可,希望对于像我一样的菜鸟们有所帮助
//新建一个Excel表格,并对其进行编辑,声明使用的各变量
CApplication _app;//指向的是EXCEL程序
CWorkbooks workbooks;//所有workbook的集合,或者指的是所有excel文件的集合?
CWorkbook workbook;//指的是某一个excel文件,或者说该文件中所有worksheet的集合
CWorksheets worksheets;//指的是某一个文件中worksheet可控制的集合
CWorksheet worksheet;//指的是某一个worksheet,或者说该worksheet中所有单元格的集合
CRange range;//某一个worksheet中可控制的单元格的集合
LPDISPATCH lpDisp;
COleVariant vResult((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
COleVariant valTemp((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
//进行预备工作,该函数的工作原理是
//查找注册表中的HKEY_CLASSES_ROOT/CLSID 各项中的ProgID是否和Excel.Application匹配,匹配则查找该目录下的LocalServer,其中包含了excel的exe文件目录,进行启动
if(!_app.CreateDispatch(L"Excel.Application"))
{
MessageBox(L"启动excel程序失败",L"提示",0);
return;
}
//获得所有工作表
workbooks.AttachDispatch(_app.get_Workbooks());
//新建工作表,必须指出的是valTemp必须是赋值之后的!!!!,否则不能通过
workbook.AttachDispatch(workbooks.Add(valTemp));
///
// 若是打开已有文件 ///
// lpDisp = workbooks.Open(L"D:\\3.xlsx",valTemp, valTemp, valTemp, valTemp, valTemp,valTemp, ///
// valTemp, valTemp, valTemp, valTemp,valTemp, valTemp, valTemp,valTemp);
//得到Workbook ///
//workbook.AttachDispatch(lpDisp); ///
///
//获得该工作表的worksheets
worksheets.AttachDispatch(workbook.get_Worksheets());
//获得第二个worksheet!!!!!!!!!!!!!!!!!!!!!!!!!!
worksheet.AttachDispatch(worksheets.get_Item(COleVariant((long)2)));
//初始化range,使之指向该worksheet的范围内
range.AttachDispatch(worksheet.get_Cells());
range.AttachDispatch(range.get_Item(COleVariant((long)1), COleVariant((long)2)).pdispVal);
range.put_Value2(COleVariant(L"测试"));
//将在内存中创建的excel文件保存到磁盘上,或者说将从磁盘上读取到的文件,处理之后保存为其他的文件
workbook.SaveAs(COleVariant(L"D:\\temp.xlsx"),vResult,vResult,vResult,vResult,vResult,0,vResult,vResult,vResult,vResult,vResult);
range.ReleaseDispatch();
worksheet.ReleaseDispatch();
worksheets.ReleaseDispatch();
workbook.ReleaseDispatch();
workbooks.ReleaseDispatch();
//必须是这种顺序,程序执行后,EXCEL进程才能被关闭
_app.Quit();
_app.ReleaseDispatch();
PS:经过这次的整理,自己有了较大的提高,至少知道了,每个语句的作用,当然注释中有的是自己的理解,水平有限,希望大神指正!