java中poi导入数据_java中使用POI+excel 实现数据的批量导入和导出

java web中使用POI实现excel文件的导入和导出

文件导出

//导入excle表

public String exportXls() throws IOException{

//1.查询所有需要的数据

List list = subareaService.findAll();

//2.使用POI将数据写进excel表中

//2.1在内存中创建一个excel文件

HSSFWorkbook workbook = new HSSFWorkbook();

//2.2创建一个标签页

HSSFSheet sheet = workbook.createSheet("分区数据");

//2.3创建标题行

HSSFRow headRow = sheet.createRow(0);

headRow.createCell(0).setCellValue("分区编号");

headRow.createCell(1).setCellValue("开始编号");

headRow.createCell(2).setCellValue("结束编号");

headRow.createCell(3).setCellValue("位置信息");

headRow.createCell(4).setCellValue("省市区");

//2.4将需要的数据放入excel表中

for (Subarea subarea : list) {

HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum()+1);

headRow.createCell(0).setCellValue(subarea.getId());

headRow.createCell(1).setCellValue(subarea.getStartnum());

headRow.createCell(2).setCellValue(subarea.getEndnum());

headRow.createCell(3).setCellValue(subarea.getPosition());

headRow.createCell(4).setCellValue(subarea.getRegion().getName());

}

//3.输出流进行文件下载

String filename = "分区信息表.xls";

String mimeType = ServletActionContext.getServletContext().getMimeType(filename);

ServletOutputStream outs = ServletActionContext.getResponse().getOutputStream();

//获取客户端的浏览器类型

String agent = ServletActionContext.getRequest().getHeader("User-Agent");

filename = FileUtils.encodeDownloadFilename(filename, agent);

ServletActionContext.getResponse().setHeader("content-disposition",

"attachment;filename"+filename);

workbook.write(outs);

return NONE;

}

针对不同浏览器下载使用的工具类

/**

* 下载文件时,针对不同浏览器,进行附件名的编码

*

* @param filename

* 下载文件名

* @param agent

* 客户端浏览器

* @return 编码后的下载附件名

* @throws IOException

*/

public static String encodeDownloadFilename(String filename, String agent) throws IOException {

if (agent.contains("Firefox")) { // 火狐浏览器

filename = "=?UTF-8?B?" + new BASE64Encoder().encode(filename.getBytes("utf-8")) + "?=";

filename = filename.replaceAll("\r\n", "");

} else { // IE及其他浏览器

filename = URLEncoder.encode(filename, "utf-8");

filename = filename.replace("+", " ");

}

return filename;

}

POI Excel 合并数据相同的行

import java.io.Serializable; /** * POI Excel报表导出,列合并实体
* * @author WQ * */ public class Po ...

在JAVA中怎么比较Double类型数据的大小

在JAVA中怎么比较Double类型数据的大小  我来答  浏览 33044 次   3个回答 #活动# “双11”答题活动,奖励加码!最高得2000元购物礼金! pollutedair 2015- ...

Java中使用poi导入、导出Excel

一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...

java中使用poi导入导出excel文件_并自定义日期格式

Apache POI项目的使命是创造和保持java API操纵各种文件格式基于Office Open XML标准(OOXML)和微软的OLE复合文档格式(OLE2)2.总之,你可以读写Excel文件使 ...

Java中的基本类型转换,数据溢出原理

java中的数据类型 java是一种强类型语言,在java中,数据类型主要有两大类,基本数据类型和引用数据类型,不同的数据类型有不同的数据存储方式和分配的内存大小. 基本数据类型中,各数据类型所表示的 ...

java中多个线程访问共享数据的方式有哪些

多个线程对共同数据的访问的实现,要根据情况而定 (1)当访问共同的代码的时候:可以使用同一个Runnable对象,这个Runnable对象中有这个共享数据,比如卖票系统就可以这么做.或者这个共享数据封 ...

python爬虫简单实现,并在java中调用python脚本,将数据保存在json文件中

# coding:utf-8 import urllib2 from bs4 import BeautifulSoup import json import sys reload(sys) sys.s ...

170313、poi:采用自定义注解的方式导入、导出excel(这种方式比较好扩展)

步骤一.自定义注解 步骤二.写Excel泛型工具类 步骤三.在需要导出excel的类属相上加上自定义注解,并设置 步骤四.写service,controller 步骤一:自定义注解 import ja ...

.net实现与excel的数据交互、导入导出

应该说,一套成熟的基于web的管理系统,与用户做好的excel表格进行数据交互是一个不可或缺的功能,毕竟,一切以方便客(jin)户(qian)为宗旨. 本人之前从事PHP的开发工作,熟悉PHP的都应该 ...

随机推荐

