视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
PB数据窗口导出word
2025-09-24 06:28:33 责编:小OO
文档
Word操作之一

复杂报表另存为的技巧一例

向上级部门上报报表是很常见的,其中不乏有复杂报表,最近,在客户需求中有这样一例,每月都需上报报表(国家统一格式),虽然本地已有了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\emp\\yyglgzyb.wmf") then

filedelete("C:\\windows\emp\\yyglgzyb.wmf")

dw_1.SaveAs("C:\\windows\emp\\yyglgzyb.wmf

//打开Word文件

lo_Word = CREATE OLEObject

li_Ret = lo_Word.ConnectToObject("

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\emp\\yyglgzyb.wmf

lo_Word.ActiveDocument.saveas(docname)

lo_Word.DisconnectObject()

浙温_zhj(343097430) 21:33:00

Word操作之二

向word模板写数据

ole_object.Documents.open(ls_file)

// 定义书签

string ls_bookmark[]

ls_bookmark = {'name', 'sbrq', 'money', 'qx', 'dyrq'}

//====================================================================

if isvalid(w_temp_wait) then

w_temp_wait.st_1.text = '正在写入数据......'

end ifinteger i, j, li_column_count

long ll_row, ll_cc

string ls_temp

ll_row = dw_1.getrow()

li_column_count = integer(dw_1.object.datawindow.column.count)

for i = 1 to li_column_count - 1//不要第一列(序号字段)

// 获得显示值

ls_temp = 'evaluate("LookUpDisplay(#' + string(i + 1) + ')

ls_temp = dw_1.describe(ls_temp)

// messagebox('', dw_1.describe(ls_temp))

// 获得汉字个数

ll_cc = gf_chinesecount(ls_temp)

// 写入数据

ole_object.selection.goto(true,0,0,ls_bookmark[i])

ole_object.selection.typetext(ls_temp)

for j = 1 to ll_cc

ole_object.Selection.TypeBackspace()

next

next

if isvalid(w_temp_wait) then

w_temp_wait.st_1.text = '正在打印 Word 文档......'

end if

//======================打印 Word 模板, 退出==========================

ole_object.activedocument.printout(false)

ole_object.documents.close(false)

ole_object.quit()

ole_object.disconnectobject()

destroy ole_object

// 关闭提示窗口

close(w_temp_wait)

messagebox('', '打印成功')下载本文

显示全文
专题