Foxtable(狐表)用户栏目专家坐堂 → excel文件用代码merge导入时报超过内存,是数据太多了吗


  共有3371人关注过本帖树形打印复制链接

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

帅哥哟,离线,有人找我吗?
guosheng
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
excel文件用代码merge导入时报超过内存,是数据太多了吗  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By: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中,没报错,但是也没追加成功。怎么回事啊?

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2023/12/20 11:15:00 [显示全部帖子]

datatables("更新短租实收开piao").basdetable
basdetable 改成 basedatatable也不行,说datatables没有这个方法啊

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2023/12/20 11:33:00 [显示全部帖子]

1  如何用_execl  获取第一个sheet的名字啊?       用Dim Book As New XLS.Book(dlg.FileName)获取第一个sheet名字又显示内存过大。
2  用_execl  获取第一个sheet的所有列名啊?


 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2023/12/20 13:56:00 [显示全部帖子]

我测试的,sheet名字为空,不报错,但是数据没有追加到表上啊。   _execl.ReadToDataTable( DataTables("更新短租实收开piao").basetable)  

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2023/12/20 14:11:00 [显示全部帖子]

是的,加上sheet的名字,就能把数据追加到表中了。
 另外,20万条数据执行  _execl.ReadToDataTable( DataTables("更新短租实收开piao").basetable,"Sheet1")  ,已经执行20分钟了,程序还是处于未响应状态,也没报错,是要等着它执行结束就可以了吗?
[此贴子已经被作者于2023/12/20 14:14:28编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2023/12/20 15:21:00 [显示全部帖子]

SqlServer的批量新增功能,指的是什么啊,例子吗?

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2023/12/20 21:29:00 [显示全部帖子]

用_execl 这种方法,项目更新后,DLL文件会自动加载到用户的客户端吗?还是需要将DLL文件发给用户存到客户端目录中啊?今天更新项目后,用户客户端调用该方法提示:系统找不到指定文件。

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2023/12/21 10:51:00 [显示全部帖子]

    Dim _execl As New ExOpenXml.ExOXExecl()
    _execl.Open("D:\222 - 副本.xlsx")
    _execl.ReadToDataTable( DataTables("更新短租实收开piao").basetable,"明细表")  
   _execl.Dispose()

只执行以上代码,不知道怎么回事突然报错了:从数值类型向date转换有问题。昨天还没事情的。



以下是测试导入的数据,只保留1条数据也报错。
ID列  最后一笔租金收款时间
abd029e9-d7e2-43fa-b44c-c010675a5420 2022/11/11


此主题相关图片如下:55555.png
按此在新窗口浏览图片

[此贴子已经被作者于2023/12/21 10:52:03编辑过]

 回到顶部
总数 16 1 2 下一页