标题:xls工作表有表头的想导入DBF字段要如何处理一下
只看楼主
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 
以下是引用laowan001在2021-11-17 15:00:16的发言:

做个循环呗,5000或10000条读一次就没问题了


一语点醒梦中人。
试了,循环几次就卡壳了。 猜想是 数组里 前一次的数据不清空造成超额了。不知道清空数组的命令是什么?

只求每天有一丁点儿的进步就可以了
2021-11-17 15:35
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
循环中加一句
dimension arr[1]
试试
2021-11-17 15:38
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 
试了,还是不行

只求每天有一丁点儿的进步就可以了
2021-11-17 15:45
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
回复 23楼 wengjl
报错在哪一句?
2021-11-17 15:52
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 
仔细研究,每次500条记录
第1次追加到DBF的是500
第2次追加到DBF的是1000
第3次追加到DBF的是1500
第4次追加到DBF的是2000
第5次追加到DBF的是2500
第6次追加到DBF时 就提示出错,即超越了数组的承载量。
所以循环中需要对数组里的数据,进行清空,再写入。   我现在最大的难处 就是不知道如何清空数组时第一次写入的500条


只求每天有一丁点儿的进步就可以了
2021-11-17 15:55
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 
程序代码:
SET SAFETY OFF 
CLOSE DATABASES 

  PUBLIC mypath,c_ym
  cCurrentProcedure = SYS(16,1)
  nPathStart = AT(":",cCurrentProcedure)- 1
  nLenOfPath = RAT("\", cCurrentProcedure) - (nPathStart)
  mypath=SUBSTR(cCurrentProcedure, nPathStart, nLenofPath)
  SET DEFAULT TO (mypath)
  
  *xlsFile = cDefPath + "lskc_2110.xlsx"         &&& 设置EXCEL表的变量赋值
  SELECT 0
  USE lskc_sjk ALIAS bmk
  ZAP 
  M_File=getfile()
  myexcel=createobject('excel.application')          &&创建一个对象
  IF !VARTYPE(myexcel)$"Oo"      &&& 如果用户的电脑上未装EXCEL软件,则结束运行。
    MESSAGEBOX("建立EXCEL文件失败,请检查OFFICE是否正常!",48,"提醒:")
    RETURN 
  ENDIF
  myexcel.visible=.T.                                && 对象不可见
  bookexcel=myexcel.workbooks.open(M_File)            && 打开指定文件
  WITH myexcel         &&& 创建EXCEL项目对象,并进行相关属性的循环
      .DisplayAlerts = 0         &&& 关闭对话框
*      .WorkBooks.[color=#0000FF]Open(xlsFile)         &&& 打开EXCEL工作簿[/color]
      nRow = .CountA(.Range("B:B")) - 1         &&& 获取数据行数(.CountA(.Range("A:A")这个函数记的是A列中内容不空的单元格个数。)
*      ? nRow
      nCol = .CountA(.Range("1:1"))         &&& 获取数据列数
*      ? nCol
*      arr  [color=#808080]= .Cells(2,1).Resize(nRow,nCol).Value         &&& 将数据存入数组中[/color]
*      .WorkBooks.[color=#0000FF]Close         &&& 关闭工作簿[/color]
*      .Quit          [color=#808080]&&& 退出项目[/color]
  ENDWITH          &&& 结束循环
  FOR i=2 TO nRow STEP 500
  ? i
     arr= myexcel.cells(i,1).resize(i+499,nCol).value
     SELECT bmk
     INSERT INTO bmk FROM ARRAY arr        &&& 将数组中的数据,追加到DBF表中
     *dimension arr
  NEXT i
SELECT * FROM bmk         &&& 选定表浏览
CLOSE DATABASES 


就是     arr= myexcel.cells(i,1).resize(i+499,nCol).value  这一句

只求每天有一丁点儿的进步就可以了
2021-11-17 15:58
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 

只求每天有一丁点儿的进步就可以了
2021-11-17 16:01
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 
进到DBF里有数据7500,按理5次 是2500 的

只求每天有一丁点儿的进步就可以了
2021-11-17 16:02
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
arr= myexcel.cells(i,1).resize(i+499,nCol).value
resize是每次的行数和列数
arr= myexcel.cells(i,1).resize(500,nCol).value
2021-11-17 18:48
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
还有最后不足500行的问题,会产生空记录
2021-11-17 18:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507503-1-1.html




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

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