祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 5673|回复: 0

[转帖]复杂报表另存为的技巧一例

[复制链接]

[转帖]复杂报表另存为的技巧一例

[复制链接]
ehxz

主题

0

回帖

58万

积分

管理员

积分
588671
贡献
在线时间
小时
2007-6-26 12:53:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×

向上级部门上报报表是很常见的,其中不乏有复杂报表,最近,在客户需求中有这样一例,每月都需上报报表(国家统一格式),虽然本地已有了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的代码了,而且这些代码从字义上就可看出它是做什么的了。

共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-11-24 22:14 , Processed in 0.030672 second(s), 8 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表