`
mmdev
  • 浏览: 12848453 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

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_CREATEFAIL1
#define ERROR_WRITEFAIL2
#ifndef ERROR_SUCESS
#define ERROR_SUCESS0
#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;
}
DocumentsoDocs;
_DocumentoDoc;
RangewordRange;
Tablestables;
Tabletable;
CellswordCells;
CellwordCell;
ColumnswordColumns;
ColumnwordColumn;

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;
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics