| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1967 人关注过本帖, 1 人收藏
标题:求助 VFP 环境下控制 WORD 画线命令。
只看楼主 加入收藏
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:366
专家分:684
注 册:2014-4-9
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:4 
求助 VFP 环境下控制 WORD 画线命令。
各位大神:本人现在工作需要编写了一个小程序,直接将部分指定的数据从数据表中输出到WORD文档中,想在两条输出的数据之间输出一条直线,但不知道命令是怎么写,谢谢各位大神。
程序代码:
FOR J=1 TO ALEN(xy1,1)
   COUNT FOR xy=xy1(J,1) TO zrs
   INDEX on zymc TO zymc1 uniq
   COPY TO ARRAY zymc1 FIELDS zymc FOR xy=xy1(J,1)
   SET INDEX TO
   Word.Selection.Font.Size = 15  &&指定字号,9为小五号,10.5为五号,12为小四号
   Word.Selection.Font.Name = "黑体"  &&设置字体
   word.Selection.ParagraphFormat.Alignment=1
   word.Selection.TypeParagraph
   word.selection.typetext(ALLTRIM(xy1(J,1))+ALLTRIM(STR(YEAR(DATE())))+'届学位授予情况报告单')
   word.Selection.TypeParagraph
   word.Selection.TypeParagraph
   Word.Selection.Font.Size = 13.5  &&指定字号,9为小五号,10.5为五号,12为小四号
   Word.Selection.Font.Name = "仿宋_GB2312"  &&设置字体
   word.Selection.ParagraphFormat.Alignment=0
   word.selection.typetext(SPACE(4)+ALLTRIM(xy1(j,1))+"届"+ALLTRIM(STR(ALEN(zymc1,1)))+"个专业共"+ALLTRIM(STR(zrs))+"人,其中")
   FOR i=1 TO ALEN(zymc1,1)
       COUNT FOR zymc=zymc1(i,1) TO rs1
       word.selection.typetext(ALLTRIM(zymc1(i,1))+ALLTRIM(STR(rs1))+"人,")
   ENDFOR
   COUNT FOR DELETED() AND xy=xy1(j,1) TO brs
   word.selection.typetext("共"+ALLTRIM(STR(brs))+"人不能授予学位。")
   LOCATE FOR DELETED() AND xy=xy1(J,1)
   IF FOUND()
      word.selection.typetext("不能授予学位名单如下:")
      word.Selection.TypeParagraph
      word.selection.typetext("      学  号     姓  名        不能授予学位原因")
      Word.ActiveDocument.Shapes.AddLine( 6/0.035, 6/0.035, 9/0.035, 9/0.035) &&
      word.Selection.TypeParagraph
   ENDIF
   DO WHILE !EOF()
      word.Selection.TypeText('   '+ALLTRIM(xh)+"  "+SUBSTR(xm,1,8)+"  "+bz1)
      word.Selection.TypeParagraph
      &&想在这插入一条命令,每输出一条记录就输出一条直线。
      CONTINUE
   ENDDO
   Word.Selection.InsertBreak(1)
   RELEASE ZYMC1
ENDFOR
图片附件: 游客没有浏览图片的权限,请 登录注册

这是部分输出效果,就是想在每两个人之间画一直线。



[ 本帖最后由 wangzhiyi 于 2014-6-11 16:11 编辑 ]
搜索更多相关主题的帖子: 数据表 
2014-06-11 15:54
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:20 
程序代码:
Select Xm,Xx,Sfzh From A2261 Into Cursor Temp
IF Empty(Alias())
   MessageBox( "当前工作区没有打开工作表!",48,"不能生成表格")
EndIf
Wait "正在访问 Word 软件……" Window Nowait 
oWord=Createobject("Word.application") &&访问WORD
If Type("oWord")#"O"
   Wait Clear
   MessageBox( "访问Word失败!请检查你的系统是否正确安装 Word 软件!",48,"没有安装Word")
   Return 
