我用poi写excel的时候,小数据量时没有问题,但是一写多就OOM,我查了一些资料,大致的原因是poi本身的问题,调了JVM的堆大小也没什么用。
请问真的如此吗,如果真的这样只能用csv做了

解决方案 »

  1.   

    如果用csv做的话,怎么分sheet呢?
      

  2.   

    呵呵,我以前遇到过,使用Excel的xml格式,如:
    <?xml version="1.0" encoding="GBK"?>
    <?mso-application progid="Excel.Sheet"?>
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
    xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns:x="urn:schemas-microsoft-com:office:excel"
    xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
    xmlns:html="http://www.w3.org/TR/REC-html40">
    <Styles>
    <Style ss:ID="Default" ss:Name="Normal">
    <Alignment ss:Vertical="Center"/>
    <Borders/>
    <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>
    <Interior/>
    <NumberFormat/>
    <Protection/>
    </Style>
    </Styles>
    <Worksheet ss:Name="第1页">
    <Table>
    <Row>
    <Cell><Data ss:Type="String">帐号</Data></Cell>
    <Cell><Data ss:Type="String">状态</Data></Cell>
    <Cell><Data ss:Type="String">地区</Data></Cell>
    <Cell><Data ss:Type="String">上次上网时间</Data></Cell>
    <Cell><Data ss:Type="String">注册时间</Data></Cell>
    <Cell><Data ss:Type="String">开通时间</Data></Cell>
    </Row>
    <Row>
    <Cell><Data ss:Type="String">xinli2</Data></Cell>
    <Cell><Data ss:Type="String">绿色</Data></Cell>
    <Cell><Data ss:Type="String">陕西</Data></Cell>
    <Cell><Data ss:Type="String">2006-07-03 13:09</Data></Cell>
    <Cell><Data ss:Type="String">2005-11-15 00:00</Data></Cell>
    <Cell><Data ss:Type="String">2006-04-30</Data></Cell>
    </Row>
    </Table>
    </Worksheet>
    </Workbook>
      

  3.   

    这样就可以使用BufferedOutputStream了,但是有一个问题就是如果数据太大的话那么excel打开就非常困难了。还有就是一个sheet最多只支持2的16次方行数据,多了就不显示
      

  4.   

    那现在有没有好一点的解决方式呢?我需要导出的数据可能非常大,用POI肯定挂掉,用csv又不能分sheet,急死我了。