以下是引用laowan001在2021-11-17 15:00:16的发言:
做个循环呗,5000或10000条读一次就没问题了
做个循环呗,5000或10000条读一次就没问题了
一语点醒梦中人。
试了,循环几次就卡壳了。 猜想是 数组里 前一次的数据不清空造成超额了。不知道清空数组的命令是什么?

只求每天有一丁点儿的进步就可以了
程序代码: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 