请教BCB版主:ole操作word 先写一段文字,再插入表格,然后再写一段文字实例代码

时间:2022-03-08 21:39:36
求救:ole 控制word操作,先写一段文字,再插入表格,然后再写一段文字 

18 个解决方案

#1


http://www.moon-soft.com/doc/1876.htm
http://www.docin.com/p-101005005.html

#2


这个需求很简单啊。你最后要输入的一段文字,是要写在表格中,还是表格的后面?

#3


OLE专业户来也!!!
Variant vWordApp;
try
{
    vWordApp = Variant::CreateObject("Word.Application");
}
catch(...)
{
    MessageBox(0, "启动 Word 出错, 可能是没有安装Word.",
            "错误", MB_OK | MB_ICONERROR);
    return;
}

// 显示Word界面
vWordApp.OlePropertySet("Visible", true);
// 新建一个文档
vWordApp.OlePropertyGet("Documents").OleFunction("Add");
//
Variant vSelect = vWordApp.OlePropertyGet("Selection");

// 插入一段文字
String str1 = "要插入的第一段文字\r\n换一个行先";
vSelect.OleProcedure("TypeText", WideString(str1));
vSelect.OleProcedure("TypeParagraph");

// 插入一个表格
int nRowCount = 4; // 行
int nColCount = 5; // 列
vWordApp.OlePropertyGet("ActiveDocument").OlePropertyGet("Tables")
        .OleProcedure("Add", vSelect.OlePropertyGet("Range"),
        nRowCount, nColCount,
        1, // DefaultTableBehavior:=wdWord9TableBehavior
        0); // AutoFitBehavior:=wdAutoFitFixed

// 将光标移到文档结尾
vWordApp.OlePropertyGet("Selection").OleProcedure("EndKey", 6); //wdStory

// 再插入一段文字
String str2 = "要插入的第二段文字";
vSelect.OleProcedure("TypeText", WideString(str2));

#4


妖哥 我这边OleContainer 显示内容为什么只能一页 看过你写的delphi代码 但是OleContainer1->OleObject.OlePropertySet("Visible",false); 程序运行报错

#5


具体报什么错?OleContainer中是否有正确的对象?

#6


OleContainer 中 我想显示一个word 它只能显示一页 
//禁止双击打开word编辑
olefm->OleContainer1->AutoActivate = aaManual;
//禁止右键菜单
olefm->OleContainer1->AutoVerbMenu = False;
olefm->OleContainer1->CreateObject("Word.Application", False);
//olefm->OleContainer1->Visible = false;
olefm->OleContainer1->CreateLinkToFile(wordfilename,false);
olefm->OleContainer1->DoVerb(ovHide);
这个是我想控制翻页 

#7


不好意思 我的分不够 发不了贴 希望妖哥能帮忙

#8


我没有太明白楼上的意思。OleContainer装载Word文档成功了没有?你要用什么来实现翻页呢?

#9


装载成功 但是没有 滚动条显示 而且也只能显示一页 不知道怎么实现滚动

#10


我研究了一下, 目前可以实现: 以只读的方式在OleContainer中打开指定的Word文档, 有滚动条, 可用鼠标滚轮滚动页面, 可选择/复制. 不过就是打开的时候会有工具栏之类的闪烁一下.

需要代码就吱一声.

#11


妖哥 提供一下c++ builer  窗体调用word文档代码

#12


引用 11 楼 zhuhuning 的回复:
妖哥 提供一下c++ builer  窗体调用word文档代码


你想要的是我在10楼说的代码吗?

#13


妖哥  是这样的 我想实现打开word窗体的代码 目前我的ole只能显示word一页,不是调用office word软件打开方式 ,是在本窗体调用 office为2007

#14



OleContainer1->CreateObjectFromFile(wordfilename,false);
//OleContainer1->DoVerb(0);
//OleContainer1->CreateObject("Word.Document", false);
OleContainer1->DoVerb(ovInPlaceActivate);
Variant vObj = OleContainer1->OleObject;
int nCmdBarCount = vObj.OlePropertyGet("CommandBars").OlePropertyGet("Count");
for (int i =0; i < nCmdBarCount; i++)
{
vObj.OlePropertyGet("CommandBars", i + 1).OlePropertySet("Enabled", false);
}

这个代码实现了 嵌入窗体  但是功能区隐藏 不能实现

#15


先用我的代码试试再说效果。
#include <OleIdl.h>

void __fastcall CrnOpenDocReadOnly(TOleContainer *oc, String strDocFile)
{
    oc->AutoActivate = aaManual;
    oc->AutoVerbMenu = false;

    oc->CreateObjectFromFile(strDocFile, false); // CreateLinkToFile
    oc->DoVerb(ovOpen);

    oc->OleObject.OlePropertyGet("Application")
            .OlePropertyGet("ActiveDocument")
            .OleProcedure("Protect", true);

    if (oc->State == osUIActive)
    {
        IOleInPlaceObject *ioip;
        if (SUCCEEDED(oc->OleObjectInterface->QueryInterface(
                IID_IOleInPlaceObject, (void **)&ioip)))
        {
            ioip->UIDeactivate();
            ioip->Release();
        }
    }
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    String strDocFile = "D:\\ccrun\\123.doc";
    CrnOpenDocReadOnly(OleContainer1, strDocFile);
}

#16


谢谢 妖哥 代码可以了 

#17


