- 浏览: 17451 次
- 性别:
- 来自: 西安
文章分类
最新评论
这个在网上找到的一个例子,记录下来。
package com.zskx.pem.standalone.commons; import java.io.IOException; import java.io.Writer; import java.util.Calendar; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.util.CellReference; public class SpreadsheetWriter { private final Writer _out; private int _rownum; public SpreadsheetWriter(Writer 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); } }
package com.zskx.pem.standalone.commons; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class ExcelUtil { private HSSFWorkbook wb = null; private HSSFSheet sheet = null; private HSSFRow row = null; private int sheetNum = 0; private int rowNum = 0; private FileInputStream fis = null; private File file = null; public ExcelUtil() { } public ExcelUtil(File file) { this.file = file; } public void setRowNum(int rowNum) { this.rowNum = rowNum; } public void setSheetNum(int sheetNum) { this.sheetNum = sheetNum; } public void setFile(File file) { this.file = file; } /** * 读取excel文件获得HSSFWorkbook对象 */ public void open() throws IOException { fis = new FileInputStream(file); wb = new HSSFWorkbook(new POIFSFileSystem(fis)); fis.close(); } /** * 返回sheet表数目 */ public int getSheetCount() { int sheetCount = -1; sheetCount = wb.getNumberOfSheets(); return sheetCount; } /** * sheetNum下的记录行数 */ public int getRowCount() { if (wb == null) System.out.println("=============>WorkBook为空"); HSSFSheet sheet = wb.getSheetAt(this.sheetNum); int rowCount = -1; rowCount = sheet.getLastRowNum(); return rowCount; } /** * 读取指定sheetNum的rowCount */ public int getRowCount(int sheetNum) { HSSFSheet sheet = wb.getSheetAt(sheetNum); int rowCount = -1; rowCount = sheet.getLastRowNum(); return rowCount; } /** * 得到指定行的内容 */ public String[] readExcelLine(int lineNum) { return readExcelLine(this.sheetNum, lineNum); } /** * 指定工作表和行数的内容 */ public String[] readExcelLine(int sheetNum, int lineNum) { if (sheetNum < 0 || lineNum < 0) return null; String[] strExcelLine = null; try { sheet = wb.getSheetAt(sheetNum); row = sheet.getRow(lineNum); int cellCount = row.getLastCellNum(); strExcelLine = new String[cellCount + 1]; for (int i = 0; i <= cellCount; i++) { strExcelLine[i] = readStringExcelCell(lineNum, i); } } catch (Exception e) { e.printStackTrace(); } return strExcelLine; } /** * 读取指定列的内容 */ public String readStringExcelCell(int cellNum) { return readStringExcelCell(this.rowNum, cellNum); } /** * 指定行和列编号的内容 */ public String readStringExcelCell(int rowNum, int cellNum) { return readStringExcelCell(this.sheetNum, rowNum, cellNum); } /** * 指定工作表、行、列下的内容 */ public String readStringExcelCell(int sheetNum, int rowNum, int cellNum) { if (sheetNum < 0 || rowNum < 0) return ""; String strExcelCell = ""; try { sheet = wb.getSheetAt(sheetNum); row = sheet.getRow(rowNum); if (row.getCell((short) cellNum) != null) { switch (row.getCell((short) cellNum).getCellType()) { case HSSFCell.CELL_TYPE_FORMULA: strExcelCell = "FORMULA "; break; case HSSFCell.CELL_TYPE_NUMERIC: strExcelCell = String.valueOf(row.getCell((short) cellNum).getNumericCellValue()); break; case HSSFCell.CELL_TYPE_STRING: strExcelCell = row.getCell((short) cellNum).getStringCellValue(); break; case HSSFCell.CELL_TYPE_BLANK: strExcelCell = ""; break; default: strExcelCell = ""; break; } } } catch (Exception e) { e.printStackTrace(); } return strExcelCell; } /** * 主函数用于测试 */ public static void main(String args[]) { try { File file = new File("/usr/test/users.xlsx"); ExcelUtil readExcel = new ExcelUtil(file); try { readExcel.open(); } catch (IOException e) { e.printStackTrace(); } readExcel.setSheetNum(0); int count = readExcel.getRowCount(); for (int i = 0; i <= count; i++) { String[] rows = readExcel.readExcelLine(i); for (int j = 0; j < rows.length; j++) { System.out.print(rows[j] + " "); } System.out.print("\n"); } } catch (Exception e) { System.out.println("对不起,读取出错..."); } } }
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Writer; import java.util.Calendar; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.Random; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; import org.apache.poi.ss.usermodel.IndexedColors; 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 { private static final String[] headers = { "姓名", "职称", "职务", "专业方向", "国家", "省市", "单位", "科室", "通信地址", "邮编", "单位电话", "传真", "手机", "电子邮箱", "角色", "备注" }; private static final String[] fields = { "name", "professionalTitle", "duties", "specialty", "country", "province", "unit", "section", "addeess", "postCode", "unitPhone", "fax", "mobilePhone", "email", "userInfoRoles", "mark" }; public static void main(String[] args) throws Exception { // Step 1. Create a template file. Setup sheets and workbook-level // objects such as // cell styles, number formats, etc. XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet sheet = wb.createSheet("Big Grid"); // name of the zip entry holding sheet data, e.g. // /xl/worksheets/sheet1.xml String sheetRef = sheet.getPackagePart().getPartName().getName(); // save the template FileOutputStream os = new FileOutputStream("template.xlsx"); wb.write(os); os.close(); // Step 2. Generate XML file. File tmp = File.createTempFile("sheet", ".xml"); Writer fw = new FileWriter(tmp); fw.close(); // Step 3. Substitute the template entry with the generated data FileOutputStream out = new FileOutputStream("big-grid.xlsx"); substitute(new File("template.xlsx"), tmp, sheetRef.substring(1), out); out.close(); } private static void generate(Writer out, Map<String, XSSFCellStyle> styles) throws Exception { Random rnd = new Random(); Calendar calendar = Calendar.getInstance(); SpreadsheetWriter sw = new SpreadsheetWriter(out); sw.beginSheet(); // insert header row sw.insertRow(0); for (int i = 0; i < headers.length; i++) { sw.createCell(i, headers[i]); } sw.endRow(); // write data rows for (int i = 1; i < 100000; i++) { sw.insertRow(i); sw.createCell(0, "name" + i); sw.createCell(1, "主任医师"); sw.createCell(2, "职务" + i); if (i % 2 == 0) sw.createCell(3, "大厨"); sw.createCell(3, "大厨@二厨"); sw.createCell(4, "境内"); sw.createCell(5, "西安"); sw.createCell(6, "中盛剀欣"); sw.createCell(7, "开发"); sw.createCell(8, "科技二路"); sw.createCell(9, "110"); sw.createCell(10, "710000"); sw.createCell(11, "120"); sw.createCell(12, "130"); sw.createCell(13, "140"); sw.createCell(14, "150@163.com"); sw.createCell(15, "编辑"); sw.endRow(); calendar.roll(Calendar.DAY_OF_YEAR, 1); } sw.endSheet(); } private 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); } } }
相关推荐
本项目“poi多线程大数据导出excel文件”提供了一个解决方案,利用多线程来提高Excel的大数据导出效率。 Apache POI 3.1版本是较早的版本,而项目中使用了更新的4.1版本,这意味着它可能利用了更多优化和新特性。在...
在IT行业中,大数据处理是一项关键任务,而将大数据导出为Excel格式是常见的需求,尤其在数据分析、报表生成和业务报告中。Java POI库是一个非常实用的工具,它允许开发者在Java应用中读写Microsoft Office格式的...
在C#编程环境中,处理大数据并将其导出到Excel文件是一项常见的任务,特别是在数据分析、报表生成和数据交换的场景中。本主题将深入探讨如何在C#中有效地实现这一功能,确保性能和效率。 首先,要进行大数据Excel...
总结来说,优化C#导出大数据到Excel的方法主要包括分批处理、禁用不必要的功能、批量写入、利用模板和使用第三方库等。通过这些方式,可以在保证数据完整性的前提下,显著提升导出效率,满足大数据量的导出需求。
用2003导出大量数据时会报数据异常,原因是2003...现在2007-2013是可以处理大数据的,但是有时会出现内存溢出的情况,因为数据过多,内存被写满了,所以内存溢出。本案例亲测可以导出280W以上,只要磁盘够大就可以导出
Delphi 高效率导出数据到 Excel Delphi 是一个功能强大的开发工具,可以用于开发各种类型的应用程序,而 Excel 是一个非常popular的电子表格软件,经常用于数据分析和处理。在实际开发中,我们经常需要将数据从 ...
POI3.8版本之前的版本处理大量数据的导出Excel效果不是很理想,主要在与Excel2003版本单个Sheet的行限制为65536,大量数据的导出得分多个Sheet,针对这一点,客户就不会满意。其次,在实验过程中,大数据量的导出很...
Powerbuilder,PB自制大数据导出,超6w限制,Powerbuilder,PB自制大数据导出,超6w限制,Powerbuilder,PB自制大数据导出,超6w限制,Powerbuilder,PB自制大数据导出,超6w限制,Powerbuilder,PB自制大数据导出,...
使用poi导出excel支持xls、xlsx格式大数据导出java工具类,支持同一个单元格不同文本格式。找了好久,加上自己修改后,调试通过,发布出来分享,(调整student类位置)包含所需jar包,工具类,使用示例
- 尽管.xlsx格式需要更大的磁盘空间,但其内存效率远高于.xls格式,适合大数据导出。 4. **设置内存参数**: - 调整JVM的堆内存大小。可以通过增加`-Xms`和`-Xmx`参数来设置初始和最大堆内存,但这种方法只是治标...
本篇文章将详细探讨如何利用Java在内存消耗极低的情况下,快速导出百万级大数据到Excel文件。 首先,我们要理解大数据的特点:数据量大、类型多样、处理速度快。在导出大数据到Excel时,我们不能简单地一次性加载...
jxl实现excel大数据导出,26000条记录,测试导出时间是19s,例子不算复杂,没有excel样式的处理,可以自己扩展哈,有数据库文件,部署即可看到效果!!! 有三个功能:代码构建数据的导出、数据库数据的导出(从配置...
在Java开发中,处理大数据导出到Excel是一个常见的需求,特别是在数据分析、报表生成以及数据交换等场景。"javaExcel大数据导出"这个话题涉及到的主要知识点包括:Java与Excel的交互、大数据处理策略、性能优化以及...
下面将详细阐述`easyExcel`的核心功能、使用方法以及如何实现大数据导出。 `easyExcel`的核心特性: 1. **内存优化**:`easyExcel`通过分片读写数据,避免一次性加载大量数据到内存中,从而减少内存占用。 2. **...
"javaExcel大数据导出.zip"这个压缩包可能包含了一个或多个示例项目,演示了如何在Java中高效地实现这一功能。下面我们将详细探讨相关的知识点。 1. **Apache POI库**: Apache POI是Java领域中广泛使用的库,它...
标题提到的"超大XML解析导入数据库"和"千万级别大数据导出到Excel"涉及到两个关键的技术领域:大数据处理和高效数据转换。以下将详细探讨这两个方面的核心实现策略。 首先,对于超大XML文件的解析,XML是一种广泛...
在将大数据导出到Excel时,我们可以利用`COleSafeArray`来构建一个二维数组,存储要写入的数据,然后通过`Range`对象的`Value`属性将这个数组一次性写入Excel。 在设置表格部分,`nRows` 和 `nCols` 分别表示数据的...
java导出excel大数据,由于excel本身sheet页存储条数的限制,方案一般有:1、导出多个excel,然后将多个excel压缩为zip包,导出;2、导出可以通过excel打开的文本文件;3、导出csv文件(简单格式的)。 本样例以导出...
标题中的“java 大数据导出csv小工具”指的是一个基于Java编程语言开发的应用程序,其主要功能是将大量数据转换并导出为CSV(逗号分隔值)格式的文件。CSV是一种通用的文件格式,广泛用于数据交换,因为它可以被...
java操作poi2007导出excel数据,解决内存溢出问题