首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

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

2012-02-06 
OLE向word中插入表格的问题大家好,我这边正在做的案子碰到个问题:1.OLE创建新doc档案2.向doc档案写入strin

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"); 

热点排行