当前位置: 首页 > 编程笔记 >

java导出大批量(百万以上)数据的excel文件

蓟清野
2023-03-14
本文向大家介绍java导出大批量(百万以上)数据的excel文件,包括了java导出大批量(百万以上)数据的excel文件的使用技巧和注意事项,需要的朋友参考一下

本文实例为大家分享了java导出百万以上数据的excel文件,供大家参考,具体内容如下

1.传统的导出方式会消耗大量的内存,2003每个sheet页最多65536条数据,2007每个sheet页可以达到100万条数据以上,2007会在生成Workbook时清理数据,所以2007导出量更大;

2.可以导出多个excel文件到某个目录中,然后打包下载;

3.导出excel格式的xml文件,这种方式可以分批导出数据,适用于大批量数据的导出,以下简单介绍这种方式:

代码如下:

package com.epay.utils;

/**
 * 大数据量导出成EXCEL或XML
 * @author qad
 * 2017-04-22
 */
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) {
    StringBuffer sb = new StringBuffer();
    try {
      DataOutputStream rafs = new DataOutputStream(
          new BufferedOutputStream(new FileOutputStream(new File(
              "d://test.xls"))));
      sb.append("<?xml version=\"1.0\" encoding=\"GBK\" ?>");
      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("<DocumentProperties xmlns=\"urn:schemas-microsoft-com:office:office\"> ");
      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 = 65535;
      int currentRecord = 0;
      int total = 100000;
      int col = 20;
      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++) {
          System.out.println(i);
          sb.append("<Cell><Data ss:Type=\"String\">111</Data></Cell>");
          sb.append("\n");
        }
        sb.append("</Row>");
        if (i % 5000 == 0) {
          rafs.write(sb.toString().getBytes());
          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();
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

导出xml文件之后直接修改后缀名为.xlsx就可以直接打开,弊端:无法导出.xls格式的excel文件.以上只是一种简单想法,留待以后具体实现.

扩展:既然可以使用xml文件导出excel,那么导出csv文件之后也可以直接改后缀名为.xls,目前只是一种想法,尚未证实可行性.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 通过官方提供的插件我们可以将图表中数据导出为常见的 Excel 数据文件(.csv 和 .xls),下面是一个实例: 使用方法 额外引入插件即可,我们提供的版本已经解决了中文乱码问题,详见 社区帖子 <!-- 基本的文件 --> <script src="http://code.highcharts.com.cn/highcharts/highcharts.js"></script> <scrip

  • 本文向大家介绍Java中excel表数据的批量导入方法,包括了Java中excel表数据的批量导入方法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Java中excel表数据的批量导入,供大家参考,具体内容如下 首先看下工具类: 再看下from.jsp页面 主界面jsp 页面点击的效果是,点击导入会跳入from.jsp页面 再看controller层 service层 以上就是本文

  • 本文向大家介绍java使用POI批量导入excel数据的方法,包括了java使用POI批量导入excel数据的方法的使用技巧和注意事项,需要的朋友参考一下 一、定义 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 二、所需jar包: 三、简单的一个读取excel的demo 1、读取文件方法 2、测

  • 本文向大家介绍layui 上传文件_批量导入数据UI的方法,包括了layui 上传文件_批量导入数据UI的方法的使用技巧和注意事项,需要的朋友参考一下 使用layui的文件上传组件,可以方便的弹出文件上传界面。 效果如下: 点击【批量导入】按钮调用js脚本importData(config)就可以实现数据上传到服务器。 脚本: 以上这篇layui 上传文件_批量导入数据UI的方法就是小编分享给大家

  • 本文向大家介绍C#导出数据到Excel文件的方法,包括了C#导出数据到Excel文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#导出数据到Excel文件的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 问题内容: 情况 我正在寻找一种方法来批量调整大小约为1500万个不同文件类型的图像,以适应特定的边框分辨率(在这种情况下,图像不能大于1024 * 1024),而不会扭曲图像,因此保留正确的宽高比。所有文件当前都位于我具有sudo访问权限的Linux服务器上,因此,如果我需要安装任何东西,我很好。 我尝试过的事情 在尝试使用Windows下的某些工具(Adobe Photoshop和其他工具)后