马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?站点注册
×
向上级部门上报报表是很常见的,其中不乏有复杂报表,最近,在客户需求中有这样一例,每月都需上报报表(国家统一格式),虽然本地已有了MIS,但每月上报不得不将报表打印出来,通过邮局邮寄给上级部门,现想将报表导出成单一的文件(常见文件格式,最好能用Office打开),通过邮件上报。起初,马上就想到了数据窗口的Saveas(),但是细分析,报表格式复杂,Saveas根本实现不了,于是想到了编程写入Excel中,同样,由于格式复杂,VBA的编程量也很大,如合并列、拆分列等,于是想到了先生成WMF文件,再贴到WORD中的办法,(上级部门不要求数据可编辑),实现效果很好。代码如下 if dw_1.rowcount() = 0 then return int li_ret,value oleObject lo_Word //ole对象 string docname,named value = GetFileSaveName("另存为", docname, named, "DOC", & "Word文档(*.DOC), *.DOC") IF value <> 1 THEN Return end if if FileExists(docname) then if messagebox('提示','文件已经存在要覆盖吗?',question!,yesno!,2) = 1 then filedelete(docname) else return end if end if //生成WMF临时文件,这种方法不完美,应该取Windows的临时目录和空的临时文件ID if fileexists("C:\windows\temp\yyglgzyb.wmf") then filedelete ("C:\windows\temp \yyglgzyb.wmf" ) dw_1.SaveAs("C:\windows\temp\yyglgzyb.wmf", WMF!, true) //打开Word文件 lo_Word = CREATE OLEObject li_Ret = lo_Word.ConnectToObject("","word.application") IF li_Ret <> 0 THEN //没有打开则新建 li_Ret = lo_Word.ConnectToNewObject("word.application") if li_Ret <> 0 then MessageBox('OLE错误','OLE无法连接,错误ID:' + string(li_Ret)+'可能是Word安装不正确!') return end if END IF /////////////////////VBA,设置纸张为A3横向///////////////////////////// lo_word.Documents.Add() lo_Word.ActiveDocument.PageSetup.LineNumbering.Active = False lo_Word.ActiveDocument.PageSetup.Orientation = 1 //以下注释行为设置页边距,可以不用,使用缺省值。 //lo_Word.ActiveDocument.PageSetup.TopMargin = CentimetersToPoints(3.17) //lo_Word.ActiveDocument.PageSetup.BottomMargin = CentimetersToPoints(3.17) //lo_Word.ActiveDocument.PageSetup.LeftMargin = CentimetersToPoints(2.54) //lo_Word.ActiveDocument.PageSetup.RightMargin = CentimetersToPoints(2.54) //lo_Word.ActiveDocument.PageSetup.Gutter = CentimetersToPoints(0) //lo_Word.ActiveDocument.PageSetup.HeaderDistance = CentimetersToPoints(1.5) //lo_Word.ActiveDocument.PageSetup.FooterDistance = CentimetersToPoints(1.75) lo_Word.ActiveDocument.PageSetup.PageWidth = 1190.55 lo_Word.ActiveDocument.PageSetup.PageHeight = 841.9 lo_Word.ActiveDocument.PageSetup.FirstPageTray = 0 lo_Word.ActiveDocument.PageSetup.OtherPagesTray = 0 lo_Word.ActiveDocument.PageSetup.SectionStart = 2 lo_Word.ActiveDocument.PageSetup.OddAndEvenPagesHeaderFooter = False lo_Word.ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter = False lo_Word.ActiveDocument.PageSetup.VerticalAlignment = 0 lo_Word.ActiveDocument.PageSetup.SuppressEndnotes = False lo_Word.ActiveDocument.PageSetup.MirrorMargins = False lo_Word.ActiveDocument.PageSetup.TwoPagesOnOne = False lo_Word.ActiveDocument.PageSetup.GutterOnTop = False lo_Word.ActiveDocument.PageSetup.CharsLine = 99 lo_Word.ActiveDocument.PageSetup.LinesPage = 42 /////////////////////////////////////////////////////////////////////// ////////////////////////VBA,插入图片////////////////////////////// lo_Word.ActiveDocument.Shapes.AddPicture("C:\windows\temp\yyglgzyb.wmf", False, True) //保存 lo_Word.ActiveDocument.saveas(docname) lo_Word.DisconnectObject() 曾有人说不会VBA,其实你完全不需要去记这些方法、函数,你想要实现什么功能,可以用宏来录制你的操作,然后编辑宏,就可以看到VBA的代码了,而且这些代码从字义上就可看出它是做什么的了。 |