zoukankan      html  css  js  c++  java
  • 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();  
            }  
        }  
    } 
    

      

  • 相关阅读:
    Codeforces 845E Fire in the City 线段树
    Codeforces 542D Superhero's Job dp (看题解)
    Codeforces 797F Mice and Holes dp
    Codeforces 408D Parcels dp (看题解)
    Codeforces 464D World of Darkraft
    Codeforces 215E Periodical Numbers 容斥原理
    Codeforces 285E Positions in Permutations dp + 容斥原理
    Codeforces 875E Delivery Club dp
    Codeforces 888F Connecting Vertices 区间dp (看题解)
    Codeforces 946F Fibonacci String Subsequences dp (看题解)
  • 原文地址:https://www.cnblogs.com/Nbge/p/3792781.html
Copyright © 2011-2022 走看看