说明:
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中间层开发。
源码类资源有:
支付组件源码,短信源码,权限组件源码,一些完整系统的源码。这个可以单独出售的,需要的可以联系我。
会员也可以实现群内资源对接,可以接分包,合作等各项商业或技术业务