怎样快速定位并调用EXCEL某工作表中的小表

时间:2022-09-29 09:41:36
十豆三大侠并各位高手:
  想请教一个困扰已久的问题:
  
    有一个几千条记录的dbf数据表,里面每一条记录的某一字段(价格)的详细构成情况,都在一个excel文件的3个工作表中的某个位置以小表格的形式有详细的细目构成列表明细,我想在查询某一dbf记录时实现自动调用这个工作表中的相应小表, 。如果把每个小表以手动的方式截取放到MEMO字段,显然工作量太大,不知有没有好的方法?另外,因为这个excel表很大,打开很慢,调用时有没有快捷一点的方法(这个excel表工作表中表里有表,似乎很难转成DBF表格)?先在此谢过!

32 个解决方案

#2


举例说明,将EXCEL全部转换为DBF是否可行?

#3


一、先回复“wwwwb”:谢谢前辈回复,excal表很大,里面表结构很复杂,表中有表,字段数量也尽相同,转换较难。

二、回复十豆三前辈:之前拜读过<VFP全面控制EXCEL>,现在又查看了一下,很有益,那是一篇很好的文章。但是我在这个案例里是不仅仅要打开相应的excel文件,而且要快速定位到相应的小表上。再次感谢!

#4


快速定位到相应的小表上:举例说明

#5


sorry! 上面“字段数量也尽相同” 应为“字段数量也不尽相同”。

#6


你用手工打开 Excel,然后录制宏并完成你的手工操作,停止当制宏,再看宏代码,根据宏代码参考 VBA 手册就可以转写成 vfp 代码。

#7


"快速定位到相应的小表上:举例说明":

   即同上面要求上的:“有一个几千条记录的dbf数据表,里面每一条记录的某一字段(价格)的详细构成情况,都在一个excel文件的3个工作表中的某个位置以小表格的形式有详细的细目构成列表明细,我想在查询某一dbf记录时实现自动调用这个工作表中的相应小表,”
  比如:我打开一条记录,显示“车架安装,综合单价800元”,而这800元的详细组成则在“价构成”这个excel文件的某个工作表里面的小表中(一个工作表里有N多个小表组成,每个小表对应前述dbf表中的一条记录)。我想在查看该记录时,能通过点击等方式调用该“价构成”表,且打开时,该表已显示在我要的那个小表位置。顺便说一下,该excel文件很大,打开很慢,还想变慢为快。谢谢!





#8


回复十豆三前辈:关于用录制宏来解决的方法,可否详细些,因为我的功力很低,惭愧!

#9


如果可以的话,
上传你的dbf xls 到www.access911.net/csdn
,用WINRAR压缩

#10


回wwwwb版主:这个dbf是一个朋友店里的资料,还不方便上传,请万谅!

#11


修改此DBF中的内容,去掉敏感的内容,要调用的XLS文件名、SHEET名不要修改

有数据才能测试

#12


挺复杂的~

#13


本帖最后由 apple_8180 于 2011-11-03 10:50:53 编辑
引用 8 楼 spring_sw 的回复:
回复十豆三前辈:关于用录制宏来解决的方法,可否详细些,因为我的功力很低,惭愧!
如何在 Excel 中如何录制宏:
打开你的 Excel,“工具” 菜单,“宏” 子菜单,选择 “录制新宏”,“确定”,
手工操作你要完成的工作,操作完了,点 “停止录制”。
再打开,“工具” 菜单,“宏” 子菜单,选择 “宏”,选择你的录制宏名称,点击“编辑”,就能看到你刚才手工操作的 VBA代码 了,有了这段代码,就可以参照写程序了。

#14


谢谢前辈指点,我按此方法试试,看看是不是笨到不能授教了。

#15




  碰到一个细节问题,我是以 brow ...nomodify 来显示查到的dbf记录的,要浏览这个记录的详细构成,需要查找excel文件“价构成”中的内容,但brow 生成的不是表单,怎么触发这个动作呢? 最好能在双击dbf 相应记录时实现对另一表的查询。

