java实现excel导入导出(jxl),Java面试题及解析
*/
public interface ExcelService {
void export(HttpServletResponse response, HttpServletRequest request);
List importExcel(String type, InputStream inputStream);
}
接口实现类
package com.mycompany.myapp.service.test.impl;
import com.mycompany.myapp.service.test.ExcelService;
import com.mycompany.myapp.util.DownloadFileUtil;
import com.mycompany.myapp.util.JxlUtil;
import com.mycompany.myapp.web.rest.vm.LoginVM;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
@description:
@author: alan
@time: 2021/7/25 21:38
*/
public class ExcelJxlServiceImpl implements ExcelService {
/**
- 导出excel
*/
@Override
public void export(HttpServletResponse response, HttpServletRequest request) {
// 文件新名
String newFileName = “UserInfo.xls”;
String pathName = “D:/usr/” + newFileName;
String title[] = {“账号”, “密码”, “登记”};
LoginVM loginOne = new LoginVM();
loginOne.setUsername(“小米”);
loginOne.setPassword(“123”);
loginOne.setRememberMe(true);
LoginVM loginTwo = new LoginVM();
loginTwo.setUsername(“小明”);
loginTwo.setPassword(“123”);
loginTwo.setRememberMe(false);
List list = new ArrayList<>(
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
);
list.add(loginOne);
list.add(loginTwo);
//文件保存在指定位置
JxlUtil.exportExcel(pathName, title, list);
//获取文件流返回给客户端
DownloadFileUtil.downloadFile(response, request, pathName);
}
/**
导入
@param type
@param inputStream
@return
*/
@Override
public List importExcel(String type, InputStream inputStream) {
List list = new ArrayList();
if (type.equals(“xls”)) {
list = JxlUtil.xlsContent(inputStream);
} else {
list = JxlUtil.csvContent(inputStream);
}
return list;
}
}
jxl工具类
package com.mycompany.myapp.util;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.VerticalAlignment;
import jxl.read.biff.BiffException;
import jxl.write.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
/**
@description:
@author: alan
@time: 2021/7/23 18:26
*/
public class JxlUtil {
/**
导出Excel
@param fileName 文件地址名称
@param Title 导出excel的标题
@param listContent 导出的list
@return
*/
public final static boolean exportExcel(String fileName, String[] Title, List<?> listContent) {
final Logger logger = LoggerFactory.getLogger(JxlUtil.class);
WritableWorkbook workbook = null;
// 以下开始输出到EXCEL
try {
String filePathName = fileName.substring(0,fileName.lastIndexOf("/"));
File f = new File(filePathName);
if(!f.exists()){
f.mkdirs();//创建目录
}
// 创建可写入的Excel工作簿
File file = new File(fileName);
if (!file.exists()) {
boolean bool = file.createNewFile();
logger.info(“创建Excel工作簿结果”,bool);
}
/** 创建工作簿** */
workbook = Workbook.createWorkbook(file);
/** 创建工作表** */
WritableSheet sheet = workbook.createSheet(“Sheet1”, 0);
/** 设置纵横打印(默认为纵打)、打印纸******* */
jxl.SheetSettings sheetset = sheet.getSettings();
sheetset.setProtected(false);
/** 设置单元格字体** */
WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10);
WritableFont BoldFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD);
/** 以下设置三种单元格样式,灵活备用 */
// 用于标题居中
WritableCellFormat wcf_center = new WritableCellFormat(BoldFont);
wcf_center.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
wcf_center.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐
wcf_center.setAlignment(Alignment.CENTRE); // 文字水平对齐
wcf_center.setWrap(false); // 文字是否换行
// 用于正文居左
WritableCellFormat wcf_left = new WritableCellFormat(NormalFont);
wcf_left.setBorder(Border.NONE, BorderLineStyle.THIN); // 线条
wcf_left.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐
wcf_left.setAlignment(Alignment.LEFT); // 文字水平对齐
wcf_left.setWrap(false); // 文字是否换行
/** 以下是EXCEL开头大标题,暂时省略****** */
// sheet.mergeCells(0, 0, colWidth, 0);
// sheet.addCell(new Label(0, 0, “XX报表”, wcf_center));
/** 以下是EXCEL第一行列标题****** */
for (int i = 0; i < Title.length; i++) {
sheet.addCell(new Label(i, 0, Title[i], wcf_center));
}
/** 以下是EXCEL正文数据****** */
Field[] fields = null;
int i = 1;
for (Object obj : listContent) {
fields = obj.getClass().getDeclaredFields();
int j = 0;
for (Field v : fields) {
v.setAccessible(true);
Object va = v.get(obj);
if (va == null) {
va = “”;
}
if (va.getClass().getSimpleName().equals(“Double”)) {
sheet.addCell(new Label(j, i, BigDecimal.valueOf((Double) va) + “”, wcf_left));
} else if (va.getClass().getSimpleName().equals(“Float”)) {
Double vDouble = ((Float) va).doubleValue();
sheet.addCell(new Label(j, i, new BigDecimal(new DecimalFormat("#.00").format(vDouble)) + “”,
wcf_left));
} else {
sheet.addCell(new Label(j, i, va.toString() + “”, wcf_left));
}
j++;
}
i++;
}
/** **将以上缓存中的内容写到EXCEL文件中 */
workbook.write();
} catch (Throwable t) {
logger.error(“系统提示:Excel文件导出失败,原因:”,t.getMessage());
t.printStackTrace();
}finally {
try {
/** 关闭文件**** */
workbook.close();
}catch (Exception e){
logger.error(“系统提示:关闭文件失败,原因:”,e.getMessage());
}
}
return true;
}
/**
获取CSV文件中的内容
@param inputStream
@return
*/
public static List csvContent(InputStream inputStream) {
List allString = new ArrayList<>();
if (inputStream != null) {
InputStreamReader inputStreamReader;
BufferedReader br = null;
//FileInputStream fins = new FileInputStream(csv);
try {
inputStreamReader = new InputStreamReader(inputStream, “GBK”);
br = new BufferedReader(inputStreamReader);
String line = “”;
String everyLine = “”;
while ((line = br.readLine()) != null) { // 读取到的内容给line变量
everyLine = line + " ,";
allString.add(everyLine);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
return allString;
}
/**
获取xls文件中的内容
@param inputStream
@return
*/
public static List xlsContent(InputStream inputStream) {
List allString = new ArrayList();
try {
// 创建输入流,读取Excel
//InputStream is = new FileInputStream(xls.getAbsolutePath());
// jxl提供的Workbook类
Workbook wb = Workbook.getWorkbook(inputStream);
// Excel的页签数量
int sheet_size = wb.getNumberOfSheets();
for (int index = 0; index < sheet_size; index++) {
// 每个页签创建一个Sheet对象
Sheet sheet = wb.getSheet(index);
// sheet.getRows()返回该页的总行数
for (int i = 0; i < sheet.getRows(); i++) {
// sheet.getColumns()返回该页的总列数
StringBuffer sb = new StringBuffer();
for (int j = 0; j < sheet.getColumns(); j++) {
String cellinfo = sheet.getCell(j, i).getContents();
sb.append(cellinfo + “;”);
}
allString.add(sb.toString().substring(0, sb.length() - 1));
}
}
} catch (Exception e) {
e.printStackTrace();
}
return allString;
}
}
下载工具类
package com.mycompany.myapp.util;
java实现excel导入导出(jxl),Java面试题及解析相关推荐
- java实现excel导入导出,对象图片读取,上传七牛云
java实现excel导入导出以及解决方案 因为公司业务需求,要完成针对表格的导入导出,excel这里使用MultipartFile类接收 ,下面是部分关键代码,希望有所帮助 //获取excel文件的 ...
- Java POI Excel导入导出
Java POI Excel导入导出 1.maven引入依赖 2.导入Excel 3.导出Excel 1.maven引入依赖 <!-- POI Excel 操作 --> <depen ...
- Java实现Excel导入导出操作详解
前言 本次封装是基于 POI 的二次开发,最终使用只需要调用一个工具类中的方法,就能满足业务中绝大部门的导入和导出需求. 1. 功能测试 1.1 测试准备 在做测试前,我们需要將[2. 环境准备]中的 ...
- java实现excel导入导出(jxl),Java入门你值得拥有
private ExcelService excelService = new ExcelJxlServiceImpl(); @Autowired private ObjectMapper objec ...
- Java操作Excel导入导出(EasyExcel)
在管理一个系统时,总会有许多的数据,为了方便浏览查看数据,系统总会提供「导出Excel」的功能:有导出就有导入,在要向数据库中插入大量的数据时,我们向程序提供准备好的 Excel,然后程序读取表格内容 ...
- java开发excel导入导出工具类基于EasyExcel
一.工具类 import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.style.column.LongestMatchCo ...
- Java实现Excel导入导出操作
java 对excel的导入及导出 最近在做对excel的导入导出,在平常的工作中,导入导出excel数据是常见的需求,今天就简单的记录一下Java是如何来实现这个功能的,感兴趣或者正好大家在工作中遇 ...
- Java实现Excel导入导出
1.Excel导入 总结一下目标,就是要将excel中的数据行.逐一提取,最后得到一个list,这个list的每个元素就是excel的每个数据行的实例,之后的操作就是常规的java逻辑处理了. 可以把 ...
- JAVA实现Excel导入/导出 以及excel样式设置
POI的下载与安装 请到网站http://www.apache.org/dyn/closer.cgi/poi/右击超链接2.5.1.zip下载压缩包poi-bin-2.5.1-final-200408 ...
最新文章
- 使用Cbrgen和Setdest构造无线仿真环境
- centos7重新加载服务的命令_Centos7 常用防火墙操作命令
- 判断字符串中是否为数字的三种方法
- MyBatis中in的使用
- 《C++ Primer 5th》笔记(3 / 19):字符串、向量、迭代器和数组
- 任务分发系统-Qcmd-http详解
- 判断IMEI或MEID是否合法
- 基于JAVA+SpringMVC+MYSQL的在线英语精品课程视频教学平台
- pap与chap协议
- 第五课--使用定时器实现中断(1)
- bagging boosting 随机森林 GBDT对比
- Docker安装phpmyadmin
- 应用出海之--AdMob
- 蝴蝶曲线python_蝴组词有哪些?除了蝴蝶还可以组什么?蝴字的基本字义
- CSDN博文周刊第一期 | 2018年总结:向死而生,为爱而活——忆编程青椒的戎马岁月
- 网站被黑中毒WebShell木马的解决方案
- 清华大学计算机学院曹伦郗,四川文理第一名填报北大 高分“学霸”们最后选了啥专业...
- 20个令人疯狂的投资事实
- 多频外差法(三频四步相移)
- VS2010 C# WinForm学习视频