打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C++读写EXCEL文件

  编程笔记--excel 连接MFC (vs2010)(一)

  2012-11-06 14:15阅读:

  要实现,将excel 与MFC 连接,并且对txt文件中的信息进行筛选后显示到新建的excel表中。

  前提条件:电脑上已经安装了某版本的offic。我安装的是offic 2007.

  主要步骤:

  1. 创建新的C++工程

  创建基于对话框的MFC程序

  2. 添加库、添加Excel类库

  选择“项目”-》“类向导”-》添加类-》选择“数据库中的MFC类”,

  类来源选“注册表”,在可用的类型库中选择“Microsoft Excel 11.0 ObjectLibrary”(或者 类来源选“文件”,在当地磁盘中,按照offic的安装路径(如:C:\ProgramFiles\MicrosoftOffice\Office12)找到excel.exe,双击选中),在接口列表框中选择需要的类,在此,我们选择_Application,_Workbook,Worksheet,Range,Workbooks,Worksheets这六个就可以了。

  X

  可以看到,六个类被添加了进来。

  3. 修改头文件

  分别将加进来的六个头文件上面的“#import 'C:\\Program Files\\MicrosoftOffice\\OFFICE11\\EXCEL.EXE' no_namespace”注释掉。

  4. 添加头文件

  在stdAfx.h头文件中添加加进来的这几个头文件

  #include 'CApplication.h'

  #include 'CRange.h'

  #include

  加载中...

  内容加载失败,点击此处重试

  加载全文

  'CWorkbook.h'

  #include 'CWorkbooks.h'

  #include 'CWorksheet.h'

  #include 'CWorksheets.h'

  5. 修改错误

  编译,会出现两个错误:

  …\crange.h(335): warning C4003: “DialogBoxW”宏的实参不足

  …\crange.h(335): error C2059: 语法错误:“,”

  双击错误提示,定位在错误行,

  VARIANT DialogBox()

  {

  VARIANT result;

  InvokeHelper(0xf5, DISPATCH_METHOD, VT_VARIANT, (void*)&result,NULL);

  return result;

  }

  将该函数名“DialogBox()”前面加“_”下划线,即“_DialogBox()”,这样就可以编译成功了。

  ////////////////////////////////////////////////////////////

  //实现新建一Excel文件(存在则覆盖),并向文件中写入数据。

  //////////////////////////////////////////////////////////////////////////////////////

  //excel 格式

  //////////////////////////////////////////////////////////////////////////////////////

  COleVariant

  covTrue((short)TRUE),

  covFalse((short)FALSE),

  covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

  CApplication app;

  CWorkbook book;

  CWorkbooks books;

  CWorksheet sheet;

  CWorksheets sheets;

  CRange range;

  CFont0 font;

  if (::CoInitialize( NULL ) == E_INVALIDARG)

  {

  AfxMessageBox(_T('初始化Com失败!'));

  }

  if (!app.CreateDispatch(_T('Excel.Application')))

  {

  MessageBox(_T('Error!Create Excel Application ServerFaile!'));

  }

  //////////////////////////////////////////////

  ////////////////////////////////////////////////

  books = app.get_Workbooks();

  //books.AttachDispatch(app.get_Workbooks());可代替上面一行

  book = books.Add(covOptional);

  //book.AttachDispatch(books.Add(covOptional),true); 可代替上面一行

  sheets=book.get_Worksheets();

  //sheets.AttachDispatch(book.get_Worksheets(),true); 可代替上面一行

  sheet = sheets.get_Item(COleVariant((short)1));

  //添加工作表的名称

  LPCTSTR st=strtime;

  sheet.put_Name(st);

  ////////////////////////////////////////////////////////////

  VARIANT varUnit;

  VariantInit(&varUnit);

  varUnit.vt = VT_I4;

  varUnit.lVal = 15;

  range =sheet.get_Range(COleVariant(_T('A1')),COleVariant(_T('D2')));

  range.Merge(covOptional);

  font = range.get_Font();

  font.put_Name(COleVariant(_T('黑体')));

  font.put_Size(varUnit);

  range.put_Value2(COleVariant(_T('刷写日志')));

  varUnit.lVal = -4108;//水平:-4131靠左;-4152靠右。垂直:-4160靠上;-4107靠下。

  range.put_HorizontalAlignment(varUnit); //xlCenter 水平居中

  range.put_VerticalAlignment(varUnit);//xlCenter 垂直居中

  //////////////////////////////////////////////////////////////

  range =sheet.get_Range(COleVariant(_T('A3')),COleVariant(_T('D3')));

  range.Merge(covOptional);

  font = range.get_Font();

  font.put_Name(COleVariant(_T('宋体')));

  varUnit.lVal = 10;

  font.put_Size(varUnit);

  CString strdate;

  strdate = '日期:';

  strdate +=strtime;

  range.put_Value2(COleVariant(strdate));

  //设置表头

  range.put_Item(_variant_t((long)2),_variant_t((long)1),_variant_t(_T('时间')));//行号,列号,内容

  range.put_Item(_variant_t((long)2),_variant_t((long)2),_variant_t(_T('设备号')));

  range.put_Item(_variant_t((long)2),_variant_t((long)3),_variant_t(_T('刷写情况')));

  range.put_Item(_variant_t((long)2),_variant_t((long)4),_variant_t(_T('失败原因')));

  //设置列宽

  range =sheet.get_Range(COleVariant(_T('A1')),COleVariant(_T('C1')));

  range.put_ColumnWidth(_variant_t((long)15));

  range =sheet.get_Range(COleVariant(_T('D1')),COleVariant(_T('D1')));

  range.put_ColumnWidth(_variant_t((long)40));

  range =sheet.get_Range(COleVariant(_T('A1')),COleVariant(_T('D1')));

  ///////////////////////////////////

  CString sumstr,rowstr,endstr;

  CString sr;

  rowstr.Format(_T('%d'),(int)row);

  sumstr='A';

  sumstr+=rowstr;

  endstr= 'D';

  endstr +=rowstr;

  range =sheet.get_Range(COleVariant(sumstr),COleVariant(endstr));

  range.Merge(covOptional);

  font = range.get_Font();

  font.put_Name(COleVariant(_T('宋体')));

  varUnit.lVal = 10;

  font.put_Size(varUnit);

  sumstr.Format(_T('%d'),sum);

  sr='刷写总次数:';

  sr +=sumstr;

  range.put_Value2(COleVariant(sr));

  row++;

  /////////////////////////////////////////

  rowstr.Format(_T('%d'),(int)row);

  sumstr='A';

  sumstr+=rowstr;

  endstr= 'D';

  endstr +=rowstr;

  range =sheet.get_Range(COleVariant(sumstr),COleVariant(endstr));

  range.Merge(covOptional);

  font = range.get_Font();

  font.put_Name(COleVariant(_T('宋体')));

  varUnit.lVal = 10;

  font.put_Size(varUnit);

  sumstr.Format(_T('%d'),pass);

  sr='刷写成功次数:';

  sr +=sumstr;

  range.put_Value2(COleVariant(sr));

  row++;

  /////////////////////////////////////////

  rowstr.Format(_T('%d'),(int)row);

  sumstr='A';

  sumstr+=rowstr;

  endstr= 'D';

  endstr +=rowstr;

  range =sheet.get_Range(COleVariant(sumstr),COleVariant(endstr));

  range.Merge(covOptional);

  font = range.get_Font();

  font.put_Name(COleVariant(_T('宋体')));

  varUnit.lVal = 10;

  font.put_Size(varUnit);

  sumstr.Format(_T('%d'),fail);

  sr='刷写失败次数:';

  sr +=sumstr;

  range.put_Value2(COleVariant(sr));

  row++;

  /////////////////////////////////////////////////////////

  //显示表格

  app.put_Visible(TRUE);

  //保存

  CString strFile = _T('D:\\WriteToExcelTest.xlsx');

  strFile = 'D:\\';

  strFile +=strtime;

  strFile +='.xlsx';

  book.SaveCopyAs(COleVariant(strFile));

  book.put_Saved(true);

  //结尾,释放

  book.ReleaseDispatch();

  books.ReleaseDispatch();

  app.ReleaseDispatch();

  app.Quit();

  分享

  我的博客

  微博

  微信

  朋友圈

  4

  N

  同时转发到微博

  发送
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
VS2008平台下,MFC操作EXCEL简单示例
java2Word
VC操作Excel的方法
VC控制EXCEL的基本操作之设置篇
使用VC++操作Excel文件 - 我不会飞 - 博客大巴
安全数组操作excel
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服