import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
-
@description:
-
@author: alan
-
@time: 2021/7/23 18:08
*/
@Controller
@RequestMapping(“/api”)
public class TestJxl {
private final Logger log = LoggerFactory.getLogger(TestJxl .class);
private ExcelService excelService = new ExcelJxlServiceImpl();
@Autowired
private ObjectMapper objectMapper;
@PostMapping(“/test/exportExcel”)
@ApiOperation(value = “导出Excel”)
public void exportExcel(HttpServletResponse response, HttpServletRequest request) {
excelService.export(response, request);
}
@PostMapping(“/test/importExcel”)
@ApiOperation(value = “导入Excel”)
public ResponseEntity importFile(@RequestParam(“file”) MultipartFile multipartFile) {
try {
String types = multipartFile.getContentType();
InputStream inputStream = multipartFile.getInputStream();
File file = new File(multipartFile.getOriginalFilename());
List fileContents = new ArrayList();
if (multipartFile.getOriginalFilename().contains(“xls”)) {
fileContents = excelService.importExcel(“xls”, inputStream);
} else if (multipartFile.getOriginalFilename().contains(“csv”)) {
fileContents = excelService.importExcel(“csv”, inputStream);
}
String json = objectMapper.writeValueAsString(fileContents);
log.info(“导入的数据:{}”, json);
} catch (Throwable t) {
t.printStackTrace();
}
return new ResponseEntity<>(null, null, HttpStatus.OK);
}
}
接口类
package com.mycompany.myapp.service.test;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.List;
/**
-
@description:
-
@author: alan
-
@time: 2021/7/25 21:33
*/
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<>();
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类
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
tAbsolutePath());
// jxl提供的Workbook类
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-U98ZNGNl-1715732594013)]
[外链图片转存中…(img-f0AJchQm-1715732594014)]
[外链图片转存中…(img-NcT3dFjP-1715732594014)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!