EndIf 
Wait "正在生成表格……" Window Nowait 
*oWord.Visible =.T.
oWord.Caption =''
oWord.Documents.Add
oWord.Documents(1).Range.Text=ALIAS()
oWord.Documents(1).Range.Font.Size=15
oWord.Documents(1).Range.Font.Name="黑体"
oWord.Documents(1).Range.Paragraphs.Alignment= 1
oWordRang=oWord.Documents(1).Range(LENC(oWord.Documents(1).Range.Text)-1,LENC(oWord.Documents(1).Range.Text)-1)
WordTable=oWord.Documents(1).Tables.Add(oWordRang,RECCOUNT()+1,FCOUNT())
WordTable.Range.Paragraphs.Alignment= 0
WordTable.Range.Font.Name="宋体"
WordTable.Range.Font.Size=11
WordTable.Borders.Enable=1
WordTable.Borders(1).LineWidth = 12
WordTable.Borders(2).LineWidth = 12
WordTable.Borders(3).LineWidth = 12
WordTable.Borders(4).LineWidth = 12
WordTable.Rows(1).Borders(3).LineWidth = 12
WordTable.Rows(1).Range.Font.Bold=.T.
WordTable.Rows(1).Cells.VerticalAlignment= 1
WordTable.Rows(1).Range.Paragraphs.Alignment = 1
WordTable.Rows(1).HeadingFormat=.t.

For lnI=1 To Fcount()
    WordTable.Cell(1,lnI).Range.Text=Field(lnI)
    For lnJ=2 TO Reccount()+1
        Go lnJ-1
        WordCellText=EVALUATE(FIELD(lnI))
        Do Case 
           Case Isnull(WordCellText)
                WordCellText=""
           Case Type("WordCellText")="N"
           Case Type("WordCellText")="D"
                WordCellText=Dtoc(WordCellText)
           Case Type("WordCellText")="T"
                WordCellText=Ttoc(WordCellText)
           Case Empty(WordCellText)
                WordCellText=""
           Otherwise 
                * WordCellText=""
        Endcase 
        WordTable.Cell(lnJ,lnI).Range.Text=WordCellText
    Next 
    WordTable.Columns(lnI).AutoFit
Next 
WordTable.Rows.HorizontalPosition=-999995 && 表格水平居中
oWord.Documents(1).SaveAs("C:\Xwy.doc")
oWord.Quit
oWord=Null
Wait Clear
MessageBox( "生成WORD文件完毕,文件位置 C:\Xwy.doc !",64,"完毕")
Return 

这是在网上看到的一段代码,可能对你有帮助。

坚守VFP最后的阵地
2014-06-11 16:30
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:366
专家分:684
注 册:2014-4-9
收藏
得分:0 
谢谢SDTA版主的帮助,确定有帮助。读完你给的程序代码,我修改了我的源程序,但是运行还有报错,
图片附件: 游客没有浏览图片的权限,请 登录注册

