18 个解决方案
#1
http://www.moon-soft.com/doc/1876.htm
http://www.docin.com/p-101005005.html
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);
这个是我想控制翻页
//禁止双击打开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
你想要的是我在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
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);
这个是我想控制翻页
//禁止双击打开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
你想要的是我在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个月过去了,楼主还安好么?有时间把帖子结了好不好?