Open MedalJiao opened 7 years ago
比如说用户每个月需要拉一次报表,每次有1万条数据,每条数据最多10张照片(照片用卡片机拍摄,用户要求不能压缩),这样算下来几万张照片,总文件大小超过1G
能不能写多个excel, 然后合并excel ?
参考下载软件多线程下载,预先创建小块,最终做合并操作。另外压力主要是IO,先上了SSD再说
试试 用2个sheet,一个线程 往一 个sheet写入信息,一个线程 往另一个sheet 写入图片,一个线程挂起等待,等信息 和图片都写完后 唤醒挂起的线程 做合并
总文件大小超过1G,就是创建成功了,之后怎么打开呀。。这体验。。。
@onlyliuxin 老师,写多个excel合并成一个excel,可以解决一次性写入大数据流的问题,合并不同excel到同一个这块从网上没找到好的解决方案,您那有相关的经验吗
@lixiaobai2 考虑过写到两个sheet中,但是有两个问题:1、图片和文本信息对应问题,要正确对应就需要保证两个sheet写入数据的顺序相同;2、合并两个sheet的处理还是需要读取一个sheet的数据写入另外一个sheet,理想的是读取文本的sheet写入图片的那个sheet,但是最后还是需要将流写入workbook,是这样吗
@michaelssss 难点就在合并成一个完整可用的excel,这里没想到方案,换硬盘可行性太低,公司抠门,业务又需要必须导出,目前导出千八百条带图片的倒是可以,导出上万条就直接卡住了
@brucejiao1 你可以用程序 确保每一条信息 和图片都没写入成功后,再执行下一条数据, 这样就能保证 sheet1 和sheet2的数据对应一致,并且按规定的 单元格存储,合并sheet1和sheet2 的时候 就方便多了
@lixiaobai2 谢谢,我找下合并多个sheet的示例
多线程写的话,可以划分好每个线程的区域,这样不会出现需要加锁的情况,最多出现“木桶最短板”的情况,只要你控制好每个线程分配的行数就可以达到尽量大的速度。
有一个报表的业务需求是导出excel文件(仅一个sheet),包含了大量的文本信息和图片(图片需要写入单元格),由于数据量大,我尝试用多线程,但是发现在写入数据和写入图片时候,必须得给线程加锁,这样一来,写数据这个制约下载速度的问题还是没能解决,同时由于数据量确实大,workbook.write(stream)这一步非常耗时,大家谁有类似问题的解决经验,希望不吝赐教。