java控制excel_java操作excel

1. 生成并下载excel文件

controller

@RequestMapping(value = "/download", method = RequestMethod.GET)

public xxx downloadFile(HttpServletResponse response) {

response.setContentType("application/octet-stream");

response.setHeader("content-type", "application/octet-stream");

try {

response.setHeader("Content-Disposition", "attachment;fileName=" + java.net.URLEncoder.encode(fileName, "UTF-8"));// 设置文件名

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

try {

excelService.download(response.getOutputStream());

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

service

public interface ExcelService {

void download(OutputStream outputStream) throws IOException;

}

impl

@Override

public void download(OutputStream outputStream) throws IOException{

//1.创建excel(工作簿)

Workbook wb = new XSSFWorkbook();

//2.创建Sheet

Sheet sheet = wb.createSheet();

//3.创建表头,参数为要创建的行的位置

Row header = sheet.createRow(0);

//4.创建单元格对象,向单元格写数据

Cell cell = null;

List headerList = Lists.newArrayList("姓名","年龄","性别","爱好","生日");

for (int i = 0; i < headerList.size(); i++) {

//行对象.createCell(单元格位置)

cell = header.createCell(i);

//赋值

cell.setCellValue(headerList.get(i));

}

//5.工作簿写进输出流

wb.write(outputStream);

}

2. 解析前端上传的excel

Controller

@RequestMapping(value = "/excel/import", method = RequestMethod.GET)

public xxx uploadExcel(@RequestParam("upload") MultipartFile file) {

excelService.uploadExcel(file);

return xxx.OK;

}

service

public interface ExcelService {

void uploadExcel(MultipartFile multipartFile);

}

impl

public void uploadExcel(MultipartFile multipartFile) {

List dataList = ExcelUtil.loadExcelData(multipartFile);

}

ExcelUtil

public static List loadExcelData(MultipartFile file) throws Exception {

Workbook wb;// 创建Excel2003文件对象

wb = WorkbookFactory.create(file.getInputStream());

//获取第一个页签对象

Sheet sheet = wb.getSheetAt(0);

//获取有内容的总行数

int rowsNumber = sheet.getLastRowNum();

if (rowsNumber >= 0) {

List excelList = new ArrayList<>(rowsNumber);

//遍历页签的每一行

Row firstRow = sheet.getRow(0);

if (rowsNumber == 0 && firstRow == null) {

return null;

}

//总列数

int cellsNumber = sheet.getRow(0).getLastCellNum();

for (int i = 0; i <= rowsNumber; i++) {

Row row = sheet.getRow(i);// 获取行对象

if (row == null) {// 如果为空,不处理

continue;

}

int num = 0;//记录该行的空格总数

List newList = new ArrayList<>(cellsNumber);

for (int j = 0; j < cellsNumber; j++) {

Cell cell = row.getCell(j);// 获取单元格对象

if (cell != null) {

String value = getValueByType(cell);

if (StringUtils.isEmpty(value)) {

num += 1;

}

newList.add(value);

} else {

newList.add("");

num += 1;

}

}

if (num < cellsNumber) {//不是全部空格,把这行加到返回数据中

excelList.add(newList);

}

}

return excelList;

}

wb.close();

return null;

}

private static String getValueByType(Cell cell) {

//判断是否为null或空串

if (cell==null || cell.toString().trim().equals("")) {

return "";

}

String cellValue = "";

int cellType=cell.getCellType();

if(cellType==Cell.CELL_TYPE_FORMULA){ //表达式类型

cellType=evaluator.evaluate(cell).getCellType();

}

switch (cellType) {

case Cell.CELL_TYPE_STRING: //字符串类型

cellValue= cell.getStringCellValue().trim();

cellValue=StringUtils.isEmpty(cellValue) ? "" : cellValue;

break;

case Cell.CELL_TYPE_BOOLEAN: //布尔类型

cellValue = String.valueOf(cell.getBooleanCellValue());

break;

case Cell.CELL_TYPE_NUMERIC: //数值类型

if (HSSFDateUtil.isCellDateFormatted(cell)) { //判断日期类型

cellValue = DateUtil.formatDateByFormat(cell.getDateCellValue(), "yyyy-MM-dd");

} else { //否

cellValue = new DecimalFormat("#.######").format(cell.getNumericCellValue());

}

break;

default: //其它类型,取空串吧

cellValue = "";

break;

}

return cellValue;

}

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

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

相关文章

java 方法权限_Java控制访问权限的方法

这篇博客主要用来介绍Java中的访问权限.引入访问控制权限我们都知道&#xff0c;一个通用类库(如&#xff1a;JDK)开发出来的目的是让普通开发者重用以节省开发时间与精力&#xff0c;但是类库的设计不可能在刚开始就尽善尽美&#xff0c;普通开发者在对类库的使用过程中&#…

java套接字客户端_使用Java从客户端套接字读取数据(Read data from a client socket in Java)...

使用Java从客户端套接字读取数据(Read data from a client socket in Java)我编写了从客户端套接字发送/接收数据的代码。 发送数据步骤已成功完成&#xff0c;但是当我想从套接字读取数据时&#xff0c; readLine()方法阻止程序&#xff0c;而没有要读取的数据。这是我的代码&…

xml动态生成java_从XML文档动态生成Java类

考虑这种情况&#xff1a;我有一个名为person.xml的XML文件,其中包含以下数据.MrFoo28如果我想将这个XML读入Java对象,我将创建一个名为PersonBean的Java bean(使用属性的getter / setter)&#xff1a;class Person{String name;int age;}我可以使用任何API来读取XML并填充Java…

java lpad oracle_Oracal的Lpad函数

2007-09-21 17:13 | pinty回复楼上&#xff0c;根据LEVEL的数决定输出“-”的个数&#xff0c;看下面的例子SELECT LEVEL, LPAD( ,2*(LEVEL - 1)) || lname "EMPLOYEE",emp_id, manager_emp_idFROM employeeSTART WITH emp_id 7839CONNECT BY NOCYCLE PRIOR emp_id …

用java输入学生姓名查询成绩_编写一个Java程序,提示用户输入学生数量,学生姓名和他们的成绩,并按照成绩的降序打印学生姓名...

importjava.util.Scanner;publicclassmyclass{publicstaticvoidmain(String[]args){ScannerinputnewScanner(System.in);System.out.print("请输入学生个数&#xff0c;学生姓名以及学生成绩");...import java.util.Scanner;public class myclass{public static void…

java对xml解析_Java中对xml的解析

// 1.通过DocumentBuilderFactor创建解析工厂DocumentBuilderFactory builderFactory DocumentBuilderFactory.newInstance();// 2.通过工厂获得解析器DocumentBuilder builder builderFactory.newDocumentBuilder();// 3.通过parser方法获取DocumentDocument document buil…

刻画小狗状态java_JAVA面向接口编程

JAVA面向接口编程小狗在不同环境条件下可能呈现不同的状态&#xff0c;小狗通过调用 cry()方法体现自己的当前的状 态。要求用接口封装小狗的状态。具体要求如下。• 编写一个接口 DogState&#xff0c;该接口有一个名字为 void showState()的方法。• 编写 Dog 类&#xff0c;…

java jdbc(mysql)驱动源码分析_JAVA JDBC(MySQL)驱动源码分析(二)

本文系转载&#xff0c;地址&#xff1a;http://blog.csdn.net/brilliancezhou/article/details/5425687上一篇中分析了Class.forName(“com.mysql.jdbc.Driver”)幕后所做的事情&#xff0c;也就是在Driver实现类中的静态块和构造函数&#xff0c;本篇主要来分析一下静态块的一…

java %3c%=a%%3e_跪求帮忙解析,急!!!

xml 这个参数的值&#xff0c;是被 urlencode 两次的东西。 php 不懂&#xff0c; Python 的话是用 urllib.unquote 就可以了。>>> s %3C%3Fxmlversion%3D%221.0%22encoding%3D%22gbk%22%3F%3E%253Ctask%253E%253Cuser%253E%253Coper%253Emod%253C%252Foper%253E%253…

java环境变量一闪而过_Java环境变量配置和Tomcat启动时cmd界面一闪而过问题

Java环境变量配置计算机 -> 属性 -> 高级系统设置 -> 环境变量 -> 系统变量中配置Java环境变量。配置JAVA_HOME&#xff0c;属于必配项&#xff0c;如果不配置&#xff0c;直接指定path路径利用工具可以进行Java项目开发&#xff0c;但是后期使用Tomcat开发会出现问…

ubuntu启动php-fpm_ubuntu安装php-fpm+xdebug

一、安装程序包1、sudo apt-get install php5-dev2、sudo apt-get install php5-xdebug二、修改php.ini配置文件; 修改/etc/php5/fpm/php.ini或在增加文件/etc/init.d/php5/conf.d/xdebug.ini; configuration for php Xdebug module;extentionxdebug.so[xdebug]zend_extension/…

php 图片合成,PHP中多张图片合成一张图片例子

今天分享一段PHP中多张图片合成一张图片的代码实现&#xff0c;我们可以在图片合成&#xff0c;水印&#xff0c;九宫格等需求下使用到类似这样的图片合成效果,下面一起来看看例子吧。今天分享一段PHP中多张图片合成一张图片的代码实现&#xff0c;我们可以在图片合成&#xff…

php的cms是什么意思,phpcms是什么

phpcms是一款具备文章、下载、图片、分类信息、影视、商城、采集、财务等众多功能的强大、易用、可扩展的优秀网站管理软件&#xff1b;该软件采用模块化开发&#xff0c;支持多种分类方式&#xff0c;使其可方便实现个性化网站的设计、开发与维护。phpcms是一款具备文章、下载…

php5.4源码下载,WordPress v5.4.2官方正式版源码下载

源码说明WordPress 5.4.2 正式版发布了&#xff0c;此安全和维护版本具有23个修复和增强功能。此外&#xff0c;它还添加了许多安全修复程序-请参阅下面的列表。这些错误会影响WordPress 5.4.1和更早版本。5.4.2版修复了这些问题&#xff0c;因此您需要升级。如果尚未更新到5.4…

前端vue后端java,Vue调用后端java接口的实例代码_亦心_前端开发者

前段时间 做了个学校的春萌项目&#xff0c;其中用到先上后端接口代码&#xff1a;package controller;import net.sf.json.JSONObject;import util.DBUtil;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Http…

边缘检测滤波matlab,卷积滤波器与边缘检测

频率&#xff1a;对于声音&#xff0c;频率实际上是指声波振荡的速度高低频率高频图像是强度变化很大的图像。并且亮度级别从一个像素到下一个像素快速变化。低频图像可以是亮度相对均匀或变化非常慢的图像。这是一个例子中最容易看到的。大多数图像都有高频和低频成分。在上图…

php 读取 stl 文件,科学网—[转载]【源码】读取ASCII STL文件的STLReader - 刘春静的博文...

读取包含顶点和面的ASCII STL文件&#xff0c;并将其构造为矩阵“顶点”、“颜色”和“面”。之后&#xff0c;使用各小模块在Matlab上建立模型。Read ASCII STL file which contains vertexes and faces and structure it to matrixes "vertexes", "colors&quo…

1核1g服务器php,虚拟主机1核1g什么意思

虚拟主机由于用户数量庞大&#xff0c;因此每个虚拟主机需要足够高的配置才能支持这么多网站同时架设、运行&#xff0c;如上面所说的1核&#xff0c;完全没法带动。比如那么我们平常怎么知道自己的虚拟主机配置是怎样的呢&#xff1f;可以直接咨询下面我们来看下西部数码虚拟主…

matlab生成西门子plc源文件,西门子PLC如何把DB快做成源文件

打开db块后在菜单option下面有个customize&#xff0c;弹出的点选项sources那里就可以找到生成源文件的按钮。还原---源文件是保存在sources下面&#xff0c;你可以打开你的源文件并编译即可生成源文件可以导出成awl文件&#xff0c;可以在其他的环境下改写(比如记事本、excel等…

dsm php,docker dsm是什么?

docker dsm是什么&#xff1f;docker dsm是&#xff1a;从DSM6.0开始如果装了docker的话可以看到下面的图&#xff1a;上图可以看到创建了一个新的DSM&#xff0c;名字为DDSM1&#xff0c;经试验功能和正式DSM一模一样。同时白裙一样可以QuickConnect。然后用Putty登录上去&…