一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達式|

服務(wù)器之家 - 編程語言 - JAVA教程 - java導(dǎo)出大批量(百萬以上)數(shù)據(jù)的excel文件

java導(dǎo)出大批量(百萬以上)數(shù)據(jù)的excel文件

2020-09-16 15:16vbvb520 JAVA教程

這篇文章主要為大家詳細 介紹了java導(dǎo)出大批量即百萬以上數(shù)據(jù)的excel文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java導(dǎo)出百萬以上數(shù)據(jù)的excel文件,供大家參考,具體內(nèi)容如下

1.傳統(tǒng)的導(dǎo)出方式會消耗大量的內(nèi)存,2003每個sheet頁最多65536條數(shù)據(jù),2007每個sheet頁可以達到100萬條數(shù)據(jù)以上,2007會在生成Workbook時清理數(shù)據(jù),所以2007導(dǎo)出量更大;

2.可以導(dǎo)出多個excel文件到某個目錄中,然后打包下載;

3.導(dǎo)出excel格式的xml文件,這種方式可以分批導(dǎo)出數(shù)據(jù),適用于大批量數(shù)據(jù)的導(dǎo)出,以下簡單介紹這種方式:

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package com.epay.utils;
 
/**
 * 大數(shù)據(jù)量導(dǎo)出成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();
    }
  }
}

導(dǎo)出xml文件之后直接修改后綴名為.xlsx就可以直接打開,弊端:無法導(dǎo)出.xls格式的excel文件.以上只是一種簡單想法,留待以后具體實現(xiàn).

擴展:既然可以使用xml文件導(dǎo)出excel,那么導(dǎo)出csv文件之后也可以直接改后綴名為.xls,目前只是一種想法,尚未證實可行性.

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久强奷乱码老熟女 | 日韩视频在线免费观看 | 欧美日韩亚洲国内综合网俺 | 亚洲欧洲日产国码 最新 | 情侣宾馆愉拍自拍视频 | 日本大巴车强thepro | 亚洲精品老司机福利在线播放 | 亚洲欧美日韩高清 | 天天爱天天插 | 久久99精品久久久久久园产越南 | 天堂在线中文字幕 | 亚洲国产99在线精品一区69堂 | 青苹果乐园影院免费观看完整版 | 国产精品玖玖玖影院 | 美女视频一区二区三区在线 | 国产精品久久久久aaaa | 美女扒开两腿露出尿口的视频 | 日韩 欧美 国产 亚洲 中文 | 星空传媒在线视频 | 日韩精品一区二区三区老鸭窝 | 久久久免费观成人影院 | 午夜精品在线 | 9966久久精品免费看国产 | 亚洲精品久久久成人 | 韩国久播影院理论片不卡影院 | 免费看成年视频网页 | 99热在线国产 | 国产高清自拍 | 草莓视频在线观看免费 | 免费看隐私男生网站 | 久久视频这里只精品99热在线观看 | 日韩欧美推理片免费在线播放 | 国产精亚洲视频 | 国产精品久久久久久久久久久搜索 | 我强进了老师身体在线观看 | 欧美摘花破处 | 湿好紧太硬了我太爽了 | 视频二区 素人 欧美 日韩 | 湿好紧太硬了我太爽了 | 日韩毛片免费 | piss美女厕所小便 |