C++操作Excel说明
来源:互联网 发布:欧特克软件qq群 编辑:程序博客网 时间:2024/04/30 17:19
Workbooks wbsMyBooks; _Workbook wbMyBook; Worksheets wssMysheets; _Worksheet wssMysheet; Range range; Range iCell; LPDISPATCH lpDisp; COleVariant vResult; COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
//创建Excel 2000服务器(启动Excel),尽量在初始化中建立excel_app对象//以确保一次只打开一个excel服务器
// if(!m_ExcelApp.CreateDispatch("Excel.Application")) // {// AfxMessageBox("无法启动Excel服务器!");// return;// }
//app.SetVisible(TRUE); //使Excel可见 //ExcelApp.SetUserControl(TRUE); //允许其它用户控制Excel
//打开c:\\*.xls wbsMyBooks.AttachDispatch(m_ExcelApp.GetWorkbooks()); lpDisp = wbsMyBooks.Open(m_strPath,//此处无法打开文档没有问题
covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional); wbMyBook.AttachDispatch(lpDisp);//得到Workbook wssMysheets.AttachDispatch(wbMyBook.GetWorksheets());//得到Worksheets
//得到当前活跃sheet,如果有单元格正处于编辑状态中,此操作不能返回,会一直等待 lpDisp = wbMyBook.GetActiveSheet(); wssMysheet.AttachDispatch(lpDisp);
//读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列 Range usedRange; usedRange.AttachDispatch(wssMysheet.GetUsedRange()); range.AttachDispatch(usedRange.GetRows()); long iRowNum = range.GetCount(); //已经使用的行数 range.AttachDispatch(usedRange.GetColumns()); long iColNum = range.GetCount(); //已经使用的列数 long iStartRow = usedRange.GetRow(); //已使用区域的起始行,从1开始 long iStartCol = usedRange.GetColumn(); //已使用区域的起始列,从1开始 //读取第iStartRow行,第iStartCol列单元格的值
range.AttachDispatch(wssMysheet.GetCells()); range.AttachDispatch(range.GetItem(COleVariant(iStartRow),COleVariant(iStartCol)).pdispVal); vResult = range.GetValue(); CString str; if(vResult.vt == VT_BSTR) //字符串 str = vResult.bstrVal; else if (vResult.vt == VT_R8) //8字节的数字 str.Format("%f", vResult.dblVal); else if(vResult.vt == VT_DATE) //时间格式 { SYSTEMTIME st; VariantTimeToSystemTime(vResult.date, &st); } else if(vResult.vt == VT_EMPTY) //单元格空的 str = ""; //读取第一个单元格的对齐方式,数据类型:VT_I4,读取水平对齐方式 range.AttachDispatch(wssMysheet.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) { case 1: //默认 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; } } //设置第一个单元格的值"HI,EXCEL!" range.SetItem(COleVariant(long(1)),COleVariant(long(1)),COleVariant("HI,EXCEL!")); //设置第一个单元格字体颜色:红色// CFont font;// range.AttachDispatch(wssMysheet.GetCells());// range.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);// font(COleVariant((long)0xFF0000)); //合并单元格的处理,包括判断第一个单元格是否为合并单元格,以及将第一个单元格进行合并 Range unionRange; range.AttachDispatch(wssMysheet.GetCells()); unionRange.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal ); vResult = unionRange.GetMergeCells(); if(vResult.boolVal == -1) //是合并的单元格 { //合并单元格的行数 range.AttachDispatch(unionRange.GetRows()); long iUnionRowNum=range.GetCount(); //合并单元格的列数 range.AttachDispatch(unionRange.GetColumns()); long iUnionColumnNum=range.GetCount(); //合并区域的起始行,列 long iUnionStartRow=unionRange.GetRow(); //起始行,从1开始 long iUnionStartCol=unionRange.GetColumn(); //起始列,从1开始 } else if(vResult.boolVal == 0) { //不是合并的单元格,将第一个单元格合并成2行,3列 range.AttachDispatch(wssMysheet.GetCells()); unionRange.AttachDispatch(range.GetItem(COleVariant((long)1),COleVariant((long)1)).pdispVal ); unionRange.AttachDispatch(unionRange.GetResize(COleVariant((long)2),COleVariant((long)3))); unionRange.Merge(COleVariant((long)0)); //合并单元格 } //将文件保存为*.xls m_ExcelApp.SetVisible(TRUE); CString strtmp = m_strPath.Left(m_strPath.ReverseFind('.')) + ".xls";//这里应该确保strtmp为有效路径,否则的话该函数会自己处理异常,导致以后的语句没有执行,没有关闭打开的文档 wbMyBook.SaveAs(COleVariant(strtmp),covOptional,covOptional, covOptional,covOptional,covOptional,0, covOptional,covOptional,covOptional,covOptional); //关闭所有的book,退出Excel wbMyBook.Close(covOptional, COleVariant(""), covOptional); wbsMyBooks.Close(); //m_ExcelApp.Quit();
阅读全文
0 0
- Delphi操作excel说明
- C++操作Excel说明
- 操作Excel(C#)
- 操作Excel(C#)
- [转贴]操作Excel(C#)
- 操作Excel(C#)
- 操作Excel(C#)
- 操作Excel(C#)
- 操作Excel(C#)
- 操作Excel(C#)
- C#.Net操作Excel
- 操作Excel(C#)
- 操作Excel(C#)
- 操作Excel(C#)
- C#Excel操作类
- C#,Excel操作
- c++Builder操作Excel
- C++Builder操作Excel
- libsvm中数据归一化的重要性
- 基于ros系统下使用Android应用 Make nav进行地图加载和导航
- anroid studio 快捷键 全解
- Keras 和 tensorflow安装过程中的小问题
- Nginx的基本原理
- C++操作Excel说明
- Nginx + IIS 实现负载均衡
- python的一些面试资料
- python logging类库中RotatingFileHandler的使用
- Hive和Hbase之间的区别
- Android模拟器端口被占用解决
- C#字符串提取及转换
- Java虚拟机(四)垃圾收集算法
- TEST