#16


本帖最后由 apple_8180 于 2011-11-03 11:21:44 编辑
引用 15 楼 spring_sw 的回复:
  碰到一个细节问题,我是以 brow ...nomodify 来显示查到的dbf记录的,要浏览这个记录的详细构成,需要查找excel文件“价构成”中的内容,但brow 生成的不是表单,怎么触发这个动作呢? 最好能在双击dbf 相应记录时实现对另一表的查询。
为何不用表单,并在表单中用 Grid 显示你的 dbf 内容,对 Grid 写相应代码。

#17


   不用表单中的 Grid 来显示主要是因为一是grid显示的表太小,另一方面对grid不是很熟练,感觉代码编写太复杂,不如brow不得快。
   不过您的建议很好,可解决触发问题,只是在grid的显示栏中点击某行时让其触发的代码应写在哪里?

#18


引用 17 楼 spring_sw 的回复:
不用表单中的 Grid 来显示主要是因为一是grid显示的表太小,另一方面对grid不是很熟练,感觉代码编写太复杂,不如brow不得快。
  不过您的建议很好,可解决触发问题,只是在grid的显示栏中点击某行时让其触发的代码应写在哪里?

写到 AfterRowColChang 事件中

#19


非常感谢,原来grid还可以这样。

#20


引用 18 楼 apple_8180 的回复:
引用 17 楼 spring_sw 的回复:
不用表单中的 Grid 来显示主要是因为一是grid显示的表太小,另一方面对grid不是很熟练,感觉代码编写太复杂,不如brow不得快。
不过您的建议很好,可解决触发问题,只是在grid的显示栏中点击某行时让其触发的代码应写在哪里?

写到 AfterRowColChang 事件中


非常谢谢!原来grid还可以这样。

#21


前辈:下面的程序总提醒我找不到变量m1,可调试窗已显示m1的具体值了,不知为什么?另其中的zm1=bitxor(asc(subs(allt(a2),i,1)),9) 最后一位9不能是大于2位数的,是不是bitxor比对时不能超出前面的二进制位数?



IF ( .NOT. empty(thisform.combo1.value)) .and. ( .NOT. empty(thisform.text1.value))
    *  clea all
      use mi
      a1=allt(thisform.combo1.value) 
      a2=allt(thisform.text1.value)
   
    n=1
  *  m1=""
 DO WHIL n<=3      
    loca for allt(yh)==a1
 
  IF .not. eof()
      m1=allt(code)
      cd1=""
   
    for i=1 to len(allt(a2))
       zm1=bitxor(asc(subs(allt(a2),i,1)),9)
       cd1=cd1+chr(zm1)
    endf
      
     if  cd1=m1 
         jc=1
         exit
     endi
     
    if cd1#m1 .and. n<3
        k=3-n 
         messagebox("密码错误,你还有 "+k+" 次机会!",60,"密码错误提示")
         n=n+1
       
      else 
         jc=0
         exit         
    endi
     
   ELSE
      jc=2
      exit
   ENDI 
      
  ENDD

     do case 
        case  jc=0          
           messagebox("非授权用户,你无权使用本系统!",60,"")
           clear events
           release thisform
           quit
        
        case  jc=1
          release thisform
          do  form main   
        
        case jc=2
          messagebox("用户名错误,请检查后重新输入!",60,"提示")
          retu    
     endc   
       
 ENDI

#22


1、哪句报错?
2、bitxor(),没明白你说的什么意思。

#23


引用 22 楼 apple_8180 的回复:
1、哪句报错?
2、bitxor(),没明白你说的什么意思。


1、if cd1=m1  语句报错。
2、窗口调试时,zm1=bitxor(asc(subs(allt(a2),i,1)),9) 最后的9不能改大于1位的,否则下一句cd1=cd1+chr(zm1)报错。

#24



bitxor(),没明白你说的什么意思。

补充:zm1=bitxor(asc(subs(allt(a2),i,1)),9) 最后的9不能改大于1位数的原因是不是异或比较时bitxor()中的两个数后者不能超出前者的二进制位数?