初始python第三天(三)

全局变量与局部变量 1.什么是全局变量 在globals中的变量,都是全局变量,全局变量的作用域就是整个程序 NAME = 'alex' def global_test(): name = 'alex ...

【转】 TechED2010与我(三) —— 初识云计算

作者用到的比喻很好. 网址:TechED2010与我(三) -- 初识云计算 初识云计算最近"云计算"被炒的很热,但是由于工作重点主要是做WinForm的控件开发,对云计算的接触比 ...

MongoDB的学习和使用(MongoDB GridFS)

MongoDB GridFS GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频.视频等). GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中 ...

IE6兼容性问题及IE6常见bug详细汇总

转载地址:http://www.jb51.net/css/76894.html 1.IE6怪异解析之padding与border算入宽高 原因:未加文档声明造成非盒模型解析 解决方法:加入文档声明&l ...

nsight 使用问题

slot 0 offset 0 stride DXGI_FORMAT_r32b32g32_FLOAT 这样一个memory 100.0000, 100.0000,10.0000,1.0000 stri ...

mysql存储过程和事件

1.会员表member和车辆表car,更新每个会员下面的车辆数量have_car字段. DELIMITER $$ USE $$ DROP PROCEDURE IF EXISTS `sp_update_ ...

Contest2037 - CSU Monthly 2013 Oct(中南大学2013年10月月赛水题部分题解)

Problem A: Small change 题解:http://www.cnblogs.com/crazyapple/p/3349469.html Problem B: Scoop water 题 ...

xcode6.4 7.2下载地址

XCode 7.2 :ht tp://adcdownload.apple.com/Developer_Tools/Xcode_7.2/Xcode_7.2.dmgXCode7.1.1:ht tp://a ...

VBA批量导入图片到多Word文档并加标题(会飞的鱼)

感谢会飞的鱼大牛~ Public fp$, obmapp As Object Sub kk() 文件夹浏览器 Application.ScreenUpdating = False Set fso = ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Java的多线程来同时读取Excel文件的多个部分,并将它们合并到一个数据结构。以下是一个简单的Java多线程读取Excel文件的示例代码: ```java import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; public class ExcelReader { private static final int THREAD_COUNT = 4; public List<Data> readExcel(File file) throws IOException, InterruptedException { List<Data> dataList = new ArrayList<>(); try (FileInputStream fis = new FileInputStream(file); HSSFWorkbook workbook = new HSSFWorkbook(fis)) { Sheet sheet = workbook.getSheetAt(0); int rowCount = sheet.getLastRowNum() - sheet.getFirstRowNum(); if (rowCount <= THREAD_COUNT) { // 无需多线程 for (int i = 1; i <= rowCount; i++) { Row row = sheet.getRow(i); Cell cell1 = row.getCell(0); Cell cell2 = row.getCell(1); Cell cell3 = row.getCell(2); dataList.add(new Data(cell1.getStringCellValue(), cell2.getStringCellValue(), cell3.getStringCellValue())); } } else { // 多线程读取 ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT); int batchSize = rowCount / THREAD_COUNT; int remainCount = rowCount % THREAD_COUNT; int startIndex = 1; int endIndex = batchSize; for (int i = 0; i < THREAD_COUNT; i++) { if (i == THREAD_COUNT - 1) { endIndex += remainCount; } final int start = startIndex; final int end = endIndex; executor.execute(() -> { List<Data> subList = new ArrayList<>(); for (int j = start; j <= end; j++) { Row row = sheet.getRow(j); Cell cell1 = row.getCell(0); Cell cell2 = row.getCell(1); Cell cell3 = row.getCell(2); subList.add(new Data(cell1.getStringCellValue(), cell2.getStringCellValue(), cell3.getStringCellValue())); } synchronized (dataList) { dataList.addAll(subList); } }); startIndex = endIndex + 1; endIndex += batchSize; } executor.shutdown(); while (!executor.isTerminated()) { Thread.sleep(100); } } } return dataList; } private static class Data { private String field1; private String field2; private String field3; public Data(String field1, String field2, String field3) { this.field1 = field1; this.field2 = field2; this.field3 = field3; } } } ``` 在这个示例,我们使用了Apache POI库来读取Excel文件。我们将文件读取分为两种情况: - 如果行数小于或等于线程数,则不需要多线程。 - 如果行数大于线程数,则将Excel文件的行数平均分配到多个线程。 在第二种情况下,我们使用Java ExecutorService API来创建一个线程池,并将行数分成线程数份。然后,我们使用Java lambda表达式来定义每个线程的任务,该任务将读取Excel文件的每个部分,并将其添加到一个数据列表。最后,我们使用synchronized块来确保多个线程不会同时修改数据列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值