| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 96 人关注过本帖
标题:如何用jsrkb20190101中的”班会”替换word文档中的”ABCDEF”
只看楼主 加入收藏
王咸美
Rank: 1
等 级:新手上路
帖 子:697
专家分:3
注 册:2018-1-4
结帖率:97.63%
收藏
 问题点数:20 回复次数:6 
如何用jsrkb20190101中的”班会”替换word文档中的”ABCDEF”
下列程序中,如何添加代码,用jsrkb20190101中的”班会”替换word文档中的”ABCDEF”,请高手赐教,谢谢!
图片附件: 游客没有浏览图片的权限,请 登录注册

模板文件:
图片附件: 游客没有浏览图片的权限,请 登录注册

如何用jsrkb20190101中的“班会”替换ABCDEF
图片附件: 游客没有浏览图片的权限,请 登录注册


程序代码:
CLOSE DATABASES
CLEAR ALL
SET SAFETY OFF
* cPath=ADDBS(JUSTPATH(SYS(16)))
cPath="F:\temp19\班级课表"
SET DEFAULT TO (cPath)
wjm="F:\temp19\bjkbmb.doc"
PUBLIC cnj,cbj,cxkmc,i,j
wordApp=CREATEOBJECT("word.Application")
wordApp.Visible=.t.
USE F:\temp19\jsrkb20190101.dbf ALIAS jsrkb IN 0
SCAN  for RECNO()<5
  cnj=jsrkb.nj
  cbj=jsrkb.bj
  cxm=jsrkb.班会
  WAIT WINDOW '正在生成" '+cnj+cbj+' "的日课表...' nowait
  SELECT * FROM F:\temp19\rkzb20190101 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 jsrkb
      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 jsrkb
  WAIT clear
  cFileName=cPath+"\"+cnj+cbj+"课程表.doc"
  * wordApp.ActiveDocument.PrintOut
  wordApp.Documents(1).SaveAs(cFileName)
  wordApp.ActiveDocument.Close
 ENDSCAN
 wordApp.Application.Quit
 MESSAGEBOX("班级日课表的word文档生成完毕!",64,"提示:")
 RETURN


[此贴子已经被作者于2025-3-25 10:47编辑过]

昨天 10:43
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2254
专家分:4013
注 册:2007-4-27
收藏
得分:0 
程序代码:
请给一句将WORD文档中指定字符“ABC”替换为“客观”二字的VFP代码

已深度思考(用时 17 秒)
好的,用户需要的是在VFP中将Word文档中的“ABC”替换为“客观”的代码。首先,我得确定VFP如何操作Word文档。VFP通常通过COM自动化来控制Office应用,所以应该使用CreateObject或者GetObject来连接Word。

接下来,用户可能希望打开指定的文档,或者当前打开的文档?这里可能需要明确是否需要打开特定文件,还是处理当前打开的文档。假设用户是要处理特定的文档,所以需要提供文件路径。不过原问题中没有提到路径,可能需要用户自己修改代码中的路径部分。

然后,替换操作在Word中可以通过Find和Execute方法来实现。需要用到Range对象的Find属性。正确的语法应该是设置查找的文本、替换的文本,以及各种参数如是否匹配大小写、全字匹配等。但用户可能只需要简单替换,所以默认参数可能就够了。

另外,是否需要保存文档?用户可能希望替换后保存,但原问题中没有说明,所以代码中可能不包含保存和退出的步骤,或者需要添加注释让用户自行决定是否保存。

还需要考虑错误处理,比如Word是否已经打开,文档是否存在等。不过用户可能只需要基础代码,所以这部分可能被省略,但最好提醒用户注意这些情况。

最后,确保代码示例正确,比如使用oWord.Selection.Find正确设置替换参数,使用Replace参数为2(wdReplaceAll)来替换所有实例。可能需要引用Word的常量,或者使用对应的数值,比如2代表全部替换。

总结步骤:创建Word对象,打开文档,执行替换,关闭文档。然后给出示例代码,并解释关键部分,让用户可以根据需要调整路径和其他参数。

