注册 登录
编程论坛 VFP论坛

如何判断WORD表格某单元格为空值

王咸美 发布于 2021-12-22 07:52, 2563 次点击
如何判断下表第2行第6列为空值,用VFP代码如何写,请高手赐教,万分感谢!!!
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
15 回复
#2
吹水佬2021-12-22 09:58
读取出来看看是什么内容
#3
mywisdom882021-12-22 11:28
读出来后,WORD本来是空的,在VFP好像不是空,应该还多了回车符。
#4
mywisdom882021-12-22 11:34
oDocapp = CREATEOBJECT("Word.application")
oDoc = oDocapp.Documents.Open('c:\五(1)班成绩.doc')

tab1 = oDoc.Tables(1)
r1c6 = ALLTRIM(tab1.Cell(1, 1).Range.Text)
r2c6 = ALLTRIM(tab1.Cell(2, 6).Range.Text)

?SUBSTR(r1c6,1,LEN(r1c6)-2),LEN(r1c6)
?r2c6=CHR(13)

oDoc.close()
oDocapp.quit()
#5
mywisdom882021-12-22 11:59
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
#6
王咸美2021-12-22 13:51
非常感谢各位的指点!我想将多个word表格内容读入dbf表中,有的表12列都有数据,有的表只有左边6列有数据,如果第2行第7列的值为空就退出循环,不知代码如何写,盼高手指点,不胜感谢!!!
#7
王咸美2021-12-22 15:02
请高手赐教!

[此贴子已经被作者于2021-12-22 15:52编辑过]

#8
吹水佬2021-12-22 15:24
        txt = TRIM(tab.Cell(row,col).Range.Text, 0h0D,0h07,0h20)
        IF EMPTY(txt)
            ......
        ENDIF
#9
王咸美2021-12-22 15:56
谢谢!
#10
王咸美2021-12-22 16:46
只有本站会员才能查看附件,请 登录

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


[此贴子已经被作者于2021-12-22 16:54编辑过]

#11
王咸美2021-12-22 16:57
@吹水佬 感谢耐心指点,好像几条代码不起作用。
#12
王咸美2021-12-22 17:15
SET TALK OFF
SET SAFETY  OFF
CLOSE DATABASES
CLEAR ALL
cDefpath=ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cDefpath)
CREATE  TABLE  tt  (编号 C(10), 姓名 C(10), 出生年月 C(10), 语文 I, 数学 I, 英语 I)
oWord=CREATEOBJECT("word.application")
FOR i=1 TO ADIR(c_File,"*.doc")
oDoc=oWord.Documents.OPEN(cDefpath+"\"+c_File(i,1))
   oTab=oDoc.tables(1)
FOR j=1 TO 2
       k=2
       DO WHILE k<32
    txt=trim(oTab.Cell(k,(j-1)*6+1).RANGE.TEXT,0h0d,0h07,0h20)

   IF empty(txt) && 对编号进行空值判断
      EXIT
    ENDIF


INSERT INTO tt VALUES (;
    ALLTRIM(oTab.Cell(k,(j-1)*6+1).RANGE.TEXT,0h0d,0h07,0h20),;
ALLTRIM(oTab.Cell(k,(j-1)*6+2).RANGE.TEXT,0h0d,0h07,0h20),;
ALLTRIM(oTab.Cell(k,(j-1)*6+3).RANGE.TEXT,0h0d,0h07,0h20),;
VAL(oTab.Cell(k,(j-1)*6+4).RANGE.TEXT),;
VAL(oTab.Cell(k,(j-1)*6+5).RANGE.TEXT),;
VAL(oTab.Cell(k,(j-1)*6+6).RANGE.TEXT))
k=k+1
 ENDDO
ENDFOR
oDoc.CLOSE
ENDFOR
oWord.QUIT
SELECT * FROM tt

红色标出的几句不起作用,不知为何?

[此贴子已经被作者于2021-12-22 17:16编辑过]

#13
吹水佬2021-12-22 19:01
好象还有乱字符
试试
程序代码:
CREATE  TABLE  tt  (编号 C(10), 姓名 C(10), 出生年月 C(10), 语文 I, 数学 I, 英语 I)
oWord=CREATEOBJECT("word.application")
FOR i=1 TO ADIR(c_File,"*.doc")
    oDoc=oWord.Documents.OPEN(cDefpath+"\"+c_File(i,1))
    oTab=oDoc.tables(1)
    FOR j=1 TO 2
        FOR k=2 TO otab.rows.count
            m = (j-1)*6
            IF empty(trim(oTab.Cell(k,m+1).RANGE.TEXT,0hA1,0h0d,0h07,0h20)) && 对编号进行空值判断
                EXIT
            ENDIF
            INSERT INTO tt VALUES (;
                ALLTRIM(oTab.Cell(k,m+1).RANGE.TEXT,0h0d,0h07,0h20),;
                ALLTRIM(oTab.Cell(k,m+2).RANGE.TEXT,0h0d,0h07,0h20),;
                ALLTRIM(oTab.Cell(k,m+3).RANGE.TEXT,0h0d,0h07,0h20),;
                VAL(oTab.Cell(k,m+4).RANGE.TEXT),;
                VAL(oTab.Cell(k,m+5).RANGE.TEXT),;
                VAL(oTab.Cell(k,m+6).RANGE.TEXT))
        ENDFOR
    ENDFOR
    oDoc.CLOSE
ENDFOR
oWord.QUIT
SELECT * FROM tt
#14
王咸美2021-12-22 20:07
@吹水佬 非常感谢!!!如果删除WORD表格中的“编号”,程序运行好像不正常。
只有本站会员才能查看附件,请 登录

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

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

只有本站会员才能查看附件,请 登录
#15
吹水佬2021-12-22 20:25
6列变5列了,格式变了,肯定不能套用
程序代码:
CREATE  TABLE  tt  (姓名 C(10), 出生年月 C(10), 语文 I, 数学 I, 英语 I)
oWord=CREATEOBJECT("word.application")
FOR i=1 TO ADIR(c_File,"*.doc")
    oDoc=oWord.Documents.OPEN(cDefpath+"\"+c_File(i,1))
    oTab=oDoc.tables(1)
    FOR j=1 TO 2
        FOR k=2 TO otab.rows.count
            m = (j-1)*5
            IF empty(trim(oTab.Cell(k,m+1).RANGE.TEXT,0hA1,0h0d,0h07,0h20)) && 对编号进行空值判断
                EXIT
            ENDIF
            INSERT INTO tt VALUES (;
                ALLTRIM(oTab.Cell(k,m+1).RANGE.TEXT,0h0d,0h07,0h20),;
                ALLTRIM(oTab.Cell(k,m+2).RANGE.TEXT,0h0d,0h07,0h20),;
                VAL(oTab.Cell(k,m+3).RANGE.TEXT),;
                VAL(oTab.Cell(k,m+4).RANGE.TEXT),;
                VAL(oTab.Cell(k,m+5).RANGE.TEXT))
       ENDFOR
    ENDFOR
    oDoc.CLOSE
ENDFOR
oWord.QUIT
SELECT * FROM tt

#16
王咸美2021-12-22 20:45
@吹水佬 谢谢!非常感谢!!!完美解决问题。
1