Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共28 条记录, 每页显示 10 条, 页签: [1] [2][3]
[浏览完整版]

标题:excel文件用代码merge导入时报超过内存,是数据太多了吗

1楼
guosheng 发表于:2023/12/20 9:59:00

图片点击可在新窗口打开查看此主题相关图片如下:22222.jpg
图片点击可在新窗口打开查看

有什么好的解决办法吗?
我测试的导入数据大概20万条。

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xlsx" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim mg As New Merger
    mg.SourcePath = dlg.FileName
    mg.Format = "Excel2007" '指定格式
    Dim Book As New XLS.Book(dlg.FileName)
    
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    For n As Integer = 0 To Sheet.Cols.Count -1
        Names.add(Sheet(0,n).text)
    Next
    
    For Each r As String In v1
        If Names.Contains(r)= False   '   next 下面的代码也不执行      
            messagebox.show("excel表中不存在列名为【" & r & "】的列!")
          'Return "excel表中不存在列名为【" & r & "】的列!"   '命令窗口测试需要返回值,窗口事件中将不会弹出返回值.
          Return
        End If
    Next
    
    mg.SourceTableName =Book.Sheets(0).name & "$"
    mg.DataTableName = "更新短租实收开piao"
    mg.Merge()
End If
2楼
有点蓝 发表于:2023/12/20 10:01:00
数据太多了,换种方式,比如:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=100317&replyID=&skin=1
3楼
guosheng 发表于:2023/12/20 10:20:00
Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog

dlg.Filter= "Excel文件|*.xlsx" '设置筛选器

下边绿色的两行怎么改啊,获取excel的第一个sheet的名字 啊?

If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim mg As New Merger
    mg.SourcePath = dlg.FileName
    mg.Format = "Excel2007" '指定格式
    'Dim Book As New XLS.Book(dlg.FileName)
    Dim _execl As New ExOpenXml.ExOXExecl()
    _execl.Open(dlg.FileName)
 
    Dim Sheet As XLS.Sheet = Book.Sheets(0)

    mg.SourceTableName =Book.Sheets(0).name & "$"
      ReadToDataTable(DataTable,SheetName, Columns, StartIndex, Length) 

    mg.DataTableName = "更新短租实收开piao"
    mg.Merge()

   _execl.Dispose()
End If
[此贴子已经被作者于2023/12/20 10:24:02编辑过]
4楼
有点蓝 发表于:2023/12/20 10:24:00
绿色的两行代码没有问题呀
5楼
guosheng 发表于:2023/12/20 10:37:00
Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog

dlg.Filter= "Excel文件|*.xlsx" '设置筛选器

If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮

    Dim _execl As New ExOpenXml.ExOXExecl()
    _execl.Open(dlg.FileName)
    _execl.ReadToDataTable("更新短租实收开piao") 
   _execl.Dispose()
End If

把excel第一个sheet的数据追加到内部表 “更新短租实收开piao中,没报错,但是也没追加成功。怎么回事啊?
6楼
有点蓝 发表于:2023/12/20 11:09:00
_execl.ReadToDataTable(datatables("更新短租实收开piao").basdetable,"sheet名称") 
7楼
guosheng 发表于:2023/12/20 11:15:00
datatables("更新短租实收开piao").basdetable
basdetable 改成 basedatatable也不行,说datatables没有这个方法啊
8楼
有点蓝 发表于:2023/12/20 11:25:00
_execl.ReadToDataTable(datatables("更新短租实收开piao").basetable,"sheet名称") 

http://www.foxtable.com/webhelp/topics/1939.htm
9楼
guosheng 发表于:2023/12/20 11:33:00
1  如何用_execl  获取第一个sheet的名字啊?       用Dim Book As New XLS.Book(dlg.FileName)获取第一个sheet名字又显示内存过大。
2  用_execl  获取第一个sheet的所有列名啊?

10楼
有点蓝 发表于:2023/12/20 12:00:00
1、_execl没有提供获取 sheet名称的功能。如果是默认导入第一个sheet,可以不用填写

2、_execl也没有提供获取 sheet所有列名功能。如果是追加,请根据Foxtable表格已有的表列导入。如果是新导入,只能导入后获取
共28 条记录, 每页显示 10 条, 页签: [1] [2][3]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .03125 s, 2 queries.