怎样没人理我?能否打印、预览OleContainer中的电子表格?(250+100分)(250分)

  • 主题发起人 主题发起人 小菜
  • 开始时间 开始时间

小菜

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要在自己的 Form 中放入电子表格,并进行打印、预览。
我用了 OleContainer1.CreateObjectFromFile('c:/MySheet.xls',false);
OleContainer1.DoVerb(0);
可出来后工具栏上的打印、预览按钮都被禁用。
在程序中用VBA宏 ActiveWindow.SelectedSheets.PrintPreview 则得到一个提示
说 ‘类 sheets 的 PrintPreview 方法无效‘

怎样才能实现上述功能,请过往各位大侠指点指点,谢谢!
 
可怜,这么久了没有人理,我帮你提前,同时也回去看看
 
建议看看以前的一些问题,应该可以解决.
 
我看过一些资料,若把Excel放入OleContainer容器中,
则Excel的打印、预览功能都不可使用,并且在程序中
不可进行页面设置等的操作。如果你一定要预览、打印
不妨再开一个连接的OleObject,将内容转入外部的Excel中进行预览,
而打印可在内存中进行。不过这样有点麻烦了。
 
算了﹐你不如放一個ExcelApplication控件到表單里﹐也還不錯的。
以下是一個例程。改ExcelApplication名為EA1﹐
var aSheet:Variant;
begin
EA1.Connect;
EA1.Visible[0]:=False; /*設為隱藏模式﹐即加入Excel時﹐Excel不可見。*/
EA1.Workbooks.Add(xlWBATWorkSheet,0);
asheet:=EA1.Worksheets.Item[1];
PrnQuery.First;
for i:=1 to PrnQuery.FieldCount do
asheet.cells[1,i].Value:=PrnQuery.Fields[i-1].DisplayName;
for i:=1 to PrnQuery.RecordCount do
begin
for j:=1 to PrnQuery.FieldCount do
asheet.Cells[i+1,j].Value:=PrnQuery.Fields[j-1].AsString;
Application.ProcessMessages;
PrnQuery.Next;
end;
end;
SaveDialog.Execute;
if SaveDialog.FileName<>'noname' then begin
aSheet.SaveAs(SaveDialog.FileName);
ShowMessage('文件已保存為'+SaveDialog.FileName);
end;
aSheet.Application.Quit;
end;
就行了。
 
to seeseainwind:
请说说具体该怎样做好吗? 我是第一次接触OLE.先谢了!

to zhangkan:
我看了你的代码,好象是从外部导入文档,然后保存,并没有打印啊?

 
我也是初学,一起讨论了。
我想是这样的,将Excel 在外部启动,将你在OleContainer中的内容到入,同时启动Excel
的Preview功能,
//Preview
XLApp:=CreateOleObject('Excel.Application');
XLApp.Workbooks.Add(xlWBatWorkSheet);
InsertData;
PageSet;
XlApp.Visible:=True;
XlApp.Workbooks[1].WorkSheets[1].PrintPreview;
//Print
XLApp:=CreateOleObject('Excel.Application');
XLApp.Workbooks.Add(xlWBatWorkSheet);
InsertData;
PageSet;
XlApp.Visible:=False;
XlApp.Workbooks[1].WorkSheets[1].PrintOut;
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts:=False;
XLApp.Quit;
end;
你试一试吧!
 
非常感谢大家!
 
多人接受答案了。
 
seeseainwind:
还有100分,差点忘了,请到这里来拿.
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=34001
 
后退
顶部