参考下,目前正在用,以前妖哥帮助很多!!

#18


15个月过去了,楼主还安好么?有时间把帖子结了好不好?

#1


http://www.moon-soft.com/doc/1876.htm
http://www.docin.com/p-101005005.html

#2


这个需求很简单啊。你最后要输入的一段文字,是要写在表格中,还是表格的后面?

#3


OLE专业户来也!!!
Variant vWordApp;
try
{
    vWordApp = Variant::CreateObject("Word.Application");
}
catch(...)
{
    MessageBox(0, "启动 Word 出错, 可能是没有安装Word.",
            "错误", MB_OK | MB_ICONERROR);
    return;
}

// 显示Word界面
vWordApp.OlePropertySet("Visible", true);
// 新建一个文档
vWordApp.OlePropertyGet("Documents").OleFunction("Add");
//
Variant vSelect = vWordApp.OlePropertyGet("Selection");

// 插入一段文字
String str1 = "要插入的第一段文字\r\n换一个行先";
vSelect.OleProcedure("TypeText", WideString(str1));
vSelect.OleProcedure("TypeParagraph");

// 插入一个表格
int nRowCount = 4; // 行
int nColCount = 5; // 列
vWordApp.OlePropertyGet("ActiveDocument").OlePropertyGet("Tables")
        .OleProcedure("Add", vSelect.OlePropertyGet("Range"),
        nRowCount, nColCount,
        1, // DefaultTableBehavior:=wdWord9TableBehavior
        0); // AutoFitBehavior:=wdAutoFitFixed

// 将光标移到文档结尾
vWordApp.OlePropertyGet("Selection").OleProcedure("EndKey", 6); //wdStory

// 再插入一段文字
String str2 = "要插入的第二段文字";
vSelect.OleProcedure("TypeText", WideString(str2));

#4


妖哥 我这边OleContainer 显示内容为什么只能一页 看过你写的delphi代码 但是OleContainer1->OleObject.OlePropertySet("Visible",false); 程序运行报错

#5


具体报什么错?OleContainer中是否有正确的对象?

#6


OleContainer 中 我想显示一个word 它只能显示一页 
//禁止双击打开word编辑
olefm->OleContainer1->AutoActivate = aaManual;
//禁止右键菜单
olefm->OleContainer1->AutoVerbMenu = False;
olefm->OleContainer1->CreateObject("Word.Application", False);
//olefm->OleContainer1->Visible = false;
olefm->OleContainer1->CreateLinkToFile(wordfilename,false);
olefm->OleContainer1->DoVerb(ovHide);
这个是我想控制翻页 

#7


不好意思 我的分不够 发不了贴 希望妖哥能帮忙

#8


我没有太明白楼上的意思。OleContainer装载Word文档成功了没有?你要用什么来实现翻页呢?

#9


装载成功 但是没有 滚动条显示 而且也只能显示一页 不知道怎么实现滚动

#10


我研究了一下, 目前可以实现: 以只读的方式在OleContainer中打开指定的Word文档, 有滚动条, 可用鼠标滚轮滚动页面, 可选择/复制. 不过就是打开的时候会有工具栏之类的闪烁一下.

需要代码就吱一声.

#11


妖哥 提供一下c++ builer  窗体调用word文档代码

#12


引用 11 楼 zhuhuning 的回复:
妖哥 提供一下c++ builer  窗体调用word文档代码


你想要的是我在10楼说的代码吗?

#13


妖哥  是这样的 我想实现打开word窗体的代码 目前我的ole只能显示word一页,不是调用office word软件打开方式 ,是在本窗体调用 office为2007

#14



OleContainer1->CreateObjectFromFile(wordfilename,false);
//OleContainer1->DoVerb(0);
//OleContainer1->CreateObject("Word.Document", false);
OleContainer1->DoVerb(ovInPlaceActivate);
Variant vObj = OleContainer1->OleObject;
int nCmdBarCount = vObj.OlePropertyGet("CommandBars").OlePropertyGet("Count");
for (int i =0; i < nCmdBarCount; i++)
{
vObj.OlePropertyGet("CommandBars", i + 1).OlePropertySet("Enabled", false);
}

这个代码实现了 嵌入窗体  但是功能区隐藏 不能实现

#15


先用我的代码试试再说效果。
#include <OleIdl.h>

void __fastcall CrnOpenDocReadOnly(TOleContainer *oc, String strDocFile)
{
    oc->AutoActivate = aaManual;
    oc->AutoVerbMenu = false;

    oc->CreateObjectFromFile(strDocFile, false); // CreateLinkToFile
    oc->DoVerb(ovOpen);

    oc->OleObject.OlePropertyGet("Application")
            .OlePropertyGet("ActiveDocument")
            .OleProcedure("Protect", true);

    if (oc->State == osUIActive)
    {
        IOleInPlaceObject *ioip;
        if (SUCCEEDED(oc->OleObjectInterface->QueryInterface(
                IID_IOleInPlaceObject, (void **)&ioip)))
        {
            ioip->UIDeactivate();
            ioip->Release();
        }
    }
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    String strDocFile = "D:\\ccrun\\123.doc";
    CrnOpenDocReadOnly(OleContainer1, strDocFile);
}

#16


谢谢 妖哥 代码可以了 

#17


参考下,目前正在用,以前妖哥帮助很多!!

#18


15个月过去了,楼主还安好么?有时间把帖子结了好不好?