以下是引用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