标题:在程序中如何根据字符长度确定字体大小?
只看楼主
王咸美
Rank: 1
等 级:新手上路
帖 子:569
专家分:0
注 册:2018-1-4
结帖率:96.99%
已结贴  问题点数:20 回复次数:14 
在程序中如何根据字符长度确定字体大小?
在程序中如何根据字符长度确定字体大小,如字符长度超过12则字号设为8,其它为11号字。如在附件“学校日课总表2”中 自习2[蒋亚晨] 字号设为8,数学[蒋亚晨] 字号设为10,请高手帮忙,万分感谢!!!
生成每天课表.zip (56.37 KB)


*!* 生成学校日课总表任课教师姓名
CLEAR ALL
CLOSE ALL
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)
            jsmain(y)=ALLTRIM(rdy0)+"["+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
*select jsb
*browse

*!* 生成每天日课总表
FOR m=1 TO 5
  SELECT jsb
  wjm=mypath+"\kbmb_"+STR(m,1)+".doc"
  FileName=mypath+"\学校日课总表"+STR(m,1)+".doc"   
  wordapp=CREATEOBJECT("word.application")
  wordapp.visible=.t.
  WordTable=wordapp.application.Documents.Open(wjm)
  FOR i=m*6-3 TO m*6+2
    FOR k=4 TO reccount()+3
      GO k-3
      WordCellText=EVALUATE(FIELD(i))
      IF EMPTY(WordCellText) OR ISNULL(WordCellText)
        WordCellText=" "
      ENDIF
      
      
      WordTable.Tables.item(1).Cell(k,i-6*(m-1)).Range.Text=WordCellText
      WordTable.Tables.item(1).Cell(k,i-6*(m-1)).Range.Font.Bold=.f.
      
      IF LEN("+WordCellText+")>12
       WordTable.Tables.item(1).Cell(k,i-6*(m-1)).Range.Font.Size=8
     ENDIF
     
    ENDFOR
  ENDFOR
  WordApp.Documents(1).SaveAs(FileName)  &&自动保存文件
  WordApp.quit
  RELEASE WordApp
ENDFOR
RETURN

[此贴子已经被作者于2021-11-9 13:42编辑过]

搜索更多相关主题的帖子: IF FOR 长度 SELECT 字符 
2021-11-09 13:37
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:10 
找了一些相关函数,不知有无帮助
TXTWIDTH()
FONTMETRIC()
AFONT()
SYSMETRIC()
2021-11-09 14:43
王咸美
Rank: 1
等 级:新手上路
帖 子:569
专家分:0
注 册:2018-1-4
得分:0 
2021-11-09 15:29
王咸美
Rank: 1
等 级:新手上路
帖 子:569
专家分:0
注 册:2018-1-4
得分:0 
IF LEN("+WordCellText+")>12
       WordTable.Tables.item(1).Cell(k,i-6*(m-1)).Range.Font.Size=8
ENDIF
这几句不起作用,代码怎样改请高手赐教,万分感谢!!!
2021-11-09 15:32
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:40
帖 子:749
专家分:2475
注 册:2011-5-8
得分:10 
WordTable.Tables.item(1).Cell(k,i-6*(m-1)).Range.Font.Size=8
range并不选择对象
            WordTable.Tables.Item(1).Cell(k,i-6*(m-1)).Range.select()
            Wordapp.selection.Font.Size=8
就可以了,但这样要不断选择有点慢。
把你原来语句放在单元格赋值前就可以了,这样更好。

程序代码:
        If Len(WordCellText)>12
                WordTable.Tables.Item(1).Cell(k,i-6*(m-1)).Range.select()
                Wordapp.selection.Font.Size=8
            Endif
            WordTable.Tables.Item(1).Cell(k,i-6*(m-1)).Range.Text=WordCellText
            WordTable.Tables.Item(1).Cell(k,i-6*(m-1)).Range.Font.Bold=.F.


[此贴子已经被作者于2021-11-9 17:28编辑过]


dBase有人接盘了。
2021-11-09 16:45
王咸美
Rank: 1
等 级:新手上路
帖 子:569
专家分:0
注 册:2018-1-4
得分:0 
这样表格所有内容都是8号字了。我想要的是:当字段内容超过12个字符时,设置单元格字号为8号字。
2021-11-09 18:46
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:40
帖 子:749
专家分:2475
注 册:2011-5-8
得分:0 
回复 6楼 王咸美
WordCellText=EVALUATE(FIELD(i))改为
WordCellText=alltrim(EVALUATE(FIELD(i))

dBase有人接盘了。
2021-11-09 20:40
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
得分:0 
我是事先实测每行能够容纳各个字体的数量,然后判断是否满足该字体的需求。比如:5号字体,一行最多能够容纳多少字符……
2021-11-09 21:49
王咸美
Rank: 1
等 级:新手上路
帖 子:569
专家分:0
注 册:2018-1-4
得分:0 

2021-11-10 10:36
王咸美
Rank: 1
等 级:新手上路
帖 子:569
专家分:0
注 册:2018-1-4
得分:0 
上面占两行的内容,如何缩小字号,代码如何写,望高手赐教,万分感谢!!!
2021-11-10 10:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507450-1-1.html




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

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