我用VB写了一个关于Accecc导入到Execl的程序。因为Access中的数据非常多。导入到Execl的时候因为一直都在往Execl中导入数据。这样就有了一个问题。在导到一定的程度的时候会出现内存不足。请大家帮忙解决。

解决方案 »

  1.   

    我现在导到内存不足时这个Execl文件 的大小就有120M
      

  2.   

    要不你考虑分成多个excel文件处理
      

  3.   

    同意楼上,否则有什么意义呢?即便你导过去了,你如何能打开一个120M的Execl文件呢?还是改变思路吧!
      

  4.   

    还有没有别的办法呀。因为这个Execl文件是用户给过来的。是一定要按这个格式去导的。如果分开的话,我想客户是不太会接受。
      

  5.   

    在中间做一个容器,先把一部分数据放在容器中,然后再从容器导出到Execl文件中,完成后
    此时,马上释放掉容器中的内存,接着下一个导入……
      

  6.   

    TO:junki(『打破沙锅问到底』) 
    我基本上都是按你这样做的但是还是不行
      

  7.   

    佩服佩服,120M的Excel,那打开还不剧慢无比啊?
      

  8.   

    TO:ygrobin() 
    怎么利用缓冲呀。是不是把缓冲开大一点呀。
    我现在是已经把缓冲开到最大了TO:creazyfish(tony) 
      

  9.   

    TO:creazyfish(tony) 
    我刚才试了一下,就是光打来这个Execl就要了我快10分钟的时间。真的是头晕。客户的数据就是这么大,真的是没有办法。
      

  10.   

    你是不是不在意文件大小和打开速度,那我可以推荐你一个控件true dbgrid。几千笔数据不到1分钟就可以导完。
      

  11.   

    使用一个固定全局的缓冲区 不要定义动态数组 譬如
    Global g_buf(1024) as byte
    然后对这个缓冲区操作  
    另外会不会是 VB的原因啊 使用 API看看
    OpenFile
    CloseHandle
    WriteFile
      

  12.   

    TO:creazyfish(tony) 
    true dbgrid 是什么控件呀。我导入到Execl数据可不把所有Accecc文件都导入。是要一个个的拿出来在导入到Execl中的
    TO : baoaya(点头) 
    我是用缓冲区操作,就是按你的方法去做的。问题的在写入Execl时因为占用的内存太大了。无法写入。
      

  13.   

    那你可以将需要在excel中怎么显示的格式以sql的方式读到recordset,然后绑到该控件,然后利用该控件的 exportfile方式导出到excel.另外,你客户接受*.csv的格式吗?那样导出文件小而且叫快,同样可以以excel打开的。
      

  14.   

    用excel填充那么多行是要很多内存的.
    而且楼上的同志说120M那么大的文件有什么意义呢?直接用excel也很难打开.
    你最好的了解excel文件的结构,然后按这个结构写成xls文件会好很多.
      

  15.   

    我还是持我的观点,导成100多M的execl是没有意义的,你应该和你的客户再谈一下,我想只要他们认识到这个问题,他们会面对现实的。
      

  16.   

    客户是上帝,但不能因为是上帝就可以取低效率的工作.想想看.一个120Mb的Excel要打开,我的天哪,那要多久啊.
    说服客户吧,给个更好的解决方案,相信客户会接受的.
      

  17.   

    喔!120M的Excel文件,有什么意义?真达到如此之大的数据!还是用专业的数据库吧!
      

  18.   

    先把Accecc中的数据保存到文本中,关闭Accecc。启动Excel对象,利用VBA导入文本。因为这个过程是Excel自己控制的,应该可以解决数据量过大的问题。
    或者把数据先导入SQL Server中(建立临时表)再利用SQL Server把数据保存成Excel格式的文档。