package com.sgcc.custom.common.utils.excel.yupont;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.sgcc.custom.common.utils.ResultInDBSaver;
import com.yupont.util.DbUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
@Slf4j
public class POIExcelToHandsontable {
private Integer uploadlogid;
public static Workbook getWorkBook(MultipartFile file) {
//获得文件名
String fileName = file.getOriginalFilename();
//创建Workbook工作薄对象,表示整个excel
Workbook workbook = null;
try {
//获取excel文件的io流
InputStream is = file.getInputStream();
//根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
if (fileName.endsWith("xls")) {
//excel 2003版本
workbook = new HSSFWorkbook(is);
} else if (fileName.endsWith("xlsx")) {
//excel 2007版本
workbook = new XSSFWorkbook(is);
}
} catch (IOException e) {
log.info(e.getMessage());
}
return workbook;
}
/**
* 程序入口方法
* @param file 文件
* @param isWithStyle 是否需要表格样式 包含 字体 颜色 边框 对齐方式
* @return <table>...</table> 字符串
*/
public JSONArray readExcelToHandson(MultipartFile file, boolean isWithStyle){
InputStream is = null;
JSONArray arr = new JSONArray();
try {
// String absolutePath = new File(filePath).getAbsolutePath();
Workbook wb = getWorkBook(file);
if (wb instanceof XSSFWorkbook) {
XSSFWorkbook xWb = (XSSFWorkbook) wb;
arr= getExcelInfo(xWb,isWithStyle);
}else if(wb instanceof HSSFWorkbook){
HSSFWorkbook hWb = (HSSFWorkbook) wb;
arr = getExcelInfo(hWb,isWithStyle);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(is != null) is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return arr;
}
private JSONArray getExcelInfo(Workbook wb,boolean isWithStyle){
/* 用于第二步中修改excel中的值后回显修改后的值 end */
JSONArray arr = new JSONArray();
for(int i = 0;i< wb.getNumberOfSheets();i++){
JSONObject jsonObject = new JSONObject();
List<List> datas = new ArrayList<>();//Excel数据
JSONArray array = new JSONArray();//Excel样式
Sheet sheet = wb.getSheetAt(i);//获取每一个Sheet页的内容
int lastRowNum = sheet.getLastRowNum();
//0是记录跨域内容
Map<String, String> map[] = getRowSpanColSpanMap(sheet);//获取合并单元格的信息
Row row = null; //兼容
Cell cell = null; //兼容
boolean isContainSerial = false;//是否含有序号标志(防止表格中的序号值变为double值)
int num = 0;
List<Map<String,Object>> mergeCell = new ArrayList<>();
int maxLength =0;
for (int rowNum = sheet.getFirstRowNum(); rowNum <= lastRowNum; rowNum++) {
row = sheet.getRow(rowNum);
if (row == null) {
continue;
}
JSONObject style= null;
List<String> content = new ArrayList<>();
int
将不规则EXCEL表格以json形式导出数据——工具类(代码可用)
最新推荐文章于 2023-10-10 17:33:27 发布
本文介绍了一种方法,利用Apache POI库读取不规则的Excel表格内容,并将其转换成JSON格式,方便数据处理和分析。通过创建一个工具类,实现了从Excel到JSON的无缝转换,代码可直接应用于项目中。
摘要由CSDN通过智能技术生成