读书人

OLE向word中插入表格的有关问题

发布时间: 2012-02-06 15:52:44 作者: rapoo

OLE向word中插入表格的问题
大家好,我这边正在做的案子碰到个问题:
1.OLE创建新doc档案
2.向doc档案写入string类型
3.向doc档案插入图片
4.向Word里面插入一个表格,然后给每个表格写值。
5.保存doc档案,退出。

问题是:每次到第四步的时候,那个表格就把2、3步的东西全覆盖了。。。
代码附下,请指教:

[code=C/C++][/code]
UReport.h
struct DOC_VAR
{
Variant word_app; //application
Variant word_docs; //文档对象
Variant word_doc;
Variant word_obj; //文档对象
Variant word_range; //range对象
Variant word_tables; //tables对象
Variant word_table; //table对象
Variant active_doc; //当前文档
Variant the_cell; //单元格对象
Variant cell_range; //单元格的范围
int cell_width ; //表格宽度
int cell_long ; //表格长度

};

DOC_VAR doc;

……
UReport.cpp
//---------------------------------------
bool __fastcall TFReport::CreateReport(AnsiString strMsg, REPORTTYPE tType)
{
//TODO: Add your source code here

CreateNew();

AddMsg(strMsg, tNormal);

AddPic("d:/case/test.gif");

TableNew();

return true;
}
//---------------------------------------
//---------------------------------------
bool __fastcall TFReport::CreateNew()
{
Doc.word_app=Variant::CreateObject("Word.application");
Doc.word_obj =CreateOleObject("Word.Basic");
Doc.word_docs=Doc.word_app.OlePropertyGet("documents");
Doc.word_docs.OleProcedure("add");
Doc.active_doc=Doc.word_app.OlePropertyGet("ActiveDocument");
Doc.word_range=Doc.active_doc.OleFunction("Range");
Doc.word_app.OlePropertySet("Visible",true);
}
bool __fastcall TFReport::AddMsg(AnsiString strMsg, dTYPE dType)
{
Doc.word_obj.Exec(Procedure("Insert") << strMsg);
return true;
}
//---------------------------------------
bool __fastcall TFReport::AddPic(AnsiString PicPath)
{
Doc.word_app.OlePropertyGet("Selection").OlePropertyGet("InlineShapes").OleFunction("AddPicture",
PicPath.c_str(), false, true);
return true;
}
//---------------------------------------
bool __fastcall TFReport::TableNew()
{
//
Doc.word_tables=Doc.word_range.OlePropertyGet("Tables");
Doc.word_table=Doc.word_tables.OleFunction("Add",Doc.word_range,10,5);
Procedure InsertAfter("InsertAfter");
InsertAfter.ClearArgs();
}
……


[解决办法]
向Word插入表格以前,先将光标移到文档结尾:

C/C++ code
// 将光标移到文档结尾Doc.word_app.OlePropertyGet("Selection").OleProcedure("EndKey", 6); //wdStory// 根据需要是否换行,如果需要,则:Doc.word_app.OlePropertyGet("Selection").OleProcedure("TypeParagraph"); 

读书人网 >C++ Builder

热点推荐