注册 登录
编程论坛 VFP论坛

如何修改代码,点击班级生成相应班级课表?

王咸美 发布于 2022-04-24 15:28, 2092 次点击
如何修改代码,点击班级生成相应班级课表? 涉及到年级、班级两个节点,实在不会,请行家赐教,万分感谢!!!
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录


OleControl1.NodeClick代码:
*** ActiveX 控件事件 ***
LPARAMETERS node
CLOSE DATABASES
wjm="F:\temp2\jkbmb3.doc"  && 班级课程表模板(含有标题行的空表)
PUBLIC cnj,cbj,cxkmc,i
WordApp=CREATEOBJECT("Word.application")   
WordApp.Visible =.t.

SELECT 0
Use jsrkb20190101 alias bjb

cnj=bjb.nj
cbj=bjb.bj
  && 红色代码不知如何修改,请高手指教!

WAIT WINDOW '正在生成"  '+cnj+cbj+'  "的日课表……' NOWAIT
SELECT * from kb20190101 where nj=cnj and bj=cbj into cursor bjkb
SELECT bjkb
WordTable=WordApp.Application.Documents.Open(wjm)    && 关键
wordapp.selection
wordapp.Selection.InsertAfter(ALLTRIM("&cnj&cbj"))     && 在模板文件标题行插入年级、班级
SELECT bjkb
FOR i=1 TO 5
  FOR j=1 TO 6
     cxkmc=ALLTRIM(EVALUATE("bjkb."+"zhou"+TRANSFORM(i)+TRANSFORM(j)))
     WordTable.Tables.item(1).Cell(j*2,i+2).Range.Text=cxkmc
     SELECT bjb
     FOR k=1 to FCOUNT()
      IF FIELD(k)=cxkmc
       WordTable.Tables.item(1).Cell(j*2+1,i+2).Range.Text=EVALUATE(FIELD(k))
      ENDIF
     ENDFOR
   ENDFOR
  endfor
  SELECT bjkb
  USE
  SELECT bjb
  WAIT CLEAR  

  filename="F:\temp2\"+cnj+cbj+"课程表.doc"
  WordApp.ActiveDocument.PrintOut
  WordApp.Documents(1).SaveAs(filename)  &&自动保存文件
  WordApp.ActiveDocument.Close


wordapp.application.quit
messagebox("班级日课表的WORD文档生成完毕!",64,"提示:")
return


[此贴子已经被作者于2022-4-24 15:30编辑过]

10 回复
#2
王咸美2022-04-25 16:18
问题已解决
** ActiveX 控件事件 ***
LPARAMETERS node
CLOSE DATABASES
wjm="F:\temp2\bjkbmb3.doc"  && 班级课程表模板(含有标题行的空表)
PUBLIC cnj,cbj,cxkmc,i
WordApp=CREATEOBJECT("Word.application")   
WordApp.Visible =.t.
SELECT 0
Use jsrkb20190101 alias bjb
LOCATE FOR ALLTRIM(bjb.NJ)==ALLTRIM(node.parent.Text) AND ALLTRIM(bjb.BJ)==ALLTRIM(Node.text)
IF FOUND()
cnj=ALLTRIM(Node.parent.Text)
cbj=ALLTRIM(Node.text)
WAIT WINDOW '正在生成"  '+cnj+cbj+'  "的日课表……' NOWAIT
SELECT * from kb20190101 where nj=cnj and bj=cbj into cursor bjkb
SELECT bjkb
WordTable=WordApp.Application.Documents.Open(wjm)    && 关键
wordapp.selection
wordapp.Selection.InsertAfter(ALLTRIM("&cnj&cbj"))     && 在模板文件标题行插入年级、班级
SELECT bjkb
FOR i=1 TO 5
  FOR j=1 TO 6
     cxkmc=ALLTRIM(EVALUATE("bjkb."+"zhou"+TRANSFORM(i)+TRANSFORM(j)))
     WordTable.Tables.item(1).Cell(j*2,i+2).Range.Text=cxkmc
     SELECT bjb
     FOR k=1 to FCOUNT()
      IF FIELD(k)=cxkmc
       WordTable.Tables.item(1).Cell(j*2+1,i+2).Range.Text=EVALUATE(FIELD(k))
      ENDIF
     ENDFOR
   ENDFOR
  endfor
  SELECT bjkb
  USE
  SELECT bjb
  WAIT CLEAR  

  filename="F:\temp2\"+cnj+cbj+"课程表.doc"
*  WordApp.ActiveDocument.PrintOut
  WordApp.Documents(1).SaveAs(filename)  &&自动保存文件
  WordApp.ActiveDocument.Close


wordapp.application.quit
messagebox("班级日课表的WORD文档生成完毕!",64,"提示:")
ENDIF

#3
ljlhpop2022-04-25 17:08
老师真厉害!!!!!
#4
fyyylyl2022-04-27 17:10
只有本站会员才能查看附件,请 登录
将教师任课表、班级课程表合二为一。
在表单上显示WORD文档:
1、使用WEBBROWSE控件:出现打开提示窗口目前找不到好的解决办法;
2、使用WORD控件:没有类似VALUE、CONTROLSOURCE的属性,试了使用OPEN打开文档后全选复制,模拟键盘粘贴到WORD控件对象中可显示,但还是不太理想。
以上问题盼有高手出手解决。

[此贴子已经被作者于2022-4-28 08:56编辑过]

#5
王咸美2022-04-28 13:34
@fyyylyl 谢谢!!!非常有用,值得学习借鉴。
#6
xuminxz2022-04-28 15:38
回复 4楼 fyyylyl
没明白你说的“打开提示窗口”指的是什么?运行程序没有问题啊。只是建议加一个SET SAFETY OFF 。改写临时文件不需要确认吧。
#7
fyyylyl2022-04-28 16:04
回复 6楼 xuminxz
#8
fyyylyl2022-04-28 16:16
不太理解楼主为什么不使用报表或直接打印WORD文档而非得显示WORD文档后再打印?使用模板也得写代码啊!
#9
fyyylyl2022-04-29 17:46
试了一下,可先将WORD文档转存为网页文件oWord.Active.Documents.SaveAs(cFileName,9),使用WEB BROWSE控件显示;或转存为PDF文件oWord.Active.Documents.SaveAs(cFileName,17)使用PDF控件显示。
#10
ljlhpop2022-04-29 20:17
回复 9楼 fyyylyl
新手一个,,,,弱弱问下,,按您的意思是说可以把模版WORD 转换为PDF 文件? 然后VFP 可以把需要的文字啥的,打印到PDF 的控件里面? 就像VFP 自带的域控件一样简单?
#11
fyyylyl2022-04-30 20:10
回复 10楼 ljlhpop
是的,按模板生成word文档然后另存为pdf文件,然后利用pdf控件在表单中显示。
1