#25


求救:为什么上述程序中 if cd1=m1  语句报“找不到变量m1” ?。

另谁可提供VFP6.0帮助文件,发邮件或离线文件到 qq:459629910

#26


你安装完 vfp ,就有帮助文件。

换一个变量名称试试。

#27


引用 26 楼 apple_8180 的回复:
你安装完 vfp ,就有帮助文件。

换一个变量名称试试。


VFP6.0 安装了多次,帮助文件一直灰色。我的安装盘上没有此文件,网上下载了几回,都没用。

m1出错的问题,也试过更换变量,可都没用。程序在有时真的莫名其妙。

#29


引用 28 楼 apple_8180 的回复:
VFP9.0汉化帮助文件下载地址:
http://www.nbdown.net/file/2353.html 
http://www.mzvfp.com/bbs/dispbbs.asp?boardid=2&amp;Id=86826



谢谢热心提供,但没法下载,1th链接我没该站金币,2th链接我还没开通支付宝。

#30


本帖最后由 apple_8180 于 2011-11-07 16:08:21 编辑
引用 29 楼 spring_sw 的回复:
引用 28 楼 apple_8180 的回复:
VFP9.0汉化帮助文件下载地址:
http://www.nbdown.net/file/2353.html
http://www.mzvfp.com/bbs/dispbbs.asp?boardid=2&amp;amp;Id=86826

谢谢热心提供,但没法下载,1th链接我没该站金币,2th链接我还没开通支付宝。

址址2不需要付钱,是论坛金币。

#31


我上传到这里了:
汉化的vfp9.0帮助文件
http://download.csdn.net/detail/apple_8180/3765747

#32


谢谢十豆三老师,终于下载到了。

问了这么多问题,按理应该结帖了,但问题好像更多了,看了许多论坛上相关文章,最终感到许多似乎没有明确的结果:比如:
1、编译后一闪而过的问题(调整showindow、加read events等问题依旧),似乎没人点出核心的关键原因.
2、编译中出现的apphook.vcx正在使用的错误提示,论坛上有很多“解决”方法,但试了一下,好像没一个 有用的。
3、编译后原目录内的文件不能双击打开了。
4、还有我在这21楼的程序报错问题(if cd1=m1提示找不到变量)

 天啊!10多年的vfp经历(虽然中间停顿了很长时间),我从没这么痛苦过。

#1


#2


举例说明,将EXCEL全部转换为DBF是否可行?

#3


一、先回复“wwwwb”:谢谢前辈回复,excal表很大,里面表结构很复杂,表中有表,字段数量也尽相同,转换较难。

二、回复十豆三前辈:之前拜读过<VFP全面控制EXCEL>,现在又查看了一下,很有益,那是一篇很好的文章。但是我在这个案例里是不仅仅要打开相应的excel文件,而且要快速定位到相应的小表上。再次感谢!

#4


快速定位到相应的小表上:举例说明

#5


sorry! 上面“字段数量也尽相同” 应为“字段数量也不尽相同”。

#6


你用手工打开 Excel,然后录制宏并完成你的手工操作,停止当制宏,再看宏代码,根据宏代码参考 VBA 手册就可以转写成 vfp 代码。

#7


"快速定位到相应的小表上:举例说明":

   即同上面要求上的:“有一个几千条记录的dbf数据表,里面每一条记录的某一字段(价格)的详细构成情况,都在一个excel文件的3个工作表中的某个位置以小表格的形式有详细的细目构成列表明细,我想在查询某一dbf记录时实现自动调用这个工作表中的相应小表,”
  比如:我打开一条记录,显示“车架安装,综合单价800元”,而这800元的详细组成则在“价构成”这个excel文件的某个工作表里面的小表中(一个工作表里有N多个小表组成,每个小表对应前述dbf表中的一条记录)。我想在查看该记录时,能通过点击等方式调用该“价构成”表,且打开时,该表已显示在我要的那个小表位置。顺便说一下,该excel文件很大,打开很慢,还想变慢为快。谢谢!





