Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 4518|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 792 天

    [LV.10]以坛为家III

    2049

    主题

    2107

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    723136
    发表于 2021-4-21 09:23:38 | 显示全部楼层 |阅读模式
    
    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("\n");  
                sb.append("<?mso-application progid=\"Excel.Sheet\"?>");  
                sb.append("\n");  
                sb.append("<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"");  
                sb.append("\n");  
                sb.append("  xmlns:o=\"urn:schemas-microsoft-com:office:office\"");  
                sb.append("\n");  
                sb.append(" xmlns:x=\"urn:schemas-microsoft-com:office:excel\"");  
                sb.append("\n");  
                sb.append(" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"");  
                sb.append("\n");  
                sb.append(" xmlns:html=\"http://www.w3.org/TR/REC-html40\">");  
                sb.append("\n");  
                sb.append(" <Styles>\n");  
                sb.append("  <Style ss:ID=\"Default\" ss:Name=\"Normal\">\n");  
                sb.append("   <Alignment ss:Vertical=\"Center\"/>\n");  
                sb.append("   <Borders/>\n");  
                sb.append("   <Font ss:FontName=\"宋体\" x:CharSet=\"134\" ss:Size=\"12\"/>\n");  
                sb.append("   <Interior/>\n");  
                sb.append("   <NumberFormat/>\n");  
                sb.append("   <Protection/>\n");  
                sb.append("  </Style>\n");  
                sb.append(" </Styles>\n");  
    //             int sheetcount = 0;  
                int recordcount = 100000;  
                int currentRecord = 0;  
                int total = 100000;  
                int col = 10;  
                sb.append("<Worksheet ss:Name=\"Sheet0\">");  
                sb.append("\n");  
                sb.append("<Table ss:ExpandedColumnCount=\"" + col  
                        + "\" ss:ExpandedRowCount=\"" + total  
                        + "\" x:FullColumns=\"1\" x:FullRows=\"1\">");  
                sb.append("\n");  
                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("\n");  
                        sb.append("<ProtectObjects>False</ProtectObjects>");  
                        sb.append("\n");  
                        sb.append("<ProtectScenarios>False</ProtectScenarios>");  
                        sb.append("\n");  
                        sb.append("</WorksheetOptions>");  
                        sb.append("\n");  
                        sb.append("</Worksheet>");  
                        sb.append("<Worksheet ss:Name=\"Sheet" + i / recordcount  
                                + "\">");  
                        sb.append("\n");  
                        sb.append("<Table ss:ExpandedColumnCount=\"" + col  
                                + "\" ss:ExpandedRowCount=\"" + recordcount  
                                + "\" x:FullColumns=\"1\" x:FullRows=\"1\">");  
                        sb.append("\n");  
                    }  
                    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("\n");  
                    }  
                    sb.append("</Row>");  
                    if (i % 5000 == 0) {  
                        rafs.write(sb.toString().getBytes("utf-8"));  //注意编码
                        rafs.flush();  
                        sb.setLength(0);  
                    }  
                    sb.append("\n");  
                    currentRecord++;  
                }  
                rafs.write(sb.toString().getBytes());  
                sb.setLength(0);  
                sb.append("</Table>");  
                sb.append("<WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">");  
                sb.append("\n");  
                sb.append("<ProtectObjects>False</ProtectObjects>");  
                sb.append("\n");  
                sb.append("<ProtectScenarios>False</ProtectScenarios>");  
                sb.append("\n");  
                sb.append("</WorksheetOptions>");  
                sb.append("\n");  
                sb.append("</Worksheet>");  
                sb.append("</Workbook>");  
                sb.append("\n");  
                rafs.write(sb.toString().getBytes());  
                rafs.flush();  
                rafs.close();  
                System.out.println(System.currentTimeMillis());
            } catch (FileNotFoundException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    } 
    

      

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-9-17 20:16 , Processed in 0.057313 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表