2014全日制本科生数据(制证数据,共5246人)1.zip (273.43 KB)
这是运行程序打开的DBF文件
程序代码:
SET TALK OFF
SET SAFETY Off
CLOSE ALL
CLEAR ALL
CLEAR
WAIT "请打开存放当年学位数据的数据。。。。。"
USE ?
Word=CREATEOBJECT('word.application')  &&创建WORD文档
Word.Visible=.t. &&显示WORD文档
Word.Documents.add()  &&建立新文档
Word.ActiveDocument.PageSetup.TopMargin=2/0.035  &&设置上页边距
Word.ActiveDocument.PageSetup.BottomMargin=2/0.035  &&设置下页边距
Word.ActiveDocument.PageSetup.LeftMargin=2/0.035  &&设置左页边距
Word.ActiveDocument.PageSetup.RightMargin=2/0.035  &&设置右页边距
INDEX on xy TO xh1 uniq
COPY TO ARRAY xy1 FIELDS xy
SET INDEX TO
FOR J=1 TO ALEN(xy1,1)
   COUNT FOR xy=xy1(J,1) TO zrs
   INDEX on zymc TO zymc1 uniq
   COPY TO ARRAY zymc1 FIELDS zymc FOR xy=xy1(J,1)
   SET INDEX TO
   Word.Selection.Font.Size = 15  &&指定字号,9为小五号,10.5为五号,12为小四号
   Word.Selection.Font.Name = "黑体"  &&设置字体
   word.Selection.ParagraphFormat.Alignment=1
   word.Selection.TypeParagraph
   word.selection.typetext(ALLTRIM(xy1(J,1))+ALLTRIM(STR(YEAR(DATE())))+'情况报告单')
   word.Selection.TypeParagraph
   word.Selection.TypeParagraph
   Word.Selection.Font.Size = 13.5  &&指定字号,9为小五号,10.5为五号,12为小四号
   Word.Selection.Font.Name = "仿宋_GB2312"  &&设置字体
   word.Selection.ParagraphFormat.Alignment=0
   word.selection.typetext(SPACE(4)+ALLTRIM(xy1(j,1))+"届"+ALLTRIM(STR(ALEN(zymc1,1)))+"个专业共"+ALLTRIM(STR(zrs))+"人,其中")
   FOR i=1 TO ALEN(zymc1,1)
       COUNT FOR zymc=zymc1(i,1) TO rs1
       word.selection.typetext(ALLTRIM(zymc1(i,1))+ALLTRIM(STR(rs1))+"人,")
   ENDFOR
   COUNT FOR DELETED() AND xy=xy1(j,1) TO brs
   word.selection.typetext("共"+ALLTRIM(STR(brs))+"人不能授予学位。")
   LOCATE FOR DELETED() AND xy=xy1(J,1)
   IF FOUND()
      word.selection.typetext("不能授予学位名单如下:")
      COPY TO d:\ls FOR xy=xy1(j,1) AND DELETED() FIELDS xh,xm,bz1
      SELECT 10
      USE d:\ls
      WordRang=Word.Documents(1).Range(LENC(Word.Documents(1).Range.Text)-1,LENC(Word.Documents(1).Range.Text)-1)   &&运行这语句循环第二次就报错,错误信息如上图
      WordTable=Word.Documents(1).Tables.Add(WordRang,RECCOUNT()+1,FCOUNT())
      WordTable.Range.Paragraphs.Alignment= 0
      WordTable.Range.Font.Name="宋体"
      WordTable.Range.Font.Size=11
      WordTable.Borders.Enable=1 &&设置表格网格线型
      WordTable.Borders(1).LineWidth = 12 &&设置表格第顶端线宽
      WordTable.Borders(2).LineWidth = 12 &&设置表格第底端线宽
      WordTable.Borders(3).LineWidth = 12
      WordTable.Borders(4).LineWidth = 12 &&设置表格第右侧线宽
      WordTable.Rows(1).Borders(3).LineWidth = 12 &&设置标题下端线宽
      WordTable.Rows(1).Range.Font.Bold=.T.
      WordTable.Rows(1).Cells.VerticalAlignment= 1
      WordTable.Rows(1).Range.Paragraphs.Alignment = 1
      WordTable.Rows(1).HeadingFormat=.t.
      For lnI=1 To Fcount()
          WordTable.Cell(1,lnI).Range.Text=Field(lnI)
          For lnJ=2 TO Reccount()+1
              Go lnJ-1
              WordCellText=EVALUATE(FIELD(lnI))
              Do Case
                 Case Isnull(WordCellText)
                      WordCellText=""
                 Case Type("WordCellText")="N"
                 Case Type("WordCellText")="D"
                      WordCellText=Dtoc(WordCellText)
                 Case Type("WordCellText")="T"
                      WordCellText=Ttoc(WordCellText)
                 Case Empty(WordCellText)
                      WordCellText=""
                 Otherwise
                *       WordCellText=""
              Endcase
              WordTable.Cell(lnJ,lnI).Range.Text=WordCellText
          Next
      *    WordTable.Columns(lnI).AutoFit
      Next
      WordTable.Rows.HorizontalPosition=-999995 && 表格水平居中
      word.Application.Browser.Next
      Word.Selection.InsertBreak(1)
      RELEASE ZYMC1
      USE IN 10
   ENDIF
   SELECT 1
ENDFOR
word.Selection.WholeStory
word.Selection.ParagraphFormat.LineSpacingRule = 4   
Word.Selection.ParagraphFormat.LineSpacing = 17
RETURN
我这个程序是基本功能是循环输出多个学院的情况报告单,但是在处理第二个学院时就出现上面的报错信息。麻烦各位大侠帮我看看如何解决。
2014-06-13 15:06
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
运行了你的代码,发现一个问题,就是后生成的内容插入到第一个内容之前。见下图

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


上传一个VFP控制WORD的内容,自己再研究一下。

精通在VFP中调用WORD的方法.rar (48.33 KB)

坚守VFP最后的阵地
2014-06-13 16:28
ILoveVFD
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:218
专家分:147
注 册:2015-5-2
收藏
得分:0 
跟着学习了。
2015-06-07 20:31
快速回复:求助 VFP 环境下控制 WORD 画线命令。
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.066274 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved