数值元素赋值给EXCEL一块连续区域的问题

lygcw9602 2014-03-22 01:02:27
LOCAL ASZ[50,7]
STORE [] TO ASZ
FOR lnI=1 TO 50
FOR lnI1=1 TO 7
ASZ[lnI,lnI1]=PADL(lnI*lnI1,4,[0])
ENDFOR
ENDFOR

如何将上面的数组元素赋值给EXCEL一块连续的区域,假如连续区域为range("b2:h51")
求最简方法
...全文
516 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lygcw9602 2014-03-23
  • 打赏
  • 举报
回复
DataToClip()导入VFP的速度是很快的 65535条记录,6个字段,全部导入,耗时不超过1秒。
lygcw9602 2014-03-23
  • 打赏
  • 举报
回复
谢谢猫老师,你5楼回帖中的方法,在2楼帖子中已经基本掌握了 本帖问题的出处:http://www.mzvfp.com/read.php?tid=96745 就是想知道,如何将VFP的数组,直接粘贴到EXCEL中指定的连续单元格中。 因为EXCEL中的命令可以将数组直接粘贴到指定的单元格中,在VFP中如何实现这个方法。 再次谢谢楼上的两位大师。
lygcw9602 2014-03-23
  • 打赏
  • 举报
回复
猫老师你好,首先表示感谢!我对你的佩服是无法用语言形容的。 能否把下面VBA及VFP代码(含括号参数的意思)的意思解释下: TEXT to m.cc noshow && 此处明白 Sub ArrayFill(vfparray) Range("b2").Resize(UBound(vfparray,1), UBound(vfparray,2)).Value = vfparray End Sub ENDTEXT * 执行下面这行需要勾选 Excel 的信任选项: 工具->宏->安全性->可靠发行商->信任对"VB项目"的访问 m.oo.ActiveWorkbook.VBProject.VBComponents.Add(1).CodeModule.AddFromString(m.cc) m.oo.Run('ArrayFill', @asz) m.oo.Visible = .T. 再次表示感谢!
都市夜猫 2014-03-23
  • 打赏
  • 举报
回复
vb 中确实可以用 range('..').value = 数组名 这样的方式来直接用数组给一个区域赋值,但 vfp 是按值传递数组的,所以只会传第一个数组元素。vfp 不承认 oExcel.range('..').value = @数组名 是合法的表达式,也没有类似 AddressOf 或者 VarPtr 这样的函数来取数组地址;但是,vfp 却可以用 func(@数组名) 的形式将数组地址传给函数。 所以,可以先在 Excel 中动态创建一个宏,然后将数组传给这个宏
Local ASZ[50,7]
Store [] To ASZ
For lnI=1 To 50
    For lnI1=1 To 7
        ASZ[lnI,lnI1]=Padl(lnI*lnI1,4,[0])
    Endfor
Endfor

Local cc, oo As Excel.Application

m.oo = Newobject('Excel.Application')
If m.oo.Workbooks.Count < 1
    m.oo.Workbooks.Add()
Endif
If m.oo.Workbooks(1).Sheets.Count < 1
    m.oo.Sheets.Add()
Endif

TEXT to m.cc noshow
	Sub ArrayFill(vfparray)
		Range("b2").Resize(UBound(vfparray,1), UBound(vfparray,2)).Value = vfparray
	End Sub
ENDTEXT
* 执行下面这行需要勾选 Excel 的信任选项: 工具->宏->安全性->可靠发行商->信任对"VB项目"的访问
m.oo.ActiveWorkbook.VBProject.VBComponents.Add(1).CodeModule.AddFromString(m.cc)
m.oo.Run('ArrayFill', @asz)
m.oo.Visible = .T.
这会要求用户按上面代码中注释的那样先打开这个安全开关,多少有些不友好,用户通常为了防范宏病毒都是关闭它的
lygcw9602 2014-03-23
  • 打赏
  • 举报
回复
非常满意猫老师的解释,上面的知识过去从来没有接触过,要认真研究一下。不明白之处,再请教猫老师。 再次向猫老师表示感谢。
都市夜猫 2014-03-23
  • 打赏
  • 举报
回复
Sub ArrayFill(vfparray) Range("b2").Resize(UBound(vfparray,1), UBound(vfparray,2)).Value = vfparray End Sub ArrayFill - 要创建的宏名称 vfparray - 形参,要传入的 vfp 数组 UBound(vfparray,1) - 传入的 vfp 数组行数, 同样 (...,2) 取列数 Range("b2").Resize(...) - 以 b2 为起点,将范围按传入的数组行列数扩大 --------------------- m.oo.ActiveWorkbook.VBProject.VBComponents.Add(1).CodeModule.AddFromString(m.cc) 在当前工作簿中动态创建由 cc 字符串定义的宏 --------------------- m.oo.Run('ArrayFill', @asz) - 运行名为 ArrayFill 的宏, 按引用传入 asz 数组 --------------------- 如果填充起始位置不定,可作为参数传给宏,宏定义改为: Sub ArrayFill(vfparray, nRow, nCol) Range(cells(nRow,nCol), cells(nRow+ubound(vfpArray,1)-1, nCol+ubound(vfparray,2)-1)).Value = vfpArray End Sub 调用改为:m.oo.Run('ArrayFill', @asz, 5, 6) -- 第5行,第6列开始填充
都市夜猫 2014-03-22
  • 打赏
  • 举报
回复
这个问题与以前那个帖子中的解法差不多吧,稍稍变通一下
Local ASZ[50,7]
Store [] To ASZ
For lnI=1 To 50
    For lnI1=1 To 7
        ASZ[lnI,lnI1]=Padl(lnI*lnI1,4,[0])
    Endfor
Endfor

Local cFlds, cTemp, ii
Local oo As Excel.Application

m.cFlds = ''
For m.ii = 1 To Alen(m.asz, 1)
    m.cFlds = m.cFlds + Textmerge(',f<<m.ii>> V(10)')
Endfor
m.cFlds = Substr(m.cFlds, 2)
m.cTemp = Sys(2015)
Create Cursor (m.cTemp) (&cFlds)
Append From Array m.asz
Locate
_vfp.DataToClip(m.cTemp, 0xffff, 3)
Use In Select(m.cTemp)

m.oo = Newobject('Excel.Application')
If m.oo.Workbooks.Count < 1
    m.oo.Workbooks.Add()
Endif
If m.oo.Workbooks(1).Sheets.Count < 1
    m.oo.Sheets.Add()
Endif

m.oo.Range("b2:h52").Select
m.oo.Workbooks(1).Sheets(1).Paste
m.oo.Range("b3:h52").Select
m.oo.Selection.Cut
m.oo.Range("b2:h51").Select
m.oo.Workbooks(1).Sheets(1).Paste

m.oo.Visible = .T.
m.oo = Null
lygcw9602 2014-03-22
  • 打赏
  • 举报
回复
引用 2 楼 apple_8180 的回复:
换个思路,用 VFP 的 DataToClip 方法 参考帖子:http://bbs.csdn.net/topics/390657362
这个帖子研究过了,很好。 我就是想知道,如何将数组导入EXCEL指定区域的方法。
十豆三 2014-03-22
  • 打赏
  • 举报
回复
换个思路,用 VFP 的 DataToClip 方法 参考帖子:http://bbs.csdn.net/topics/390657362
lygcw9602 2014-03-22
  • 打赏
  • 举报
回复
本方法最后要达到目的:是将DBF表中的数据通过数组保存,用数组的方法导入EXCEL表中。

2,748

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