服务器有100万+条数据,要实现在客户端导出为Excel。现在我使用的是JXL,做法是客户端每次去服务器取100条数据,然后追加到现有文件中,如果第一次导出则创建文件,相关代码如下:originalWbook = Workbook.getWorkbook(file);//已经导出的
newWbook = Workbook.createWorkbook(file, originalWbook);//要追加新记录的问题是:每次从服务器获取新数据到客户端后,客户端在存文件时都要读取现有数据然后再追加,导致客户端内存占用量随着导出数据量的增加而快速增加,最终导致客户端OutOfMemoryError!请问大家有什么方法可以实现不用读取已存在的数据,直接将新数据追加到现有Excel文件中吗?不用JXL也可以。
newWbook = Workbook.createWorkbook(file, originalWbook);//要追加新记录的问题是:每次从服务器获取新数据到客户端后,客户端在存文件时都要读取现有数据然后再追加,导致客户端内存占用量随着导出数据量的增加而快速增加,最终导致客户端OutOfMemoryError!请问大家有什么方法可以实现不用读取已存在的数据,直接将新数据追加到现有Excel文件中吗?不用JXL也可以。
分放在多个EXCEL文件中不行吗
我去看SRC...结果发现他给我的都是抽象类和抽象方法
气的不行啊....
不然你就得写100次了....
我的想法是这样...不知道可以不....
这样...你先
originalWbook = Workbook.getWorkbook(file);
WritableSheet sheet=originalWbook.getSheet(originalWbook.);
int location=sheet.getRows(getSheets()-1);
然后就是把你读回来的对象分开...每个数据条生成一个cell对象...
在用sheet.addCell 方法来写吧....(不过如果一个sheet太多CELL,会报出一个RowsExceededException 提醒你创建新的sheet)
恩.......最后就关掉好了....
好象只要是write调用就会,整个文件都重新调整格式(这话你参考就可以了...我也不知道...我是根据API猜的)
希望能帮到你...我毕竟只是个小饼子
纠正下上面的代码...
实在抱歉
originalWbook = Workbook.getWorkbook(file);
WritableSheet sheet=originalWbook.getSheet(originalWbook.getSheets()-1);
int location=sheet.getRows(); 然后就是把你读回来的对象分开...每个数据条生成一个cell对象...
在用sheet.addCell 方法来写吧....(不过如果一个sheet太多CELL,会报出一个RowsExceededException 提醒你创建新的sheet)
恩.......最后就关掉好了....
originalWbook.getSheet(originalWbook.getSheets()-1); 返回的结果是只读的,也就是只是Sheet,而不是WritableSheet,所以
WritableSheet sheet=originalWbook.getSheet(originalWbook.getSheets()-1); 无法编译通过To 老紫竹:
如果服务器100万条数据增加内存还可以,如果是1000万条或者更多呢?我觉得增加堆内存的方法也不是很好啊,而且现在的问题是随着导出数据的增加导出速度明显变慢,就是因为读写内存数据越来越大如果这个问题不能解决的话,我还不如每次去服务器取数据,直接放到客户端的内存中,免得每次拿回来数据还得读写文件,岂不是效率更高?
如果实在没办法了就只能按你说的方法了,其实最好还是保存到一个文件中,也不知道一个Excel文件最大支持多少条数据
好象确实是....都说要新建才能重新写....
似乎JXL是没什么别的实现方式了...
真不好意思,没能帮到你
建议直接IO写csv文件,你可以读一行写一行,
写成excel文件肯定要爆内存的。
而且excel最多只支持65536条记录