如何用delphi的OLEContainer操控MS Word?
在网上搜了一些资料,但都觉得很零乱,也没有找到很好方法,请给出好的完整解决方法来,最好有成功的代码例子,重分酬谢!
在delphi 7里用OLEContainer控件连接好MS Word后,Word工具栏的[文件]部分不见了,我是用自己加的Menu控件设置了[文件]部分,但是就要对它进行写[新建]、[打开]、[保存]、[另存]、[页面设置]、[打印]及[打印预览]等部分,我已经做好了[保存]和[打开]部分,其他部分还没有做出来。请高手不吝赐教,谢谢!
还有希望跟数据库连接在一起,作出来的文档可以保存在数据库里,也可以从数据库里调出来编辑等。
谢谢!
很紧迫的问题,希望今天晚上10点之前有圆满的回复。
如果觉得分太少,我可以另开贴给分,但是只要你做出来就给分!
谢谢关注!!!
[解决办法]
var
myWorkBook:Variant;
mySheet:Variant;
begin
OleContainer1.CreateObjectFromFile( 'c:/aaa.xls ',true);
OleContainer1.DoVerb(ovShow);
myWorkBook := OleContainer1.OleObject;
mySheet := myWorkBook.ActiveSheet;
//另存
myWorkBook.Application.Dialogs.Item[xlDialogSaveAs].Show();
//页面设置
myWorkBook.Application.Dialogs.Item[xlDialogPageSetup].Show();
//打印
myWorkBook.Application.Dialogs.Item[xlDialogPrint].Show();
//打印预览(在容器里面没有办法,需另存为文件再预览)
{
//把下面C++Builder代码翻译为Delphi即可
String TempDir;
char tmp[255];
GetTempPath(255, tmp);
TempDir = StrPas(tmp);
String FileName = TempDir + "temp_forPrintPreview.xls ";
DeleteFile(FileName.c_str());
m_WorkBook.OleFunction( "SaveAs ",FileName.c_str());
OleContainer1-> Close();
Variant ExcelApp = Variant::CreateObject( "Excel.Application ");
ExcelApp.OlePropertySet( "Visible ",true);
ExcelApp.OlePropertyGet( "WorkBooks ").OleProcedure( "Open ",FileName.c_str());
Variant Dialog = ExcelApp.OlePropertyGet( "Dialogs ").OlePropertyGet( "Item ",xlDialogPrintPreview);
Dialog.OleFunction( "Show ");
ExcelApp.OleFunction( "Quit ");
ExcelApp = Unassigned;
///删除临时文件
OleContainer1-> CreateObjectFromFile(FileName,false);
OleContainer1-> DoVerb(ovShow);
myWorkBook = OleContainer1-> OleObject;
mySheet= myWorkBook.OlePropertyGet( "ActiveSheet ");
DeleteFile(FileName.c_str());
}
end;
[解决办法]
如果要使用事件,则由于Servers面板中的控件已经导入好事件定义,因此可以
var
myExcelApplication : TExcelApplication;
myExcelWorkBook : TExcelWorkBook;
myExcelWorkSheet : TExcelWorkSheet;
begin
myExcelApplication.Connect();
myExcelApplication.Visible[0] := true;
myExcelWorkBook.ConnectTo(myExcelApplication.Workbooks.Open(strFileName,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0));
myExcelWorkBook.OnSheetBeforeDoubleClick := ExcelWorkbook1SheetBeforeDoubleClick;
myExcelWorkBook.OnSheetBeforeRightClick := ExcelWorkbook1SheetBeforeRightClick;
myExcelWorkSheet := myExcelWorkBook.ActiveSheet as _WorkSheet;
....
end;
[解决办法]
好东西,我也收藏下
[解决办法]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, OleCtnrs, OleServer, Word2000;
type
TForm1 = class(TForm)
OleContainer1: TOleContainer;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
WordDocument1: TWordDocument;
Button1: TButton;
WordApplication1: TWordApplication;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure setWordBars(Target: TOleContainer; Show: Boolean);
begin
try
Target.OleObject.ActiveWindow.DisplayRulers := Show;
Target.OleObject.CommandBars[ 'Menu Bar '].Enabled := Show;
Target.OleObject.CommandBars[ 'Standard '].Enabled := Show;
Target.OleObject.CommandBars[ 'Formatting '].Enabled := Show;
Target.OleObject.CommandBars[ 'Drawing '].Enabled := Show;
except
ShowMessage(Exception(ExceptObject()).Message);
end;
end;
procedure OpenWordFile(Target: TOleContainer; WordFile: string);
begin
Screen.Cursor := crHourGlass;
try
Target.DestroyObject;
if FileExists(WordFile) then
begin
Target.CreateObjectFromFile(WordFile, False);
Target.DoVerb(ovPrimary);
end
except
Screen.Cursor := crDefault;
end;
Screen.Cursor := crDefault;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
OpenWordFile(OleContainer1, 'c:\1.doc ');
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
setWordBars(OleContainer1, FALSE);
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
setWordBars(OleContainer1, true);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
WordRepTemp, wordApp: olevariant;
fn: olevariant;
begin
WordRepTemp := OleContainer1.OleObject;
WordApp := WordRepTemp.Application;
WordDocument1.ConnectTo(IUnknown(WordRepTemp) as _Document);
WordApplication1.ConnectTo(WordDocument1.Application);
// fn := 'c:\2.doc ';
// WordDocument1.SaveAs(fn);
WordDocument1.PrintOutOld;
///////////////////////////////////////////////////////
end;
end.
[解决办法]
关注,帮顶~!
[解决办法]
我向你推荐一个写好了的例子:
http://www.firebird.net.cn/down_view.asp?id=213
袖珍文档管理系统源码,是李维论坛IB斑竹的杰作:
http://liwei.csdn.net/Forum/board.aspx?boardid=12
[解决办法]
这是一个完整的基于OLE的Word文档管理系统。有了它,你什么问题都不用问了。
[解决办法]
我提供的连源代码都有,难道还不够吗?如果我不告诉你,你也不知道有这个东西啊!
[解决办法]
在文档中搜索字符串
OleContainer1.OleObject.Application.ActiveWindow.ActivePane.view.Zoom.Percentage:=85//调整显示比例;
//查找待搜索的字符
OleContainer1.OleObject.Application.Selection.find.ClearFormatting;
OleContainer1.OleObject.Application.Selection.find.Text:=widestring(KeyStr);
OleContainer1.OleObject.Application.Selection.find.Forward:=True;
OleContainer1.OleObject.Application.Selection.find.Wrap:= 1;
OleContainer1.OleObject.Application.Selection.find.Execute ;
[解决办法]
这恐怕你得问它的原作者了。得到李维FireBird论坛上问。
------解决方案--------------------
同意楼上
[解决办法]
呵呵
关注一下,顶起来,都来灌水!~