今天做了一个输出报表的模块,要用程序输出到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;
}
分享到:
相关推荐
以上就是在VC++中控制Excel进行单元格合并的基本步骤。在实际开发中,可能还需要处理错误、释放资源、自动化其他Excel功能等复杂情况。例如,当操作完成后,记得关闭工作簿和退出Excel应用: ```cpp pWorkbook->...
在VC++环境中,创建Excel表格并进行格式设置如字体、背景色、边框以及合并单元格,是一项常见的任务。这通常涉及到Microsoft Office自动化接口的使用,即通过COM(Component Object Model)组件来调用Excel应用程序...
7. **合并单元格**:`pCell->Merge(pCell2)`可以将当前单元格与另一个单元格合并。`pCell`和`pCell2`是相邻的TableCell对象。 8. **页眉和页脚设置**:`pSection->Headers->wdHeaderFooterPrimary->Range->Text = L...
在VC++环境中,如果你想要在已经打开的Microsoft Word文档中,光标所在的位置插入图片,你需要使用OLE自动化技术来操作Word。以下是一个简单的步骤和关键代码片段解释: 1. **初始化Word应用程序对象**: 首先,你...
这个压缩包文件包含了多个源代码文件,用于演示如何使用C++来新建、保存Word文档,创建表格,修改表格,格式化单元格以及填充页眉和页脚。下面将详细介绍这些知识点: 1. **新建Word文档**: 使用`...
本示例涉及的知识点主要包括使用C++的Microsoft Office Interop库(也称为COM接口)来控制Word应用程序,创建表格,导入数据,合并单元格以及编辑眉页。下面将详细阐述这些知识点。 1. **Microsoft Office Interop...
CGridCtrl 工程,可以修改表格颜色,合并单元格,设置表格为日期,下拉框选择框等
用vc实现串口通信的完整代码.rar用vc实现串口通信的完整代码.rar用vc实现串口通信的完整代码.rar用vc实现串口通信的完整代码.rar用vc实现串口通信的完整代码.rar用vc实现串口通信的完整代码.rar用vc实现串口通信的...
VC 6.0 利用Word文档实现打印功能,本示例是将需要打印的内容导入到Word文档中,然后直接打开Word文档,用户通过Word选择打印功能,打印出内容,其核心的打印是由word完成的,因此你的电脑上需要安装有Word,并且与...
在VC++(Visual C++)开发环境中,与Word交互并实现指定位置插入图片的功能,主要涉及到Microsoft Office自动化接口的应用。这个过程通常通过COM(Component Object Model)组件来完成,使用了Microsoft的`Document ...
本例中的VC代码就是通过Automation调用Word对象来完成图片插入的。 #### 代码解析 在提供的代码示例中,`CDlg::OnBnClickedButton()` 函数负责响应按钮点击事件,其内部实现了向Word文档插入图片的功能: 1. **...
例如,这个文件可能包含了初始化Word对象,创建新文档,打开已有文档,插入文本,设置格式,保存文件等功能的实现代码。开发者在自己的项目中只需包含`msword.h`,然后调用这些预定义好的函数,就可以方便地控制Word...
创建单元格和合并单元格是处理Word表格的重要部分。在Word中,可以创建新的单元格,调整其大小,甚至合并相邻的单元格以形成更大的单元格。这对于格式化报告、制作表格和整理数据至关重要。通过DLL,开发者可以编写...
作者项目开发的程序中要实现将程序中数据,包含图片要导出到...主要介绍了QT程序中导出图片到EXCEL指定单元格的实现过程及源码, VC或其他编程语言同样可参考方法说明通过 Excel.Application导出图片到指定单元格。
在本文中,我们将深入探讨如何使用Microsoft Visual C++ 2010(简称VC2010)通过COM(Component Object Model)接口...通过深入学习和实践,你将能够实现更多复杂的Word操作,如插入表格、图片,以及应用样式和模板等。
这个库允许开发者通过代码操作Excel文件,包括设置单元格的字体、颜色、边框以及合并单元格等功能。以下是对这些知识点的详细说明: 1. **VC++与Excel交互**: VC++使用COM(Component Object Model)接口来与...
6. **插入图片**:`InlineShape.AddPicture`方法可以插入图片,并可以调整其大小和位置。 7. **需求规格说明和设计说明文档**:`报告自动生成器需求规格说明和设计说明文档1.1V.docx`是项目的重要组成部分,它详细...
这个控件提供了丰富的功能,如设置行列数、调整列宽行高、合并单元格以及实现可编辑性。以下将详细解释如何在VC++中使用FlexGrid控件。 首先,要在程序中使用FlexGrid控件,需要在资源视图中添加该控件,并给它分配...
本项目"vc往access数据库表中插入图片"显然关注的是如何通过VC++程序将图像数据存储到Access数据库的特定表中。Access的MDB文件是基于Jet数据库引擎的,它支持多种数据类型,包括BLOB(Binary Large Object)类型,...
Automation允许VC这样的宿主应用创建和控制Word实例,执行如打开、读取、编辑和保存文档等操作。通过`CoCreateInstance`函数创建Word应用程序对象,并使用IDispatch接口进行通信。 3. **引用Microsoft Office库**:...