使用java如何實(shí)現(xiàn)大量導(dǎo)出excel文件

使用java如何實(shí)現(xiàn)大量導(dǎo)出excel文件?相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

成都創(chuàng)新互聯(lián)專注于同心網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供同心營銷型網(wǎng)站建設(shè),同心網(wǎng)站制作、同心網(wǎng)頁設(shè)計(jì)、同心網(wǎng)站官網(wǎng)定制、微信平臺小程序開發(fā)服務(wù),打造同心網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供同心網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

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

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

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

代碼如下:

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("<&#63;xml version=\"1.0\" encoding=\"GBK\" &#63;>");
      sb.append("\n");
      sb.append("<&#63;mso-application progid=\"Excel.Sheet\"&#63;>");
      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) {// 一個(gè)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文件.以上只是一種簡單想法,留待以后具體實(shí)現(xiàn).

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

看完上述內(nèi)容,你們掌握使用java如何實(shí)現(xiàn)大量導(dǎo)出excel文件的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當(dāng)前題目:使用java如何實(shí)現(xiàn)大量導(dǎo)出excel文件
瀏覽路徑:http://muchs.cn/article18/pjjpdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、網(wǎng)站制作、云服務(wù)器關(guān)鍵詞優(yōu)化、ChatGPT、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司