deAngle deAngle
春心莫共花争发,一寸相思一寸灰
关注数: 39 粉丝数: 37 发帖数: 244 关注贴吧数: 44
delphi向excel写入宏代码,运行excel宏代码 procedure TForm1.Button2Click(Sender: TObject); var i: integer; PathName: string; oldcur: tcursor; FExcelApplication: TExcelApplication; FExcelWorkbook: TExcelWorkbook; FExcelWorksheet: TExcelWorksheet; xl: olevariant; V: _VBComponent; vArg1, vArg2, vArg3, vArg4, vArg5, vArg6, vArg7, vArg8, vArg9, vArg10, vArg11, vArg12, vArg13, vArg14, vArg15, vArg16, vArg17, vArg18, vArg19, vArg20, vArg21, vArg22, vArg23, vArg24, vArg25, vArg26, vArg27, vArg28, vArg29, vArg30: OLEVariant; begin try FExcelApplication := TExcelApplication.Create(nil); FExcelWorkbook := TExcelWorkbook.Create(nil); FExcelWorkSheet := TExcelWorksheet.Create(nil); except showmessage(*对不起,您没有安装Excel 2000!*); abort; end; vArg1 := EmptyParam; vArg2 := EmptyParam; vArg3 := EmptyParam; vArg4 := EmptyParam; vArg5 := EmptyParam; vArg6 := EmptyParam; vArg7 := EmptyParam; vArg8 := EmptyParam; vArg9 := EmptyParam; vArg10 := EmptyParam; vArg11 := EmptyParam; vArg12 := EmptyParam; vArg13 := EmptyParam; vArg14 := EmptyParam; vArg15 := EmptyParam; vArg16 := EmptyParam; vArg17 := EmptyParam; vArg18 := EmptyParam; vArg19 := EmptyParam; vArg20 := EmptyParam; vArg21 := EmptyParam; vArg22 := EmptyParam; vArg23 := EmptyParam; vArg24 := EmptyParam; vArg25 := EmptyParam; vArg26 := EmptyParam; vArg27 := EmptyParam; vArg28 := EmptyParam; vArg29 := EmptyParam; vArg30 := EmptyParam; FExcelApplication.Visible[0] := True; FExcelApplication.Connect; FExcelApplication.Caption := *test1*; FExcelApplication.Workbooks.Add(*d:\1.xls*, 0); FExcelWorkbook.ConnectTo(FExcelApplication.ActiveWorkbook); FExcelWorksheet.ConnectTo(FExcelWorkbook.Activesheet as _WorkSheet); V := FExcelWorkbook.VBProject.VBComponents.Add(1); V.name := *Module*; // V.CodeModule.AddFromString(*Public Sub test() * + #13 + *msgbox("test") * + #13 + *end sub*); V.CodeModule.AddFromFile(*d:\1.bas*); {动态加载宏除了的几种方法:V.CodeModule.AddFromString V.CodeModule.AddFromFile V.CodeModule.InsertLines } // FExcelApplication.Visible[0] := True; FExcelApplication.Run(*abc*, vArg1, vArg2, vArg3, vArg4, vArg5, vArg6, vArg7, vArg8, vArg9, vArg10, vArg11, vArg12, vArg13, vArg14, vArg15, vArg16, vArg17, vArg18, vArg19, vArg20, vArg21, vArg22, vArg23, vArg24, vArg25, vArg26, vArg27, vArg28, vArg29, vArg30); end; =========== 注: 1)、d:\1.xls 为任意建的一个空excel文件 2)、d:\1.bas 为用excel 宏录制的一段代码,其中有一个过程 abc(),宏代码如下(随便录的) Sub abc() Range("C4").Select ActiveCell.FormulaR1C1 = "1111" Range("C4").Select Selection.AutoFill Destination:=Range("C4:C10"), Type:=xlFillDefault Range("C4:C10").Select Range("D4").Select ActiveCell.FormulaR1C1 = "666" Range("D4").Select Selection.AutoFill Destination:=Range("D4:D10"), Type:=xlFillDefault Range("D4:D10").Select Range("C4:D10").Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With Range("D6").Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 255 .TintAndShade = 0 .PatternTintAndShade = 0 End With End Sub
打印图片向导(不使用ImageView_PrintTo ) 最近朋友需要一个图片浏览打印功能,必须delphi调用。网上找到cnpack包和graphicEx可以满足图片处理的需要。至于打印觉得最好调用window系统的打印向导。实际上像很多2345看图王之类的也是这样做的。 找了一下资料很多都是命令行调用的。 undll32.exe C:\\WINDOWS\\system32\\shimgvw.dll,ImageView_Fullscreen %1 undll32.exe C:\\WINDOWS\\system32\\shimgvw.dll,ImageView_Fullscreen %1 undll32.exe C:\\WINDOWS\\system32\\shimgvw.dll,ImageView_Fullscreen %1 rundll32.exe shimgvw.dll,ImageView_Fullscreen %1打开图片(成功) rundll32.exe shimgvw.dll,ImageView_PrintTo /pt “%1” “%2” 打印图片(只打印无向导,也就是很多人说的没反映) 打开进程管理器看了一下,第一条命令的进程为dllhost.exe。第二条命令的进程为explorer.exe。这大概就是调用不成功的原因。但注册表中的命令也确实是这样写的,可能是explorer是窗口程序,或是做了特殊的进程处理。 其它程序是怎么实现的呢?终于在百度经验里找到一篇“编程实现调用windows照片打印向导来打印图片“http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fjingyan.baidu.com%2Farticle%2Fb87fe19ebcb9fd521835689f.html&urlrefer=8cb87acc59922863f19d77e149253c28 在调试的时候分别进行了,mfc程序,win32控制台,和dll程序。mfc程序是成功的,但到了控制台程序里面又不能行了,进一步打印图片向导与窗口有关。最后做dll在delphi中调用也成功了。下面分享一下代码和演示
1 下一页