用Word中表格进行打印

说明:

GetFileFromCursor()

一个自定义函数,它将从一个含有G字段的临时表中,从G字段中取出其中包含的文件,保存为指定的文件。这个临时表需要已经打开,并且有记录。在这里,这个函数默认将数据按Zip格式处理,文件导出后进行解压缩然后再删除相应的Zip文件。

NewCurName()

生成一个唯一不重复的临时表名,使用'cur'+Sys(2015)实现

GDX()

返回一个数值的大写格式,含十百千万等 

Lparameters c代码,n采购批次

*-------------------------------------------------------------------------------

*指定一个招标文件模板,和一个采购批次号

*在模板中生成相应的招标分包表

*要点:招标文件模板第二张表格必需是一个分包的格式

*如果文件是Excel,则不作处理,仅仅打开这个Excel.

*如果文件不是一个Doc文件,或者这个Doc里没有第二张表格,不生成相应的表格.

*c代码 : 对应 kzx_027中的 代码 字段值

If Type('m.c代码')#'C' Then       ReturnEndifIf (Type('m.n采购批次')#'N')Or(n采购批次<=0) Then       <a>  ReturnEndif*****************************************取出目标文件Local cDocFileLocal nSelect,cAlias,cSPTm.nSelect = Select()m.cAlias = NewCurName()TEXT To m.cSPT TextMerge NoShowSelect 文件名,文件 From Kzx_027 Where 代码 = '<<m.c代码>>'ENDTEXTSelect 0SQLExec(_Screen.ConnHandle,m.cSPT,m.cAlias)If Used(m.cAlias) Then       If Reccount() > 1 Then               GetFileFromCursor(m.cAlias,'文件',Alltrim(Evaluate(m.cAlias+'.文件名')))       Endif       Use In (m.cAlias)EndifSelect (m.nSelect)*****************************************读出分包数据Local nSelect,cAlias,cSPTm.nSelect = Select()m.cAlias = NewCurName()TEXT To m.cSPT TextMerge NoShowSelect 所属分包,包内序号,名称,规格,数量      From KZX_016      Where 采购批次=<<m.n采购批次>>        And 偏移状态 Like '%2%'      Order By 所属分包,包内序号ENDTEXTSelect 0SQLExec(_Screen.ConnectHandle,m.cSPT,m.cAlias)If Not Used(m.cAlias) Then       *不能打开数据       Select (m.nSelect)       ReturnEndif*****************************************在Word或者Excel中打开这个文件m.cDocFile = Addbs(Home())+'Doc\'+m.cDocFileIf Upper(Justext(m.cDocFile))='XLS' Then       Local oApp As EXCEL.Application       m.oApp = Createobject('Excel.Application')       m.oApp.Workbooks.Open(m.cDocFile)       *-------------------------------------       *在此预写数据       *-------------------------------------       m.oApp.Visible = .T.       Release oAppElse       Local oApp As Word.Application       Local oWordDoc As Word.Document       Local oWordTable As Word.Table       Local oPrgrfStart As Word.Paragraph && 表格前的一段 (第 x 包)       Local oPrgrfEnd As Word.Paragraph && 表格前的一段 (注:)       Local oPrgrfNow As Word.Paragraph       Local oWordFormat1 As Word.ParagraphFormat       Local oWordFormat2 As Word.ParagraphFormat
       m.oApp = Createobject('WORD.Application')       *-------------------------------------       *在此预写数据       m.oApp.Documents.Open(m.cDocFile)       If m.oApp.Documents.Count > 0 Then               m.oWordDoc = m.oApp.Documents(1) && 要操作的文档               If m.oWordDoc.Tables.Count => 2 Then                       m.oWordTable = m.oWordDoc.Tables(2) && 要操作的表格                       Do While m.oWordTable.Rows.Count > 2 Then                               m.oWordTable.Rows(3).Delete                       Enddo                       && 清空第二行                       Local iCol                       For iCol = 1 To m.oWordTable.Columns.Count                               If iCol<> 5 Then                                       m.oWordTable.Cell(2,m.iCol).Range.Text=''                               Endif                       Next                       *复制表格到剪帖板                       m.oWordTable.Select                       m.oApp.Selection.Copy                       m.oApp.Selection.Cut                       *逐包生成表格                       Local n分包数,i分包,n条目数,i包内序号,oPrgrfNow                       Calculate Max(所属分包) To m.n分包数                       For i分包 = 1 To m.n分包数                               If i分包 <> 1 Then                                       m.oApp.Selection.TypeText('第 '+GDX_(m.i分包,,0)+' 包')                               Endif                               m.oApp.Selection.Paste                               If i分包 <> m.n分包数 Then                                       m.oApp.Selection.TypeText('注'+Chr(13)+Chr(10))                               Endif                       Next                       For i分包 = 1 To m.n分包数                               Calculate Cnt() To m.n条目数 For 所属分包 = m.i分包                               m.oWordTable = m.oWordDoc.Tables(i分包+1)                               With m.oWordTable                                       If m.n条目数 > 1 Then                                               m.oWordTable.Select                                               *生成所需使用的列                                               m.oApp.Selection.InsertRowsBelow(m.n条目数 - 1)                                               *合并第五列                                               m.oWordDoc.Range(.Cell(2,5).Range.Start,;                                                       .Cell(m.n条目数+1,5).Range.End).Cells.Merge                                       Endif                                       *写分包数据                                       i包内序号 = 1                                       Scan For 所属分包 = m.i分包                                               .Cell(m.i包内序号+1,1).Range.Text=Transform(m.i包内序号)                                               .Cell(m.i包内序号+1,2).Range.Text=Alltrim(名称)                                               .Cell(m.i包内序号+1,3).Range.Text=Strtran(Alltrim(规格),;                                                       Chr(13)+Chr(10),;                                                       '')                                               .Cell(m.i包内序号+1,4).Range.Text=Alltrim(Str(数量,18,2))                                               m.i包内序号 = m.i包内序号 + 1                                       Endscan && 所属分包 = m.i分包                               Endwith                       Next && i分包 = 1 To m.n分包数               Endif && m.oWordDoc.Tables.Count => 2       Endif && m.oApp.Documents.Count       *-------------------------------------       m.oApp.Visible = .T.       Release oWordTable       Release oWordDoc       Release oAppEndif
