java用XSSFWorkbook实现读写Excel

写在最前面:
    使用的是JAVA POI实现的导出Excel;
    POI 提供了对2003版本的Excel的支持 ---- HSSFWorkbook
    POI 提供了对2007版本以及更高版本的支持 ---- XSSFWorkbook

引入相关依赖:

        <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>
/*** 读取Excel文件的内容* @param inputStream excel文件,以InputStream的形式传入* @param sheetName sheet名字* @return 以List返回excel中内容*/public static List<Map<String, String>> readExcel(InputStream inputStream, String sheetName) {//定义工作簿XSSFWorkbook xssfWorkbook = null;try {xssfWorkbook = new XSSFWorkbook(inputStream);} catch (Exception e) {System.out.println("Excel data file cannot be found!");}//定义工作表XSSFSheet xssfSheet;if (sheetName.equals("")) {// 默认取第一个子表xssfSheet = xssfWorkbook.getSheetAt(0);} else {xssfSheet = xssfWorkbook.getSheet(sheetName);}List<Map<String, String>> list = new ArrayList<Map<String, String>>();//定义行//默认第一行为标题行,index = 0XSSFRow titleRow = xssfSheet.getRow(0);//循环取每行的数据for (int rowIndex = 1; rowIndex < xssfSheet.getPhysicalNumberOfRows(); rowIndex++) {XSSFRow xssfRow = xssfSheet.getRow(rowIndex);if (xssfRow == null) {continue;}Map<String, String> map = new LinkedHashMap<String, String>();//循环取每个单元格(cell)的数据for (int cellIndex = 0; cellIndex < xssfRow.getPhysicalNumberOfCells(); cellIndex++) {XSSFCell titleCell = titleRow.getCell(cellIndex);XSSFCell xssfCell = xssfRow.getCell(cellIndex);map.put(getString(titleCell),getString(xssfCell));}list.add(map);}return list;}/*** 把单元格的内容转为字符串* @param xssfCell 单元格* @return 字符串*/public static String getString(XSSFCell xssfCell) {if (xssfCell == null) {return "";}if (xssfCell.getCellTypeEnum() == CellType.NUMERIC) {return String.valueOf(xssfCell.getNumericCellValue());} else if (xssfCell.getCellTypeEnum() == CellType.BOOLEAN) {return String.valueOf(xssfCell.getBooleanCellValue());} else {return xssfCell.getStringCellValue();}}/*** 把内容写入Excel* @param list 传入要写的内容,此处以一个List内容为例,先把要写的内容放到一个list中* @param outputStream 把输出流怼到要写入的Excel上,准备往里面写数据*/public static void writeExcel(List<List> list, OutputStream outputStream) {//创建工作簿XSSFWorkbook xssfWorkbook = null;xssfWorkbook = new XSSFWorkbook();//创建工作表XSSFSheet xssfSheet;xssfSheet = xssfWorkbook.createSheet();//创建行XSSFRow xssfRow;//创建列,即单元格CellXSSFCell xssfCell;//把List里面的数据写到excel中for (int i=0;i<list.size();i++) {//从第一行开始写入xssfRow = xssfSheet.createRow(i);//创建每个单元格Cell,即列的数据List sub_list =list.get(i);for (int j=0;j<sub_list.size();j++) {xssfCell = xssfRow.createCell(j); //创建单元格xssfCell.setCellValue((String)sub_list.get(j)); //设置单元格内容}}//用输出流写到exceltry {xssfWorkbook.write(outputStream);outputStream.flush();outputStream.close();}catch (IOException e) {e.printStackTrace();}}

附:把一个Map中的所有键和值分别放到一个list中,再把这两个list整个放到一个大的list里面,即 [ [key1,key2,key3…] , [value1,value2,value3…] ]

    public static List<List> convertMapToList(Map map) {List<List> list = new ArrayList<List>();List<String> key_list = new LinkedList<String>();List<String> value_list = new LinkedList<String>();Set<Entry<String,String>> set = map.entrySet();Iterator<Entry<String,String>> iter1 = set.iterator();while (iter1.hasNext()) {key_list.add(iter1.next().getKey());}list.add(key_list);Collection<String> value = map.values();Iterator<String> iter2 = value.iterator();while (iter2.hasNext()) {value_list.add(iter2.next());}list.add(value_list);return list;}




导出接口:

package com.wqd.dove.demo.export.controller;import com.wqd.dove.demo.export.mapper.UserMapper;
import com.wqd.dove.demo.export.pojo.User;
import lombok.RequiredArgsConstructor;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;/*** @author frank* @description 导出Excel文件控制器* @date 2021/12/18 14:06*/
@RestController
@RequiredArgsConstructor
@RequestMapping(value = {"/export"})
public class MyExcelExportController {private final UserMapper userMapper;@GetMapping(value = "/excel")public void exportExcel(HttpServletResponse response) throws UnsupportedEncodingException {List<User> list = userMapper.list();XSSFWorkbook workbook = new XSSFWorkbook();XSSFSheet sheet = workbook.createSheet();XSSFRow row0 = sheet.createRow(0);row0.createCell(0).setCellValue("姓名");row0.createCell(1).setCellValue("地址");row0.createCell(2).setCellValue("密码");row0.createCell(3).setCellValue("电话");for (int i = 0; i < list.size(); i++) {XSSFRow row = sheet.createRow(i + 1);XSSFCell cell = row.createCell(0);cell.setCellValue(list.get(i).getName());XSSFCell cell1 = row.createCell(1);cell1.setCellValue(list.get(i).getAddress());XSSFCell cell2 = row.createCell(2);cell2.setCellValue(list.get(i).getPassword());XSSFCell cell3 = row.createCell(3);cell3.setCellValue(list.get(i).getPhone());}response.setCharacterEncoding("UTF-8");//让服务器告诉浏览器它发送的数据属于什么文件类型response.setHeader("content-Type", "application/vnd.ms-excel");//当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型。response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode("b.xlsx", "UTF-8"));try {workbook.write(response.getOutputStream());} catch (IOException e) {e.printStackTrace();}}}

访问接口:
在这里插入图片描述
成功下载:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 代码植入,Android Studio之Debug(一):运行期代码植入

我们开发中经常使用IDE的Debug功能&#xff0c;使用最频繁的就是断点查看变量内容&#xff0c;这篇文章主要是介绍在Debug时很常用的一些功能&#xff0c;如Debug变量更新、动态代码植入等。背景看下面一段代码DataToStringAllArgsConstructorpublic class User {private Strin…

Java中导入、导出Excel——HSSFWorkbook 使用

一、介绍 当前B/S模式已成为应用开发的主流&#xff0c;而在企业办公系统中&#xff0c;常常有客户这样子要求&#xff1a;你要把我们的报表直接用Excel打开(电信系统、银行系统)。或者是&#xff1a;我们已经习惯用Excel打印。这样在我们实际的开发中&#xff0c;很多时候需要…

android系统电视缺点,高清智能电视安卓系统优势与不足解析

今年&#xff0c;高清智能电视开始成为平板电视市场的一大焦点&#xff0c;其凭借丰富的应用软件打下了大片的“江山”&#xff0c;作为高清智能电视&#xff0c;其高清晰度画面是必然的追求&#xff0c;而应用的丰富度是其最大的买点&#xff0c;其中最为关键的当属智能操作系…

SXSSFWorkbook使用——使用excel模板

public class Hello {public static void main(String[] args) {// 1.导入excel模板String targetPath rs.getSession().getServletContext().getRealPath("/excelModel/" fileName ".xlsx");// 2.创建一个workbook&#xff0c;对应一个Excel文件File f…

android 跳转动画黑屏,Android8.0 适配解决页面跳转过程出现短暂黑屏的问题

小菜在适配 Android8.0 过程中&#xff0c;遇到很多问题&#xff0c;有很多很常见的问题&#xff0c;今天来整理一下页面跳转时黑屏的问题。问题猜测猜测一&#xff1a;显示 Activity 页面之前会优先开启一个 Starting Window(Preview Window)&#xff0c;等待 Activity 加载完…

基于流的EXCEL文件导出,SXSSFWorkbook源码解析

当我们在实现excel导出时&#xff0c;在数据量过大的情况下&#xff0c;总是容易发生内存溢出的情况。我们可以使用POI提供的 SXSSFWorkbook 类来避免内存溢出。 注&#xff1a;基于POI4.10版本源码 以下是官方文档对SXSSF包的说明&#xff1a; SXSSF (package: org.apache.p…

android设置错误页面,Android ViewPager设置当前项目/页面时抛出IndexOutOfBounds异常

我有一个ViewPager有三个项目.我试图设置ViewPager查看最右边的页面(这将是第二个元素).这是返回IndexOutOfBounds异常,虽然我知道索引应该在边界.这是确切的堆栈&#xff1a;02-22 12:22:50.256: E/AndroidRuntime(384): FATAL EXCEPTION: main02-22 12:22:50.256: E/AndroidR…

【POI】读取Excel表中的数据

确认需要读取的表格的内容: 导入依赖&#xff1a; <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.1</version></dependency>package com.example;import org.apache.poi.s…

w15php系列之基础类型

一、计算100之内的偶数之和 实现思路 所有的偶数除2都为0 代码实现 <?php # 记录100以内的偶数和 $number1; $num0; while($number<100){if($number%20){ $num$number;}$number1; } echo $num; ?>输出的结果 二、计算100之内的奇数之和 实现思路 所有的奇数除…

android 从本地服务器下载文件,Retrofit2-如何从服务器下载文件

在这篇博客中&#xff0c;将会讲述使用Retrofit十分需要的一个功能&#xff1a;怎么去下载文件&#xff0c;下面会展示一些下载文件需要写的代码片段&#xff0c;从小的 png 图片到大的 zip文件。

Java操作Excel中HSSFCell.CELL_TYPE_STRING、BOOLEAN、NUMERIC无定义解决方法

错误原因&#xff1a;jar包版本更新&#xff0c;官方改动&#xff1b; 解决方法&#xff1a; 导入CellType包import org.apache.poi.ss.usermodel.CellType 使用CellType.STRING代替HSSFCell.CELL_TYPE_STRING 其他同理。 新版&#xff1a; if(cellnull||cell.equals(null)…

android x86_64 服务器运行,魔趣 android10 编译x86-64 运行模拟器

cd 代码目录. build/envsetup.shlunch出现1. aosp_arm-eng2. aosp_arm64-eng3. aosp_car_arm-userdebug4. aosp_car_arm64-userdebug5. aosp_car_x86-userdebug6. aosp_car_x86_64-userdebug7. aosp_x86-eng8. aosp_x86_64-eng9. car_x86_64-userdebug10. m_e_arm-userdebug11.…

RoundingMode 几个参数详解

第一版 java.math().RoundingMode里面有几个参数搞得我有点晕&#xff0c;现以个人理解对其一一进行总结&#xff1a; RoundingMode.CEILING&#xff1a;取右边最近的整数 RoundingMode.DOWN&#xff1a;去掉小数部分取整&#xff0c;也就是正数取左边&#xff0c;负数取右边…

android资源透明背景,@谷歌android帝 这是你想要的,全局透明背景教程,两种方法...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼首先大家提取原生态没有任何修改过的framework-res.apk&#xff0c;反编译&#xff0c;(这里特别交代一下&#xff0c;大家要看仔细了&#xff0c;全局背景化透明化的修改是有两种修改的方法&#xff0c;大家可以根据自己喜好来修改…

关于异常nested exception is java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactor

简单看了一下发现原来是没有commons-fileupload包导致的&#xff0c;然后就在pom里加入了依赖。 <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dep…

android 魅族系统升级,魅族Flyme6底层安卓系统升级到了Android7.0/7.1,为何时间这么久?...

国产手机系统中&#xff0c;小米的MIUI和魅族的flyme有着众多的用户。相比魅族的系统来说小米MIUI在更新速度上更胜一筹&#xff0c;开玩笑的讲&#xff0c;小米系统已经升级到了MIUI9而魅族仅仅才Flyme6(当然&#xff0c;这更多的是调侃)。不过也从侧面看出&#xff0c;魅族在…

SVN 回滚(撤回)提交的代码

一、 TortoiseSVN -> Show log 二、 注意&#xff1a;步骤二只是让你本地的代码回滚&#xff08;撤回&#xff09;到你未提交前的一个版本&#xff0c;并不会更新到SVN服务器上&#xff0c;也就是说你的同事依然能更新到你错误提交的代码。 右键点击你想撤回的提交 -&g…

Navicat工具获取操作数据库和表的SQL语句

工具 Navicat Premium 15MySQL服务器技术 SQL语句MySQL 在使用Navicat Premium 15客户端时&#xff0c;对数据库和表进行操作&#xff0c;会产生SQL语句。有时我们不记得SQL语句如何编写&#xff0c;可以直接从工具中获取SQL语句。下面利用实例说明获取SQL语句的几种方法&…

html自动适应屏幕分辨率,css如何自适应屏幕大小?

css如何自适应屏幕大小&#xff1f;下面本篇文章给大家介绍一下使用CSS实现屏幕大小自适应的方法。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助。css如何自适应屏幕大小&#xff1f;要想实现css屏幕大小自适应&#xff0c;首先得引入…

鸿蒙之始有几个老婆,先天五太

本词条缺少概述图&#xff0c;补充相关内容使词条更完整&#xff0c;还能快速升级&#xff0c;赶紧来编辑吧&#xff01;先天五太最早见于东汉今文经谶纬神学《周易乾凿度》&#xff0c;后见于西晋《列子》&#xff0c;被定为道家哲学中代表无极过渡到天地诞生前的五个阶段。分…