可以使用VFP的COM自动化操作Word对象,以下是替换指定字符的代码示例:

foxpro
复制
LOCAL oWord, oDoc
oWord = CREATEOBJECT("Word.Application")
oWord.Visible = .T.  && 设置可见性(调试时可设为.T.)

* 打开指定文档(请修改实际路径)
oDoc = oWord.Documents.Open("D:\test.docx")

WITH oWord.Selection.Find
    .Text = "ABC"     && 查找内容
    .Replacement.Text = "客观"  && 替换内容
    .Execute(,,,,,,, 2)  && 参数2表示全部替换
ENDWITH

* 保存并关闭(按需取消注释)
* oDoc.[color=#0000FF]Save()[/color]
* oDoc.[color=#0000FF]Close()[/color]
* oWord.Quit()


deepseek 给的代码,测试没成功,不知道为什么

只求每天有一丁点儿的进步就可以了
昨天 14:41
王咸美
Rank: 1
等 级:新手上路
帖 子:697
专家分:3
注 册:2018-1-4
收藏
得分:0 
不能解决问题
昨天 16:18
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:873
专家分:1357
注 册:2021-10-13
收藏
得分:0 
求助DS,搞定。

程序代码:
CLEAR ALL
LOCAL oWord, oDoc
oWord = CREATEOBJECT("Word.Application")

TRY
    oDoc = oWord.Documents.Open("D:\Documents\test.docx")
    oWord.Visible = .T.

    * 2. 执行查找操作
    WITH oDoc.Content.Find
        .Text = "ABC"
        .Replacement.Text = "Sam_Jiang"
        .Execute(, , , , , , , , , , 2)
    ENDWITH

CATCH TO ex
    MESSAGEBOX("错误: " + ex.Message)

FINALLY
    * 3. 确保释放所有对象
    IF TYPE("oDoc") = "O" AND NOT ISNULL(oDoc)
        oDoc.Close(.T.)  && 保存关闭
        oDoc = .NULL.
    ENDIF
    IF TYPE("oWord") = "O" AND NOT ISNULL(oWord)
        oWord.Quit
        oWord = .NULL.
    ENDIF
ENDTRY



昨天 16:59
王咸美
Rank: 1
等 级:新手上路
帖 子:697
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!

昨天 17:38
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2254
专家分:4013
注 册:2007-4-27
收藏
得分:0 

终于 测试成功了,语句次序问题,让人不知因果!!!

程序代码:

CLOSE DATABASES
CLEAR ALL
SET SAFETY OFF
cPath=ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cPath)
wjm=cpath+"bjkbmb.docx"
PUBLIC cnj,cbj,cxkmc,i,j
wordApp=CREATEOBJECT("word.Application")
wordApp.Visible=.t.
USE jsrkb20190101.dbf ALIAS jsrkb IN 0
SCAN  for RECNO()<5
  cnj=jsrkb.nj
  cbj=jsrkb.bj
  cxm=jsrkb.班会
  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")) && 执行了此句,查找替换就不行了
  WITH WordApp.selection.Find
    .Text = "ABCDEF"        && 查找内容
    .Replacement.text= cxm  && 替换内容
    .Execute(,,,,,,,,,,2)   && 参数2表示全部替换 
  ENDWITH
   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 jsrkb
      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 jsrkb
  WAIT clear
  cFileName=cPath+"\"+cnj+cbj+"课程表.doc"
  * wordApp.ActiveDocument.PrintOut
  wordApp.Documents(1).SaveAs(cFileName)
  wordApp.ActiveDocument.Close
ENDSCAN
wordApp.Application.Quit
MESSAGEBOX("班级日课表的word文档生成完毕!",64,"提示:")
RETURN


只求每天有一丁点儿的进步就可以了
4 小时前
王咸美
Rank: 1
等 级:新手上路
帖 子:697
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!
2 小时前
快速回复:如何用jsrkb20190101中的”班会”替换word文档中的”ABCDEF”
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019744 second(s), 11 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved