VC 创建WORD ,合并单元格,插入图片.

今天做了一个输出报表的模块,要用程序输出到WORD中,在网上找了半天,大多是VB代码,杂而且乱,尤其是合并单元格,几乎找不到有用的信息。所幸最终还是写了出来,拿来和大家分享一下,也可以少走些弯路。

 

一。 打开类向导->ClassInfo->Add class->From a type library 

      

        在WORD的安装目录下,找到msword.olb  加入以下类

      

_Application (word 实例)

Documents

_Document

Range

Tables

Table

Cells

Cell

Columns

Column

Selection         

InlineShapes   (用于插入图片)

 

 

 

二,代码实现。

#define  ERROR_CREATEFAIL 1
#define  ERROR_WRITEFAIL 2
#ifndef  ERROR_SUCESS
#define  ERROR_SUCESS  0
#endif

 

 

int MakeReport( LPCTSTR strFileName, LPCTSTR strImageName)
{
 
 COleVariant vTrue((short)TRUE), vFalse((short)false), vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
 _Application oWordApp;
 if(!oWordApp.CreateDispatch("Word.Application", NULL))
 {
  return ERROR_CREATEFAIL;
 }
 Documents oDocs;
 _Document oDoc;
 Range  wordRange;
 Tables  tables;
 Table  table;
 Cells  wordCells;
 Cell  wordCell;
 Columns  wordColumns;
 Column  wordColumn;
 
 try{

  oDocs = oWordApp.GetDocuments();
  oDoc = oDocs.Add(vOpt, vOpt, vOpt, vOpt);
  Selection oSel;
  oSel = oWordApp.GetSelection();
  tables = oDoc.GetTables();
  wordRange = oSel.GetRange();

  // 创建表格
  table = tables.Add(wordRange, 3, 10, vOpt, vOpt);
  table.SetAllowAutoFit(false);
  wordColumns = table.GetColumns();

  // 合并第一列
  wordColumn = wordColumns.Item(1);
  wordColumn.SetWidth(100);
  wordCells = wordColumn.GetCells();
  wordCells.Merge();
  wordRange.SetOrientation(1);
  wordCells.SetVerticalAlignment(1);
  wordRange.SetText("第一列");    

  // 合并三组标题
  /* ------------------------------- */
  wordCell = table.Cell(1, 2);
  wordRange = wordCell.GetRange();
  wordRange.SetText("A");  
  int iStart = wordRange.GetStart();
  wordCell = table.Cell(1, 4);                  
  wordRange = wordCell.GetRange();
  int iEnd = wordRange.GetEnd();
  wordRange.SetStart(iStart);
  wordRange.SetEnd(iEnd);
  wordCells = wordRange.GetCells();
  wordCells.Merge();


  wordCell = table.Cell(1, 3);                     //第二次合并时,前边已经只有两列了,所以从第三列开始
  wordRange = wordCell.GetRange();
  wordRange.SetText("B");
  iStart = wordRange.GetStart();
  wordCell = table.Cell(1, 5);
  wordRange = wordCell.GetRange();
  iEnd = wordRange.GetEnd();
  wordRange.SetStart(iStart);
  wordRange.SetEnd(iEnd);
  wordCells = wordRange.GetCells();
  wordCells.Merge();


  wordCell = table.Cell(1, 4);
  wordRange = wordCell.GetRange();
  wordRange.SetText("C"); 
  iStart = wordRange.GetStart();
  wordCell = table.Cell(1, 6);
  wordRange = wordCell.GetRange();
  iEnd = wordRange.GetEnd();
  wordRange.SetStart(iStart);
  wordRange.SetEnd(iEnd);
  wordCells = wordRange.GetCells();
  wordCells.Merge();

  /* ------------------------------- */

 

  // 写入数据
   ...

  ///

 

 


  //  插入图片
  Selection sel = oWordApp.GetSelection();
  sel.EndKey(COleVariant((short)6), COleVariant((short)0));
  sel.TypeParagraph();
  wordRange = sel.GetRange();
  InlineShapes iss  = wordRange.GetInlineShapes();
   iss.AddPicture(strImageName, vFalse, vTrue, vOpt);

  _Document oActiveDoc;
  oActiveDoc = oWordApp.GetActiveDocument();


  oActiveDoc.SaveAs(COleVariant(strFileName), COleVariant((short)0),
        vFalse, COleVariant(""), vTrue, COleVariant(""),
      vFalse, vFalse, vFalse, vFalse, vFalse,vFalse,vFalse,vFalse,vFalse,vFalse);
  

 }
 catch(CException *e)
 {
  e->ReportError();
  oWordApp.Quit(vFalse, vFalse, vFalse);
  return ERROR_WRITEFAIL;
 }
 oWordApp.Quit(vOpt, vOpt, vOpt);
 return ERROR_SUCESS;
}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值