| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4073 人关注过本帖, 3 人收藏
标题:xls工作表有表头的想导入DBF字段要如何处理一下
只看楼主 加入收藏
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1072
专家分:2618
注 册:2015-12-30
收藏
得分:0 
回复 9楼 ls_y041
我的想法确实有问题,因为基本不用xls,所以没注意到还会这样子
你7楼的程序里不是已经改了sheet的名字了吗?
   oExcel.Worksheets(fsheet).Activate && 激活sheet表格,因为导进去的名称是文件名称
   oExcel.ActiveSheet.Name="销售出库明细导入"
   oExcel.ActiveWorkbook.Save
2021-11-14 21:33
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10570
专家分:43038
注 册:2014-5-20
收藏
得分:0 
回复 10楼 ls_y041
7楼的做法就可以,喜欢用EXCEL就要接受慢的感觉
2021-11-15 10:00
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1072
专家分:2618
注 册:2015-12-30
收藏
得分:0 
一定要用xls格式吗?
2021-11-15 10:50
ls_y041
Rank: 2
等 级:论坛游民
威 望:2
帖 子:173
专家分:56
注 册:2005-9-29
收藏
得分:0 
回复 12楼 吹水佬
图片附件: 游客没有浏览图片的权限,请 登录注册
2021-11-15 12:43
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2203
专家分:3867
注 册:2007-4-27
收藏
得分:0 
以下是引用吹水佬在2021-11-13 21:19:06的发言:


cDefPath = ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cDefPath)
xlsFile = cDefPath + "信息管理.xls"
WITH CREATEOBJECT("Excel.Application")
    .DisplayAlerts = 0
    .WorkBooks.Open(xlsFile)
    nRow = .CountA(.Range("A:A")) - 2
    nCol = .CountA(.Range("4:4"))
    arr  = .Cells(5,1).Resize(nRow,nCol).Value
    .WorkBooks.Close
    .Quit
ENDWITH
CREATE CURSOR tt (序号 I, 零部件代码 C(10),零部件名称 C(10),建议销售价 I,销售分类 C(10),拼音代码 C(10),单位 C(10))
INSERT INTO tt FROM ARRAY arr
SELECT * FROM tt


吹版好:
上述代码测试很灵光。所以,换成我的EXCEL表,因为有31万多条记录,25个字段,我想提高效率,结果执行到上面标红的那一句数组,就卡住了。
请问 数组里最多能存放多少条记录?

因为我一个一个单元格读,要花一节课左右的时间,想提高效率,还有点难啊!

[此贴子已经被作者于2021-11-17 14:27编辑过]


只求每天有一丁点儿的进步就可以了
2021-11-17 14:25
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1072
专家分:2618
注 册:2015-12-30
收藏
得分:0 
做个循环呗,5000或10000条读一次就没问题了
2021-11-17 15:00
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10570
专家分:43038
注 册:2014-5-20
收藏
得分:0 
回复 14楼 ls_y041
可能是EXCEL版本兼容问题
试试将 oExcel.ActiveWorkbook.Save 这句改为:
ActiveWorkbook.SaveAs("D:\xls\"+ fname, 56, "", "", 0, 0)
2021-11-17 15:06
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10570
专家分:43038
注 册:2014-5-20
收藏
得分:0 
回复 15楼 wengjl
31万多行,够强大的EXCEL表,不是用手编辑的吧。
可能分配给数组的资源有限,或是数据量大一时应付不来。
参考16楼意见,可以分块处理。
2021-11-17 15:16
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2203
专家分:3867
注 册:2007-4-27
收藏
得分:0 
参考16楼,500条一次,数次以后就不行了。 我判断是arr  = .Cells(i,1).Resize(i+500,nCol).Value 循环中使用时,之前的不会清空

所以问一下,数组里的数据清空的命令是什么?

只求每天有一丁点儿的进步就可以了
2021-11-17 15:32
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2203
专家分:3867
注 册:2007-4-27
收藏
得分:0 
历史库存 31万多,是ERP系统中导出来的

只求每天有一丁点儿的进步就可以了
2021-11-17 15:33
快速回复:xls工作表有表头的想导入DBF字段要如何处理一下
数据加载中...
 
   



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

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