#8


回复十豆三前辈:关于用录制宏来解决的方法,可否详细些,因为我的功力很低,惭愧!

#9


如果可以的话,
上传你的dbf xls 到www.access911.net/csdn
,用WINRAR压缩

#10


回wwwwb版主:这个dbf是一个朋友店里的资料,还不方便上传,请万谅!

#11


修改此DBF中的内容,去掉敏感的内容,要调用的XLS文件名、SHEET名不要修改

有数据才能测试

#12


挺复杂的~

#13


本帖最后由 apple_8180 于 2011-11-03 10:50:53 编辑
引用 8 楼 spring_sw 的回复:
回复十豆三前辈:关于用录制宏来解决的方法,可否详细些,因为我的功力很低,惭愧!
如何在 Excel 中如何录制宏:
打开你的 Excel,“工具” 菜单,“宏” 子菜单,选择 “录制新宏”,“确定”,
手工操作你要完成的工作,操作完了,点 “停止录制”。
再打开,“工具” 菜单,“宏” 子菜单,选择 “宏”,选择你的录制宏名称,点击“编辑”,就能看到你刚才手工操作的 VBA代码 了,有了这段代码,就可以参照写程序了。

#14


谢谢前辈指点,我按此方法试试,看看是不是笨到不能授教了。

#15




  碰到一个细节问题,我是以 brow ...nomodify 来显示查到的dbf记录的,要浏览这个记录的详细构成,需要查找excel文件“价构成”中的内容,但brow 生成的不是表单,怎么触发这个动作呢? 最好能在双击dbf 相应记录时实现对另一表的查询。

#16


本帖最后由 apple_8180 于 2011-11-03 11:21:44 编辑
引用 15 楼 spring_sw 的回复:
  碰到一个细节问题,我是以 brow ...nomodify 来显示查到的dbf记录的,要浏览这个记录的详细构成,需要查找excel文件“价构成”中的内容,但brow 生成的不是表单,怎么触发这个动作呢? 最好能在双击dbf 相应记录时实现对另一表的查询。
为何不用表单,并在表单中用 Grid 显示你的 dbf 内容,对 Grid 写相应代码。

#17


   不用表单中的 Grid 来显示主要是因为一是grid显示的表太小,另一方面对grid不是很熟练,感觉代码编写太复杂,不如brow不得快。
   不过您的建议很好,可解决触发问题,只是在grid的显示栏中点击某行时让其触发的代码应写在哪里?

#18


引用 17 楼 spring_sw 的回复:
不用表单中的 Grid 来显示主要是因为一是grid显示的表太小,另一方面对grid不是很熟练,感觉代码编写太复杂,不如brow不得快。
  不过您的建议很好,可解决触发问题,只是在grid的显示栏中点击某行时让其触发的代码应写在哪里?

写到 AfterRowColChang 事件中

#19


非常感谢,原来grid还可以这样。

#20


引用 18 楼 apple_8180 的回复:
引用 17 楼 spring_sw 的回复:
不用表单中的 Grid 来显示主要是因为一是grid显示的表太小,另一方面对grid不是很熟练,感觉代码编写太复杂,不如brow不得快。
不过您的建议很好,可解决触发问题,只是在grid的显示栏中点击某行时让其触发的代码应写在哪里?

写到 AfterRowColChang 事件中


非常谢谢!原来grid还可以这样。

#21


前辈:下面的程序总提醒我找不到变量m1,可调试窗已显示m1的具体值了,不知为什么?另其中的zm1=bitxor(asc(subs(allt(a2),i,1)),9) 最后一位9不能是大于2位数的,是不是bitxor比对时不能超出前面的二进制位数?



