标题:请教如何把EXCEL2016文件导入到VF中来
只看楼主
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
得分:0 
谢谢各位老师
2021-07-02 22:44
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:3 
学习啦,谢谢!
2021-07-04 06:30
lihzh
Rank: 1
等 级:新手上路
威 望:1
帖 子:9
专家分:3
注 册:2021-8-13
得分:0 
以下是引用sdta在2021-6-28 18:04:30的发言:

电脑没有安装EXCEL2016,是在WIN7+VFP9 7423+EXCEL2007环境下测试的。
oExcel = CREATEOBJECT('Excel.Application')
WITH oExcel
    .WorkBooks.Open(SYS(5) + SYS(2003) + "\名册.Xlsx")
    .ActiveSheet.UsedRange.Select
    WITH .Selection
        .Columns.AutoFit
        nRow = .Rows.Count - 1
        nColumn = .Columns.Count - 0
        LOCAL ArrayName[nRow, nColumn]
        ArrayName = .Cells(2, 1).Resize(nRow, nColumn).Value
    ENDWITH

    .DisplayAlerts = .F.
    .WorkBooks.Close
    .Quit   
ENDWITH
lcStr = "序号 N(2)"
FOR lnj = 1 TO 64
    lcStr = lcStr + ", F" + TRANSFORM(lnj) + " C(40)"
ENDFOR
CREATE CURSOR test (&lcStr)
INSERT INTO test FROM ARRAY ArrayName
LOCATE
BROWSE



一句代码就能解决太爽了,我的笨方法是一个一个字段的读出来,然后一个一个字段的写去另一个新excel文件,目的是多个xls文件合并为一个新的xlsx文件,挺耗时的。那么请问,按代码,把excel文件导入到数组后,若需要把数组的内容填入一个新的excel文件如何反向赋值?同时要考虑下一个数组的内容续着填入,字段内容可以沿用题主的数据。谢谢大神!
2021-08-13 14:57
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
以下是引用lihzh在2021-8-13 14:57:06的发言:




一句代码就能解决太爽了,我的笨方法是一个一个字段的读出来,然后一个一个字段的写去另一个新excel文件,目的是多个xls文件合并为一个新的xlsx文件,挺耗时的。那么请问,按代码,把excel文件导入到数组后,若需要把数组的内容填入一个新的excel文件如何反向赋值?同时要考虑下一个数组的内容续着填入,字段内容可以沿用题主的数据。谢谢大神!

下面代码是否对你有帮助
https://blog.bccn.net/sdta/16740

坚守VFP最后的阵地
2021-08-13 19:47
lihzh
Rank: 1
等 级:新手上路
威 望:1
帖 子:9
专家分:3
注 册:2021-8-13
得分:0 
回复 24楼 sdta
谢谢指导,测试了一下脚本,可能不知道在哪里打开excel的vb的访问,到下面的代码就报错了,
我按之前的代码逆向想当然的执行,但写入新的excel里所有字段内容都是原表最后一行最后一列的内容,代码如下:
v_file=getfile()
v_path=subs(v_file,1,rat('\',v_file))
=adir(a_file,v_path+'*.'+justext(v_file))
oExcel = CREATEOBJECT('Excel.Application')
WITH oExcel
    .WorkBooks.Open(v_path+a_file(1,1))
    .ActiveSheet.UsedRange.Select
    WITH .Selection
        .Columns.AutoFit
        nRow = .Rows.Count - 1
        nColumn = .Columns.Count - 0
        LOCAL ArrayName[nRow, nColumn]
        ArrayName = .Cells(2, 1).Resize(nRow, nColumn).Value
    ENDWITH
    .DisplayAlerts = .F.
    .WorkBooks.Close
    .Quit   
ENDWITH
endxls=createobject('excel.application')
with endxls
   .workbooks.add
   .worksheets('sheet1').activate
   .cells.Resize(nRow, nColumn).Value=ArrayName(nRow, nColumn)
   .DisplayAlerts = .F.
   .visible=.t.
   .WorkBooks.Close
   .Quit   
endwith
估计问题是在红色那句,但不知道参数应该怎么样才对,不过不重要了,刚想到一个问题,我那堆xls,都是24列15000行,记录数太多数组装不下,我还是一个一个字段的读了写到新的xlsx上去,慢就慢点,谢谢大神热心。

[此贴子已经被作者于2021-8-16 17:09编辑过]

2021-08-16 12:41
haoduoyu
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2021-11-24
得分:0 
回复 2楼 sdta
请问 为什么第一个字段要定义为浮点型。改成C或N型,就无法导入数据
2021-11-26 10:00



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




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

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