| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1636 人关注过本帖
标题:探测EXCEL表数据区域范围的代码如何写?
只看楼主 加入收藏
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2214
专家分:3882
注 册:2007-4-27
收藏
得分:0 
学习反馈:
*************************************************************
* 用VFP判断E表中数据区域的范围               *
* 探测EXCEL表数据区域范围的代码如何写?           *
* eole=CREATEOBJECT('Excel.application')  &&创建Excel对象   *
* eole.visible=.F.      &&&不显示EXCEL对象                  *
* eole.Workbooks.Open('D:\TEST.XLS')     &&打开文件         *
* 之后,VFP代码如何探测EXCEL表数据区域的范围?              *
* 探知后选中,接着就可以做后续的处理                        *
*************************************************************
eole=CREATEOBJECT('Excel.application')
eole.visible=.T.   &&&&为了观察,使其显示
eole.Workbooks.Open('学校名单.XLS')
****&& 以上是你打開文件的原代碼,然後用以下代碼
*!*    With eole
*!*      .Worksheets("上1").Activate    && 激活到工作表
*!*      kz = 6
*!*      Do While Not (IsEmpty(.Cells(kz, 1).Value))
*!*            && 仍用.Cells(row,col)引用Excel單元格
*!*      EndDo
*!*    Endwith
***-----论坛上TonyDeng的回答是以上注释的代码,以下为调试成功的代码
**********于2012年1月13日星期五完成*************
*----------------------------------------------------------
kg=.t.
eole.Worksheets(1).Activate    && 激活到工作表
kz=3
Do While kg
  eole.worksheets(1).cells(kz,2).select
  dyg=eole.worksheets(1).cells(kz,2).value
*  ? dyg      &&&& ************观察变化用************
  DO case
    CASE VARTYPE(dyg)="C"     &&&&VARTYPE(表对象.CELLS(行,列).VALUE)
      IF  !EMPTY(dyg) and dyg<>".UNLL."    &&& EXCEL中的空单元格在常规格式下,VFP判断其值为“.UNLL.”
        kz=kz+1
      ELSE
        kg=.f.
      ENDIF
    CASE VARTYPE(dyg)$"N"
      IF  !EMPTY(dyg)
        kz=kz+1
      ELSE
        kg=.f.
      ENDIF
    * 还要加其他类型的内容      
    OTHERWISE
      kg=.f.
  ENDCASE
*  ? kz   &&&&& ******观察结果用******
ENDDO
*--以上完成了行的检测。 还要加上有数据列的检测就可以选定有数据的范围了
eole.Workbooks.close          &&& 关闭工作簿
eole.quit                     &&& 退出Excel
RELEASE eole                  &&& 释放对象变量以彻底结束EXCEL进程
*---------------------------------------------------------
*经历了N次的失败后才成功,共花时间3个小时。

只求每天有一丁点儿的进步就可以了
2012-01-13 14:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
是的,前面本來想提醒你注意IsEmpty()檢測空數據可能被偶爾的空單元格意外中斷,但見你寫出VBA的代碼,猜想你曾經用這種方式調試通過的,就不需另外提醒了。這種檢測法要求知道單元格的數據類型。不過你可以參考我曾經貼過的從Excel讀取數據到DBF的那個代碼,之所以設置某行首列的值為"{End}"作結束標誌,就是為了避免這類檢測,只要不是這個值,就一直讀下去。

授人以渔,不授人以鱼。
2012-01-13 14:37
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在VFP中,EMPTY()函數檢測所有數據類型是否為空值,數值型、日期型均可,一般不用區分數據類型檢測,但指針不行,要用ISNULL()函數,把這兩個結合起來,就可以了。

授人以渔,不授人以鱼。
2012-01-13 14:48
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2214
专家分:3882
注 册:2007-4-27
收藏
得分:0 
IsEmpty()是EXCEL的VBA中行得通,VFP中不行。
再次感谢

只求每天有一丁点儿的进步就可以了
2012-01-13 15:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
如果想快速處理Excel單元格,可考慮讀取Cells()的.Text,而不是.Value。直接取.Value有可能因NULL值或非法值而出現運行時錯誤,但取.Text是不會錯的。

授人以渔,不授人以鱼。
2012-01-13 15:11
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2214
专家分:3882
注 册:2007-4-27
收藏
得分:0 
以下是引用TonyDeng在2012-1-13 14:37:53的发言:

是的,前面本來想提醒你注意IsEmpty()檢測空數據可能被偶爾的空單元格意外中斷,但見你寫出VBA的代碼,猜想你曾經用這種方式調試通過的,就不需另外提醒了。這種檢測法要求知道單元格的數據類型。不過你可以參考我曾經貼過的從Excel讀取數據到DBF的那個代碼,之所以設置某行首列的值為"{End}"作結束標誌,就是為了避免這類檢測,只要不是這個值,就一直讀下去。
搜索不到,请问在哪?

只求每天有一丁点儿的进步就可以了
2012-01-13 15:13
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2214
专家分:3882
注 册:2007-4-27
收藏
得分:0 
嗯,原来还有个用“.TEXT”的,快多了,代码可减少很多。谢谢

只求每天有一丁点儿的进步就可以了
2012-01-13 15:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 

授人以渔,不授人以鱼。
2012-01-13 15:22
gyp0117
Rank: 1
等 级:新手上路
帖 子:44
专家分:8
注 册:2012-3-9
收藏
得分:0 
我试下看能运行不
2013-04-15 15:04
快速回复:探测EXCEL表数据区域范围的代码如何写?
数据加载中...
 
   



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

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