IF ( .NOT. empty(thisform.combo1.value)) .and. ( .NOT. empty(thisform.text1.value))
    *  clea all
      use mi
      a1=allt(thisform.combo1.value) 
      a2=allt(thisform.text1.value)
   
    n=1
  *  m1=""
 DO WHIL n<=3      
    loca for allt(yh)==a1
 
  IF .not. eof()
      m1=allt(code)
      cd1=""
   
    for i=1 to len(allt(a2))
       zm1=bitxor(asc(subs(allt(a2),i,1)),9)
       cd1=cd1+chr(zm1)
    endf
      
     if  cd1=m1 
         jc=1
         exit
     endi
     
    if cd1#m1 .and. n<3
        k=3-n 
         messagebox("密码错误,你还有 "+k+" 次机会!",60,"密码错误提示")
         n=n+1
       
      else 
         jc=0
         exit         
    endi
     
   ELSE
      jc=2
      exit
   ENDI 
      
  ENDD

     do case 
        case  jc=0          
           messagebox("非授权用户,你无权使用本系统!",60,"")
           clear events
           release thisform
           quit
        
        case  jc=1
          release thisform
          do  form main   
        
        case jc=2
          messagebox("用户名错误,请检查后重新输入!",60,"提示")
          retu    
     endc   
       
 ENDI

#22


1、哪句报错?
2、bitxor(),没明白你说的什么意思。

#23


引用 22 楼 apple_8180 的回复:
1、哪句报错?
2、bitxor(),没明白你说的什么意思。


1、if cd1=m1  语句报错。
2、窗口调试时,zm1=bitxor(asc(subs(allt(a2),i,1)),9) 最后的9不能改大于1位的,否则下一句cd1=cd1+chr(zm1)报错。

#24



bitxor(),没明白你说的什么意思。

补充:zm1=bitxor(asc(subs(allt(a2),i,1)),9) 最后的9不能改大于1位数的原因是不是异或比较时bitxor()中的两个数后者不能超出前者的二进制位数?

#25


求救:为什么上述程序中 if cd1=m1  语句报“找不到变量m1” ?。

另谁可提供VFP6.0帮助文件,发邮件或离线文件到 qq:459629910

#26


你安装完 vfp ,就有帮助文件。

换一个变量名称试试。

#27


引用 26 楼 apple_8180 的回复:
你安装完 vfp ,就有帮助文件。

换一个变量名称试试。


VFP6.0 安装了多次,帮助文件一直灰色。我的安装盘上没有此文件,网上下载了几回,都没用。

m1出错的问题,也试过更换变量,可都没用。程序在有时真的莫名其妙。

#28


#29


引用 28 楼 apple_8180 的回复:
VFP9.0汉化帮助文件下载地址:
http://www.nbdown.net/file/2353.html 
http://www.mzvfp.com/bbs/dispbbs.asp?boardid=2&amp;Id=86826



谢谢热心提供,但没法下载,1th链接我没该站金币,2th链接我还没开通支付宝。

#30


本帖最后由 apple_8180 于 2011-11-07 16:08:21 编辑
引用 29 楼 spring_sw 的回复:
引用 28 楼 apple_8180 的回复:
VFP9.0汉化帮助文件下载地址:
http://www.nbdown.net/file/2353.html
http://www.mzvfp.com/bbs/dispbbs.asp?boardid=2&amp;amp;Id=86826

谢谢热心提供,但没法下载,1th链接我没该站金币,2th链接我还没开通支付宝。

址址2不需要付钱,是论坛金币。

#31


我上传到这里了:
汉化的vfp9.0帮助文件
http://download.csdn.net/detail/apple_8180/3765747

#32


谢谢十豆三老师,终于下载到了。

问了这么多问题,按理应该结帖了,但问题好像更多了,看了许多论坛上相关文章,最终感到许多似乎没有明确的结果:比如:
1、编译后一闪而过的问题(调整showindow、加read events等问题依旧),似乎没人点出核心的关键原因.
2、编译中出现的apphook.vcx正在使用的错误提示,论坛上有很多“解决”方法,但试了一下,好像没一个 有用的。
3、编译后原目录内的文件不能双击打开了。
4、还有我在这21楼的程序报错问题(if cd1=m1提示找不到变量)

 天啊!10多年的vfp经历(虽然中间停顿了很长时间),我从没这么痛苦过。