• java导出excel(解决导出几万条数据内存溢出的问题)


    
    import java.io.BufferedOutputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class Test {  
        public static void main(String[] args) {  
        	System.out.println(System.currentTimeMillis());
            StringBuffer sb = new StringBuffer();  
            try {  
                DataOutputStream rafs = new DataOutputStream(  
                        new BufferedOutputStream(new FileOutputStream(new File(  
                                "d://test.xlsx"))));  
                sb.append("<?xml version="1.0"?>");  
                sb.append("
    ");  
                sb.append("<?mso-application progid="Excel.Sheet"?>");  
                sb.append("
    ");  
                sb.append("<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"");  
                sb.append("
    ");  
                sb.append("  xmlns:o="urn:schemas-microsoft-com:office:office"");  
                sb.append("
    ");  
                sb.append(" xmlns:x="urn:schemas-microsoft-com:office:excel"");  
                sb.append("
    ");  
                sb.append(" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"");  
                sb.append("
    ");  
                sb.append(" xmlns:html="http://www.w3.org/TR/REC-html40">");  
                sb.append("
    ");  
                sb.append(" <Styles>
    ");  
                sb.append("  <Style ss:ID="Default" ss:Name="Normal">
    ");  
                sb.append("   <Alignment ss:Vertical="Center"/>
    ");  
                sb.append("   <Borders/>
    ");  
                sb.append("   <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>
    ");  
                sb.append("   <Interior/>
    ");  
                sb.append("   <NumberFormat/>
    ");  
                sb.append("   <Protection/>
    ");  
                sb.append("  </Style>
    ");  
                sb.append(" </Styles>
    ");  
    //             int sheetcount = 0;  
                int recordcount = 100000;  
                int currentRecord = 0;  
                int total = 100000;  
                int col = 10;  
                sb.append("<Worksheet ss:Name="Sheet0">");  
                sb.append("
    ");  
                sb.append("<Table ss:ExpandedColumnCount="" + col  
                        + "" ss:ExpandedRowCount="" + total  
                        + "" x:FullColumns="1" x:FullRows="1">");  
                sb.append("
    ");  
                for (int i = 0; i < total; i++) {  
                    if ((currentRecord == recordcount  
                            || currentRecord > recordcount || currentRecord == 0)  
                            && i != 0) {// 一个sheet写满  
                        currentRecord = 0;  
                        rafs.write(sb.toString().getBytes());  
                        sb.setLength(0);  
                        sb.append("</Table>");  
                        sb.append("<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">");  
                        sb.append("
    ");  
                        sb.append("<ProtectObjects>False</ProtectObjects>");  
                        sb.append("
    ");  
                        sb.append("<ProtectScenarios>False</ProtectScenarios>");  
                        sb.append("
    ");  
                        sb.append("</WorksheetOptions>");  
                        sb.append("
    ");  
                        sb.append("</Worksheet>");  
                        sb.append("<Worksheet ss:Name="Sheet" + i / recordcount  
                                + "">");  
                        sb.append("
    ");  
                        sb.append("<Table ss:ExpandedColumnCount="" + col  
                                + "" ss:ExpandedRowCount="" + recordcount  
                                + "" x:FullColumns="1" x:FullRows="1">");  
                        sb.append("
    ");  
                    }  
                    sb.append("<Row>");  
                    for (int j = 0; j < col; j++) {  
                    	if(i==0) sb.append("<Cell><Data ss:Type="String">标题"+j+"</Data></Cell>"); 
                    	else sb.append("<Cell><Data ss:Type="String">c"+i+"&"+j+"</Data></Cell>"); 
                        
                        sb.append("
    ");  
                    }  
                    sb.append("</Row>");  
                    if (i % 5000 == 0) {  
                        rafs.write(sb.toString().getBytes("utf-8"));  //注意编码
                        rafs.flush();  
                        sb.setLength(0);  
                    }  
                    sb.append("
    ");  
                    currentRecord++;  
                }  
                rafs.write(sb.toString().getBytes());  
                sb.setLength(0);  
                sb.append("</Table>");  
                sb.append("<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">");  
                sb.append("
    ");  
                sb.append("<ProtectObjects>False</ProtectObjects>");  
                sb.append("
    ");  
                sb.append("<ProtectScenarios>False</ProtectScenarios>");  
                sb.append("
    ");  
                sb.append("</WorksheetOptions>");  
                sb.append("
    ");  
                sb.append("</Worksheet>");  
                sb.append("</Workbook>");  
                sb.append("
    ");  
                rafs.write(sb.toString().getBytes());  
                rafs.flush();  
                rafs.close();  
                System.out.println(System.currentTimeMillis());
            } catch (FileNotFoundException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    } 
    

      

  • 相关阅读:
    echarts雷达图点击事件 包含(2.x,3.85,4.02)测试
    字体图标制作
    通过php动态传数据到highcharts
    smartgit试用到期不用序列号怎么继续使用
    项目的ip地址更改,用git从远程提取代码出现错误,提示为 network error connection timed out
    OC学习4——OC新特性之块(Block)
    OC学习3——C语言特性之指针
    OC学习2——C语言特性之函数
    OC学习1——基本数据类型
    JVM 内存的那些事
  • 原文地址:https://www.cnblogs.com/Nbge/p/3792781.html
Copyright © 2020-2023  润新知