| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 730 人关注过本帖
标题:请教高手啊,一天了都没想出解决办法
只看楼主 加入收藏
iamhyf
Rank: 1
等 级:新手上路
帖 子:69
专家分:2
注 册:2010-1-5
结帖率:91.67%
收藏
已结贴  问题点数:20 回复次数:11 
请教高手啊,一天了都没想出解决办法
在VFP中调用EXCEL,想在同一行中取用连续单元格,第一个单元格列号确定,如A1,最后一个单元格列号不确定,随变量X的取值而变化,在编程中如何用一个命令表示(不想用循环,太慢)

不知大家有没有好方法,先谢了!
搜索更多相关主题的帖子: EXCEL 如何 
2013-12-20 17:01
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:7 
EXCEL导入DBF
还是DBF导入EXCEL
看不明白楼主想干什么

坚守VFP最后的阵地
2013-12-20 18:23
iamhyf
Rank: 1
等 级:新手上路
帖 子:69
专家分:2
注 册:2010-1-5
收藏
得分:0 
根据需要从DBF随机选取若干字段的数据导入EXCEL中,所以,在导入时最后单元格的列号不能确定。
数据导入已经实现,没有问题。我只是想给导入的数据行单元格设置边框,但不想一个单元格一个单元格设置,而是一行一行设置。
比如:我根据需要选取的DBF字段数存入变量X,根据条件要导入EXCEL的记录数存入变量Y
Excel第一行导入的是字段名(标题行),从第二行导入数据
i=0
scan
  if 导入条件
    i=i+1
    for j=1 to X
      oExcel.ActiveSheet.Cells(i+1,i).Borders(1).LineStyle = 1
      oExcel.ActiveSheet.Cells(i+1,i).Borders(2).LineStyle = 1
      oExcel.ActiveSheet.Cells(i+1,i).Borders(3).LineStyle = 1
      oExcel.ActiveSheet.Cells(i+1,i).Borders(4).LineStyle = 1
    endfor
  endif
endscan
以上是我目前用的方法,是一个格一个设置,就是影响运行速度。
我想把这个设置放在for循环外,给一行连续单元格设置边框,这个连续单元格数目不确定,即用X来代表的。
在Excele中用Vba编程时,可表示为Range(Cells(i+1,1),Cells(i+1,X)),但在VFP中这是错误的,不知正确的应该
如何写。

[ 本帖最后由 iamhyf 于 2013-12-20 22:06 编辑 ]
2013-12-20 20:13
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:7 
是不是可以一行一行地设置边框?

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2013-12-20 21:24
qjbzjp
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:尧的故乡
等 级:贵宾
威 望:48
帖 子:1914
专家分:4397
注 册:2007-3-14
收藏
得分:7 
先将所有数据都导入,再将导入的数据用一两条命令加上边框。

相互学习,互相交流,共同提高。
2013-12-20 21:46
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:0 
以下是引用iamhyf在2013-12-20 20:13:51的发言:

根据需要从DBF随机选取若干字段的数据导入EXCEL中,所以,在导入时最后单元格的列号不能确定。
数据导入已经实现,没有问题。我只是想给导入的数据行单元格设置边框,但不想一个单元格一个单元格设置,而是一行一行设置。
比如:我根据需要选取的DBF字段数存入变量X,根据条件要导入EXCEL的记录数存入变量Y
Excel第一行导入的是字段名(标题行),从第二行导入数据
i=0
ascan
  if 导入条件
    i=i+1
    for j=1 to X
      oExcel.ActiveSheet.Cells(i+1,i).Borders(1).LineStyle = 1
      oExcel.ActiveSheet.Cells(i+1,i).Borders(2).LineStyle = 1
      oExcel.ActiveSheet.Cells(i+1,i).Borders(3).LineStyle = 1
      oExcel.ActiveSheet.Cells(i+1,i).Borders(4).LineStyle = 1
    endfor
  endif