Use In (m.cAlias)Select (m.nSelect)Return

猫猫的心里话

加菲猫的VFP|狐友会社群接收投稿啦

加菲猫的VFP,用VFP不局限VFP,用VFP混合一切。无论是VFP,还是JS,还是C,只要能混合起来,都可以发表。

商业模式,销售技巧、需求规划、产品设计的知识通通可以发表。

暂定千字50元红包,,优秀的文章红包更大,一经发表,红包到手。

如何帮助使用VFP的人?

用VFP的人,有专业的,有非专业了,很多人其实是小白,问出的问题是小白,如果问题不对,我们引导他们问正确的问题。无论如何请不要嘲笑他们说帮助都不看,这么简单的问题都不会,嘲笑别人不行,而无法提出建设性答案,是很low的。

我们无论工作需要,还是有自己的软件,都是是需要真正的知识,如何让更多人学习真正的VFP知识呢,只需要点赞,在看,能转发朋友圈就更好了。

加菲猫的vfp倡导用"VFP极简混合开发,少写代码、快速出活,用VFP,但不局限于VFP,各种语言混合开发"

我已经带领一百多名会员成功掌到VFP的黑科技,进入了移动互联网时代,接下来我们要进入物联网领域。

2025年狐友会社群会员继续招募中

社群会员获取的权益有:

祺佑三层开发框架商业版(猫框),终身免费升级,终身技术支持。

开放的录播课程有:

微信小程序,微信公众号开发,H5 APP开发,Extjs BS开发,VFP面向对象进阶,VFP中间层开发。

源码类资源有:

支付组件源码,短信源码,权限组件源码,一些完整系统的源码。这个可以单独出售的,需要的可以联系我。

会员也可以实现群内资源对接,可以接分包,合作等各项商业或技术业务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值