| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1882 人关注过本帖
标题:如何在学校日课总表学科名称下面显示教师姓名?
只看楼主 加入收藏
王咸美
Rank: 1
等 级:新手上路
帖 子:579
专家分:0
注 册:2018-1-4
结帖率:97.04%
收藏
已结贴  问题点数:20 回复次数:4 
如何在学校日课总表学科名称下面显示教师姓名?
如何在学校日课总表学科名称下面显示教师姓名?
现有学校日课总表表文件kb20190101.dbf  各班任课教师表文件jsrkb20190101.dbf  模板文件kbmb1.doc kbmb2.doc,运行程序文件sckb20190101.prg后生成日课总表样表 日课总表(1-3年级样表)及日课总表(4-6年级)。程序文件sckb20190101.prg运行十分缓慢,如何修改程序,提高运行速度,还请高手不吝赐教,万分感谢!!!

课表文件.zip (79.66 KB)


* sckb20190101.prg代码如下:
*功能:生成日课总表(科目下面显示教师姓名)

*!*    第一部分 生成全校教师表(jsb.dbf)

SET TALK OFF
SET SAFETY OFF
CLOSE TABLES all
SET COMPATIBLE OFF

cCurrentProcedure = SYS(16,1)
nPathStart = AT(":",cCurrentProcedure)- 1
nLenOfPath = RAT("\", cCurrentProcedure) - (nPathStart)
mypath=SUBSTR(cCurrentProcedure, nPathStart, nLenofPath)
SET Default TO (mypath)


USE jsrkb20190101 IN 0 ALIAS jsrkb20190101
USE kb20190101 IN 0 ALIAS kb20190101
*!*    日课总表字段扩大
SELECT kb20190101
zds=FCOUNT()
jls=RECCOUNT()
GO top
FOR i=3 TO zds
rdx=field(i)
*IF LEN(&rdx)<15
*ALTER table rkzb alter &rdx C(15)
*ENDIF
ENDFOR
COPY STRUCTURE TO jsb
*!*    日课总表逐条记录处理
SELECT kb20190101
DIMENSION jsmain(zds)
jsmain=""
FOR x=1 TO jls &&逐条记录
WAIT "正在处理 "+ALLTRIM(STR(x))+"//"+ALLTRIM(STR(jls)) WINDOW nowait
GO x
jsmain(1)=ALLTRIM(nj)
jsmain(2)=ALLTRIM(bj)
    FOR y=3 TO zds &&记录中每个字段
    rdy=field(y)
    rdy0=&rdy
        SELECT jsrkb20190101
        LOCATE FOR nj=jsmain(1) AND bj=jsmain(2)
        IF FOUND()
            q=0
            FOR z=3 TO zds
            rdz=field(z)
            IF rdz=ALLTRIM(rdy0)
            q=1
            EXIT
            ENDIF
            ENDFOR
            IF q=1
            *jsmain(y)=ALLTRIM(rdy0)+CHR(10)+ALLTRIM(&rdz)
            jsmain(y)=ALLTRIM(&rdz)
            ELSE
            jsmain(y)=ALLTRIM(rdy0)
            ENDIF
        ELSE
        jsmain(y)=ALLTRIM(rdy0)
        ENDIF
    SELECT kb20190101   
    ENDFOR
*!*        结果输出到jsb
    INSERT INTO jsb FROM ARRAY jsmain
ENDFOR

*!*    第二部分 生成日课总表(1-3年级)
wjm=mypath+"\kbmb1.doc"  
WordApp=CREATEOBJECT("Word.application")   
WordApp.Visible =.t.
WordTable=WordApp.Application.Documents.Open[wjm] && 关键
*use kb20180920 ALIAS kb20180920 IN 0
*SELECT kb20180920
*USE jsb ALIAS jsb IN 0
*SELECT jsb
SELECT kb20190101
FOR i=3 TO FCOUNT()
FOR k=4 TO 19
GO k-3
WordCellText=EVALUATE(FIELD(i))
IF EMPTY(WordCellText) OR ISNULL(WordCellText)
WordCellText=" "
ENDIF
WordTable.Tables.item(1).Cell(k*2-4,i).Range.Text=WordCellText
WordTable.Tables.item(1).Cell(k*2-4,i).Range.Font.Bold=.t.
IF WordCellText="自习1" OR WordCellText="自习2"
   WordTable.Tables.item(1).Cell(k*2-4,i).Range.Font.Size=9
ELSE
   WordTable.Tables.item(1).Cell(k*2-4,i).Range.Font.Size=11
ENDIF
ENDFOR
ENDFOR

SELECT jsb
FOR i=3 TO FCOUNT()
FOR k=5 TO 20
GO k-4
WordCellText=EVALUATE(FIELD(i))
IF EMPTY(WordCellText) OR ISNULL(WordCellText)
WordCellText=" "
ENDIF
WordTable.Tables.item(1).Cell(k*2-5,i).Range.Text=WordCellText
WordTable.Tables.item(1).Cell(k*2-5,i).Range.Font.Size=8
WordTable.Tables.item(1).Cell(k*2-5,i).Range.font.Name="华文楷体"
ENDFOR
ENDFOR

myda=subst(dtos(date()),1,4)+subst(dtos(date()),5,2)+subst(dtos(date()),7,2)
WordApp.Documents(1).SaveAs("E:\日课总表(1-3年级)_"+myda+".doc")  &&自动保存文件
RELEASE WordApp
* WAIT CLEAR
* MessageBox( "生成Word文件完毕,文件位置 E:\日课总表1-3年级)_"+myda+".doc!",64,"完毕")

*!*    第三部分 生成日课总表(4-6年级)
wjm=mypath+"\kbmb2.doc"
WordApp=CREATEOBJECT("Word.application")   
WordApp.Visible =.t.
WordTable=WordApp.Application.Documents.Open[wjm] && 关键
*SELECT rkzb20180920
SELECT kb20190101
FOR i=3 TO FCOUNT()
FOR k=4 TO 21
GO k+13
WordCellText=EVALUATE(FIELD(i))
IF EMPTY(WordCellText) OR ISNULL(WordCellText)
WordCellText=" "
ENDIF
WordTable.Tables.item(1).Cell(k*2-4,i).Range.Text=WordCellText
WordTable.Tables.item(1).Cell(k*2-4,i).Range.Font.Size=11
WordTable.Tables.item(1).Cell(k*2-4,i).Range.Font.Bold=.t.
ENDFOR
ENDFOR

SELECT jsb
FOR i=3 TO FCOUNT()
FOR k=5 TO 22
GO k+12
WordCellText=EVALUATE(FIELD(i))
IF EMPTY(WordCellText) OR ISNULL(WordCellText)
WordCellText=" "
ENDIF
WordTable.Tables.item(1).Cell(k*2-5,i).Range.Text=WordCellText
WordTable.Tables.item(1).Cell(k*2-5,i).Range.Font.Size=8
WordTable.Tables.item(1).Cell(k*2-5,i).Range.font.Name="华文楷体"
ENDFOR
ENDFOR

myda=subst(dtos(date()),1,4)+subst(dtos(date()),5,2)+subst(dtos(date()),7,2)
WordApp.Documents(1).SaveAs("E:\日课总表(4-6年级)_"+myda+".doc")  &&自动保存文件
RELEASE WordApp
* WAIT CLEAR
* MessageBox( "生成Word文件完毕,文件位置 E:\日课总表4-6年级)_"+myda+".doc!",64,"完毕")
RETURN

[此贴子已经被作者于2019-4-15 10:29编辑过]

搜索更多相关主题的帖子: TABLES SELECT FOR Cell item 
2019-04-15 08:53
gs2536785678
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:45
帖 子:601
专家分:1770
注 册:2017-7-16
收藏
得分:5 
看了头昏。

上次弄过了么,输出到EXCEL就可以了。。。

[此贴子已经被作者于2019-4-15 14:25编辑过]

2019-04-15 14:20
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:41
帖 子:763
专家分:2503
注 册:2011-5-8
收藏
得分:10 
你的程序主要有两部分
一、数据准备
如果数据量不是特别大(几万条以上),时间应该不会太多。如想提高这部分速度,用SEEK代替  locat  
二、数据输出
主要时间应该都用在这方面了,Word输出本来就不太快。真正想快可以用报表,即使你想要WORD表格也可以,只需要将报表打印到PDF文件中,再另存为WORD文件就可以了。如果对报表不熟悉就只有在程序方面提高效率了。
主要是设置格式用的时间太多了,有两点可以改进。
1、按行设置字体格式,不用按单元格设置。
2、对于自习可以最后统一用替换方式进行用ActiveDocument.Content.Find.Execute()命令应该能快些。

dBase有人接盘了。
2019-04-15 14:49
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:366
专家分:684
注 册:2014-4-9
收藏
得分:5 
你可以把你的程序按功能分开呀,弄一个处理数据的,一个是把数据写到WORD表格,就知道慢到底是因为什么原因。读别人写的程序是一件非常痛苦的事。
2019-04-15 15:22
王咸美
Rank: 1
等 级:新手上路
帖 子:579
专家分:0
注 册:2018-1-4
收藏
得分:0 
如何精减代码,请大侠帮忙,万分感谢!!!
2019-04-17 20:40
快速回复:如何在学校日课总表学科名称下面显示教师姓名?
数据加载中...
 
   



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

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