endscan
以上是我目前用的方法,是一个格一个设置,就是影响运行速度。
我想把这个设置放在for循环外,给一行连续单元格设置边框,这个连续单元格数目不确定,即用X来代表的。
在Excele中用Vba编程时,可表示为Range(Cells(i+1,1),Cells(i+1,X)),但在VFP中这是错误的,不知正确的应该
如何写。
楼主1楼的问题和3楼的问题是一个问题吗
数据导入结束后,可以一次性设置边框,没必要逐行设置边框,就这个问题TONYDENG版主曾经发过贴,自己在论坛中找找吧。

坚守VFP最后的阵地
2013-12-20 21:47
iamhyf
Rank: 1
等 级:新手上路
帖 子:69
专家分:2
注 册:2010-1-5
收藏
得分:0 
参考网上搜到办法,已经解决了
我数据表中可用的字段总共有76个
设置一个字符串ColNumArr
ColNumArr="A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASA"+;
         TAUAVAWAXAYAZBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBX"
根据选取的字段个数X从ColNumArr中得到导出数据最后一列的列号:
ColNum=ALLTRIM(SUBSTR(ColNumArr,X*2-1,2))
再根据导出数据所在的Excel行号,对整行数据进行边框设置:
oExcel.ActiveSheet.Range("A"+ALLTRIM(STR(J+1))+":"+ColNum+ALLTRIM(STR(J+1))).Borders(1).LineStyle = 1
oExcel.ActiveSheet.Range("A"+ALLTRIM(STR(J+1))+":"+ColNum+ALLTRIM(STR(J+1))).Borders(2).LineStyle = 1
oExcel.ActiveSheet.Range("A"+ALLTRIM(STR(J+1))+":"+ColNum+ALLTRIM(STR(J+1))).Borders(3).LineStyle = 1
oExcel.ActiveSheet.Range("A"+ALLTRIM(STR(J+1))+":"+ColNum+ALLTRIM(STR(J+1))).Borders(4).LineStyle = 1

自己赞一个
2013-12-20 21:48
iamhyf
Rank: 1
等 级:新手上路
帖 子:69
专家分:2
注 册:2010-1-5
收藏
得分:0 
是同一个问题,在1楼没说清楚。
谢5楼、6楼的回复,问题是行数和列数都不能预先确定,要根据程序运行中变量的值进行设置。其实最简单的是导出数据后在EXCEL中直接设置。我不是为了程序的完美吗?哈哈。
2013-12-20 21:54
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:0 
以下是引用iamhyf在2013-12-20 21:54:15的发言:

是同一个问题,在1楼没说清楚。
谢5楼、6楼的回复,问题是行数和列数都不能预先确定,要根据程序运行中变量的值进行设置。其实最简单的是导出数据后在EXCEL中直接设置。我不是为了程序的完美吗?哈哈。
可以一次性设置边框

坚守VFP最后的阵地
2013-12-20 21:56
iamhyf
Rank: 1
等 级:新手上路
帖 子:69
专家分:2
注 册:2010-1-5
收藏
得分:0 
嗯,是的,数据导出后,记录累计数Y确定了,列号通过以上的方法也确定了。
数据导完后,统一进行设置,代码放在SCAN...ENDSCAN之后,并改成:
oExcel.ActiveSheet.Range("A1:"+ColNum+ALLTRIM(STR(Y+1))).Borders(1).LineStyle = 1
oExcel.ActiveSheet.Range("A1:"+ColNum+ALLTRIM(STR(Y+1))).Borders(2).LineStyle = 1
oExcel.ActiveSheet.Range("A1:"+ColNum+ALLTRIM(STR(Y+1))).Borders(3).LineStyle = 1
oExcel.ActiveSheet.Range("A1:"+ColNum+ALLTRIM(STR(Y+1))).Borders(4).LineStyle = 1
2013-12-20 22:05
快速回复:请教高手啊,一天了都没想出解决办法
数据加载中...
 
   



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

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