`
yuing
  • 浏览: 3850 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

大数据写入Excel

    博客分类:
  • java
 
阅读更多

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Calendar;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFDataFormat;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class BigGridDemo {

    /**
     * Create a library of cell styles.
     */
     public static Map<String, XSSFCellStyle> createStyles(XSSFWorkbook wb){
        Map<String, XSSFCellStyle> styles = new HashMap<String, XSSFCellStyle>();
//        XSSFDataFormat fmt = wb.createDataFormat();

        XSSFCellStyle style1 = wb.createCellStyle();
        style1.setAlignment(XSSFCellStyle.ALIGN_RIGHT);
//        style1.setDataFormat(fmt.getFormat("0.0%"));
        styles.put("percent", style1);

        XSSFCellStyle style2 = wb.createCellStyle();
        style2.setAlignment(XSSFCellStyle.ALIGN_CENTER);
//        style2.setDataFormat(fmt.getFormat("0.0X"));
        styles.put("coeff", style2);

        XSSFCellStyle style3 = wb.createCellStyle();
        style3.setAlignment(XSSFCellStyle.ALIGN_RIGHT);
//        style3.setDataFormat(fmt.getFormat("$#,##0.00"));
        styles.put("currency", style3);

        XSSFCellStyle style4 = wb.createCellStyle();
        style4.setAlignment(XSSFCellStyle.ALIGN_RIGHT);
//        style4.setDataFormat(fmt.getFormat("mmm dd"));
        styles.put("date", style4);

        XSSFCellStyle style5 = wb.createCellStyle();
        XSSFFont headerFont = wb.createFont();
        headerFont.setBold(true);
        style5.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style5.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
        style5.setFont(headerFont);
        styles.put("header", style5);

        return styles;
    }

    public static void generate(OutputStreamWriter out,String[] titles,List<String[]> data) throws Exception {
        SpreadsheetWriter sw = new SpreadsheetWriter(out);
        sw.beginSheet();
        //insert header row
        sw.insertRow(0);
        for(int i=0;i<titles.length;i++){
          sw.createCell(i, titles[i]);
        }
        sw.endRow();
        //write data rows
        for (int rownum = 0; rownum < data.size(); rownum++) {
         String[] rowData=data.get(rownum);
            sw.insertRow(rownum+1);
            for(int i=0;i<rowData.length;i++){
              sw.createCell(i, rowData[i]);
            }
            sw.endRow();
        }
        sw.endSheet();
    }
    /**
     *
     * TODO 大数据写入方法
     * @param sheetName sheet名称
     * @param fileName 文件名称
     * @param titles excel标题
     * @param list excel数据内容
     * @throws Exception
     * void
     */
    public static void init(String sheetName,String fileName,String[] titles,List<String[]> list) throws Exception{
       XSSFWorkbook wb = new XSSFWorkbook();
          XSSFSheet sheet = wb.createSheet(sheetName);
//          Map<String, XSSFCellStyle> styles = BigGridDemo.createStyles(wb);
          //name of the zip entry holding sheet data, e.g. /xl/worksheets/sheet1.xml
          String sheetRef = sheet.getPackagePart().getPartName().getName();
          //save the template
          String tempFile=BigGridDemo.class.getResource("/").getPath()+"template.xlsx";
          FileOutputStream os = new FileOutputStream(tempFile);
          wb.write(os);
          os.close();

          //Step 2. Generate XML file.
          File tmp = File.createTempFile("sheet", ".xml");
//          Writer fw = new FileWriter(tmp);
          OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream(tmp),"UTF-8");
      
          BigGridDemo.generate(osw,titles,list);
          osw.close();
          //Step 3. Substitute the template entry with the generated data
          FileOutputStream out = new FileOutputStream(fileName);
          BigGridDemo.substitute(new File(tempFile), tmp, sheetRef.substring(1), out);
          out.close();
    }

    /**
     *
     * @param zipfile the template file
     * @param tmpfile the XML file with the sheet data
     * @param entry the name of the sheet entry to substitute, e.g. xl/worksheets/sheet1.xml
     * @param out the stream to write the result to
     */
       public static void substitute(File zipfile, File tmpfile, String entry, OutputStream out) throws IOException {
        ZipFile zip = new ZipFile(zipfile);

        ZipOutputStream zos = new ZipOutputStream(out);

        @SuppressWarnings("unchecked")
        Enumeration<ZipEntry> en = (Enumeration<ZipEntry>) zip.entries();
        while (en.hasMoreElements()) {
            ZipEntry ze = en.nextElement();
            if(!ze.getName().equals(entry)){
                zos.putNextEntry(new ZipEntry(ze.getName()));
                InputStream is = zip.getInputStream(ze);
                copyStream(is, zos);
                is.close();
            }
        }
        zos.putNextEntry(new ZipEntry(entry));
        InputStream is = new FileInputStream(tmpfile);
        copyStream(is, zos);
        is.close();

        zos.close();
    }

    private static void copyStream(InputStream in, OutputStream out) throws IOException {
        byte[] chunk = new byte[1024];
        int count;
        while ((count = in.read(chunk)) >=0 ) {
          out.write(chunk,0,count);
        }
    }

    /**
     * Writes spreadsheet data in a Writer.
     * (YK: in future it may evolve in a full-featured API for streaming data in Excel)
     */
    public static class SpreadsheetWriter {
        private final OutputStreamWriter _out;
        private int _rownum;

        public SpreadsheetWriter(OutputStreamWriter out){
            _out = out;
        }

        public void beginSheet() throws IOException {
            _out.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
                    "<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">" );
            _out.write("<sheetData>\n");
        }

        public void endSheet() throws IOException {
            _out.write("</sheetData>");
            _out.write("</worksheet>");
        }

        /**
         * Insert a new row
         *
         * @param rownum 0-based row number
         */
        public void insertRow(int rownum) throws IOException {
            _out.write("<row r=\""+(rownum+1)+"\">\n");
            this._rownum = rownum;
        }

        /**
         * Insert row end marker
         */
        public void endRow() throws IOException {
            _out.write("</row>\n");
        }

        public void createCell(int columnIndex, String value, int styleIndex) throws IOException {
            String ref = new CellReference(_rownum, columnIndex).formatAsString();
            _out.write("<c r=\""+ref+"\" t=\"inlineStr\"");
            if(styleIndex != -1) _out.write(" s=\""+styleIndex+"\"");
            _out.write(">");
            _out.write("<is><t>"+value+"</t></is>");
            _out.write("</c>");
        }

        public void createCell(int columnIndex, String value) throws IOException {
            createCell(columnIndex, value, -1);
        }

        public void createCell(int columnIndex, double value, int styleIndex) throws IOException {
            String ref = new CellReference(_rownum, columnIndex).formatAsString();
            _out.write("<c r=\""+ref+"\" t=\"n\"");
            if(styleIndex != -1) _out.write(" s=\""+styleIndex+"\"");
            _out.write(">");
            _out.write("<v>"+value+"</v>");
            _out.write("</c>");
        }

        public void createCell(int columnIndex, double value) throws IOException {
            createCell(columnIndex, value, -1);
        }

        public void createCell(int columnIndex, Calendar value, int styleIndex) throws IOException {
            createCell(columnIndex, DateUtil.getExcelDate(value, false), styleIndex);
        }
    }
}
-----------------------------------测试方法---------------------------

 public static void main(String[] args) throws Exception {

           String[] titles={"序号","名称","话务量","地区","时间"};
           List<String[]>  list=new ArrayList<String[]>();
           for(int i=0;i<500000;i++){
            String[] data={(i+1)+"","武侯区","23.11","成都","2012-10-23 12:00:00"};
      list.add(data);
     }
           BigGridDemo.init("大数据sheet", "down.xlsx", titles, list);
    }

分享到:
评论

相关推荐

    poi多线程大数据导出excel文件.zip

    本项目“poi多线程大数据导出excel文件”提供了一个解决方案,利用多线程来提高Excel的大数据导出效率。 Apache POI 3.1版本是较早的版本,而项目中使用了更新的4.1版本,这意味着它可能利用了更多优化和新特性。在...

    C#操作EXCEL EXCEL类库 Excel模板处理 将DataTable数据写入Excel文件 C#数据写入EXCEL

    本主题主要围绕C#如何使用不同的方法来处理Excel,尤其是将DataTable数据写入Excel文件,并涉及Excel模板处理和样式管理。 首先,我们来探讨使用Microsoft Office Interop库的方式。这是微软提供的一个接口,可以...

    VC导出大数据到EXCEL解决方案

    在将大数据导出到Excel时,我们可以利用`COleSafeArray`来构建一个二维数组,存储要写入的数据,然后通过`Range`对象的`Value`属性将这个数组一次性写入Excel。 在设置表格部分,`nRows` 和 `nCols` 分别表示数据的...

    大数据导出excel 和使用说明

    - 创建一个`FileOutputStream`对象,用于写入Excel文件。 - 使用`Workbook.write()`方法将工作簿写入到`FileOutputStream`。 - 关闭工作簿和输出流。 - 创建一个`ZipOutputStream`,将Excel文件作为输入流,通过...

    qt写入excel

    qt写入excel 基本的操作, QString fileName = QFileDialog::getSaveFileName(NULL,"Save File",".","Excel File (*.xls)"); fileName.replace("/","\\"); //这一步很重要,c:/123.xls保存失败,c:\123.xls保存成功...

    大数据快速导出EXCEL-Java

    本篇文章将详细探讨如何利用Java在内存消耗极低的情况下,快速导出百万级大数据到Excel文件。 首先,我们要理解大数据的特点:数据量大、类型多样、处理速度快。在导出大数据到Excel时,我们不能简单地一次性加载...

    读取目录中的xml文件并写入Excel

    这个例子中,我们要讨论的是如何使用C#编程语言,结合Aspose库,来读取一个目录中的多个XML文件并将其中的数据写入Excel工作簿。这个过程可以分为几个关键步骤,我们将详细探讨这些步骤以及涉及的技术知识点。 首先...

    jxl实现excel大数据导出

    jxl实现excel大数据导出,26000条记录,测试导出时间是19s,例子不算复杂,没有excel样式的处理,可以自己扩展哈,有数据库文件,部署即可看到效果!!! 有三个功能:代码构建数据的导出、数据库数据的导出(从配置...

    poi导出大数据excel

    本篇文章将深入探讨如何使用Apache POI来高效地导出大数据到Excel,同时避免内存溢出。 首先,了解内存溢出的问题。当Java程序在运行过程中,如果分配给它的内存不足以存储所有数据,就会抛出`OutOfMemoryError`,...

    C# 大数据量快速导出到 Excel方法

    1. **分批写入**:不要一次性将所有数据写入Excel,而是分批写入。这样可以减少内存占用并避免一次性加载大量数据导致的性能下降。 2. **关闭AutoCalculate**:在写入数据前,先禁用Excel的自动计算功能,因为它会...

    qt利用QAxObjecti操作大数据excel.zip

    qt利用QAxObjecti操作大数据excelqtexcelqt利用QAxObjecti操作大数据excel查阅了大部分资料,大数据读写excel文件用QAxObject对象最快,借鉴了一些读写excel文件的demo,所以本文也采用了这种方法。 读取单个单元格...

    C# 大数据 Excel导出

    综上所述,C#中大数据Excel导出涉及的关键技术包括使用EPPlus库进行高效的数据写入,分批处理大数据,设置合适的内存管理策略,以及在必要时对文件进行压缩和解压缩。理解并熟练运用这些技巧,将帮助你在处理大数据...

    大数据excel导入源码 需要的lib包

    本资料提供了一套完整的“大数据excel导入源码”所需的lib包,确保开发者能够顺利地运行代码,避免此类问题。 Apache POI是Java中用于读写Microsoft Office格式文件的库,包括Excel(.xlsx和.xls)。在处理大数据量...

    excel导入大数据失败解决方法

    本篇文章将详细探讨“Excel导入大数据失败”的问题及其解决方案,重点关注Java环境下如何高效地处理大数据。 首先,我们要理解为什么Excel在处理大数据时会出现问题。Excel自身对数据量有限制,例如在Excel 2016及...

    超大xml解析导入数据库、千万级别大数据导出到Excel 实现核心高性能、分段、分页循环读取-写入-清空内存 解决传统方式的超大数据导致内存溢出.zip

    大数据导出到Excel、使用SXSSFWorkbook方式分页可以写入多个sheet中。测试结果(本地机器配置较低) 1.500M大小xml文件解析写入到mysql、插入200万条记录耗时100秒左右。 2.500万条数据从mysql导出到Excel、每个...

    C#将Excel大数据快速写入数据库 解决导入速度慢 卡顿现象

    总结以上内容,C#语言结合适当的库和优化策略,能够有效解决Excel大数据导入数据库时的慢速和卡顿问题。通过合理的程序设计、数据库优化和采用高效的数据处理方法,可以显著提高数据导入的效率和稳定性,从而满足...

    大数据 Excel 通过 Kettle 进行数据清洗

    Kettle的“Excel输出”步骤能将处理好的数据写入新的Excel文件,或者使用“CSV文件输出”将数据保存为CSV格式,以便进一步处理。 在实际操作中,可能需要根据数据特性和业务需求,组合使用多个步骤,灵活构建数据...

    超大xml解析导入数据库、千万级别大数据导出到Excel。实现核心:高性能、分段、分页循环:读取-写入-清空内存。解.zip

    标题提到的"超大XML解析导入数据库"和"千万级别大数据导出到Excel"涉及到两个关键的技术领域:大数据处理和高效数据转换。以下将详细探讨这两个方面的核心实现策略。 首先,对于超大XML文件的解析,XML是一种广泛...

    delphi高效率导出数据到excel

    使用 DBGridEh 控件可以快速导出大量数据到 Excel 中,而不需要使用 OLE 自动化来一个一个地将数据写入到 Excel 中。 DBGridEh 控件提供了一个 SaveDBGridEhToExportFile 方法,可以将数据快速导出到 Excel 中。 ...

    Android Excel文件写入和读取

    2. **写入Excel文件**: - 创建工作簿:使用`XSSFWorkbook`类创建一个新的Excel工作簿对象。 - 创建工作表:在工作簿中创建新的工作表,可以设置工作表的名称。 - 创建行和单元格:在工作表中添加行,并在行中...

Global site tag (gtag.js) - Google Analytics