使用VC 6.0实现自动生成Word表格

最近在VC6.0 环境下开发一个管理系统,界面开发花了不少功夫却感觉华而不实,自动生成word表格的功能实现了,倒觉得蛮实用的

(1)首先,向你的项目中添加word 2003类型库:方法是在MFC ClassWizard中点击按钮Add Class,选择From a type library,在弹出的浏览对话框中,浏览找到office 2003安装路径下的msword.olb文件,例如:"C:/Program Files/Microsoft Office/OFFICE11/MSWORD.OLB",然后选择所需要的类(参考第(3)步),确定

(2)在使用到这些类型的类的头文件或者cpp文件的开头,包含以下头文件:#include "msword.h"

(3)定义对象

  _Application     oWordApp;
 Documents        oDocs;
 _Document        oDoc;
 Range            range;
 Paragraph        paragraph;
 Paragraphs       paragraphs;
 Cell             cell;
 Cells            cells;
 Table            table;
 Tables           tables;
 Border           border;
 Borders          borders;
 _Font            font;
 PageSetup        pagesetup;

(4)创建或者连接word对象:初始化连接,判断当前系统是否有word进程,然后然后创建或连接对象。

 LPDISPATCH   pDisp;          LPUNKNOWN    pUnk;             CLSID        clsid;
 CoInitialize(NULL);
 CLSIDFromProgID(L"Word.Application",&clsid);
 if(GetActiveObject(clsid,NULL,&pUnk)==S_OK)
 {
  pUnk-> QueryInterface(IID_IDispatch,(void **)&pDisp);
  oWordApp.AttachDispatch(pDisp);
 }  
 else
 {
  if(!oWordApp.CreateDispatch("Word.Application"))
  {
   AfxMessageBox("创建Word服务失败!"); 
   return FALSE;
  }
 }

(5)初始化文档,生成WORD表格

 oDocs.ReleaseDispatch();
 oWordApp.m_bAutoRelease=true;
 BeginWaitCursor();
 oDocs=oWordApp.GetDocuments();
 COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);
 oDoc=oDocs.Add(vOpt,vOpt,vOpt,vOpt);//加新文档
 pagesetup=oDoc.GetPageSetup();
 pagesetup.SetOrientation(1);//横向
 paragraphs=oDoc.GetParagraphs(); //生成第一个表
 paragraph=paragraphs.GetLast();//以当前段落最后一行为表起始位置
 range=paragraph.GetRange();
 //添加制作新表格
 tables=oDoc.GetTables();
 table=tables.Add(range,5+nBhCount,6,vOpt,vOpt);
 borders=table.GetBorders();
 borders.SetEnable(1);//显示表框
 range=table.GetRange();
 cells=range.GetCells();
 cells.SetVerticalAlignment(1);//文字居中
 cells.SetWidth(DOC_TABLE1_WIDTH); 
 cell=table.Cell(1,1);//合并第一行的三列
 cell.Merge(table.Cell(1,6));
 range=cell.GetRange();
 range.SetBold(1);
 range.SetText("                                         病害统计信息");//居中
 cell=table.Cell(2,1);
 cell.Merge(table.Cell(2,2));
 range=cell.GetRange();
 range.SetBold(1);
 range.SetText("组成材料");
 cell=table.Cell(2,2);
 cell.Merge(table.Cell(2,4));
 range=cell.GetRange();
 range.SetBold(1);
 range.SetText("病害种类");
 cell=table.Cell(2,3);
 range=cell.GetRange();
 range.SetBold(1);
 range.SetText("病害总数");
 for(int iBh=0;iBh<nBhCount;iBh++)
 {
  cell=table.Cell(2+iBh+1,1);
  cell.Merge(table.Cell(2+iBh+1,2));
  range=cell.GetRange();
  range.SetBold(0);
  range.SetText(psDataArray.GetAt(iBh*3));
  cell=table.Cell(2+iBh+1,2);
  cell.Merge(table.Cell(2+iBh+1,4));
  range=cell.GetRange();
  range.SetBold(0);
  range.SetText(psDataArray.GetAt(iBh*3+1));
  cell=table.Cell(2+iBh+1,3);
  range=cell.GetRange();
  range.SetBold(0);
  range.SetText(psDataArray.GetAt(iBh*3+2));    
 }
 cell=table.Cell(3+nBhCount,1);//合并7列
 cell.Merge(table.Cell(3+nBhCount,6));
 range=cell.GetRange();
 range.SetBold(1);
 range.SetText("                                       等级统计信息");
 for(int iCol=1;iCol<=6;iCol++)
 {
  cell=table.Cell(3+nBhCount+1,iCol);
  range=cell.GetRange();
  range.SetBold(1);
  range.SetText(strDjColArray[iCol-1]);
  cell=table.Cell(3+nBhCount+2,iCol);
  range=cell.GetRange();
  range.SetBold(0);
  range.SetText(strDjArray[iCol-1]); 
 }

(6)保存,清理

 CString   strSave=m_strFilePath+"//"+m_strFileName;
    COleVariant vTrue((short)TRUE), vFalse((short)FALSE);
 _Document oActiveDoc;

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值