2023-02-16 14:17:36 +08:00

284 lines
12 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.zhgd.xmgl.util;
import com.zhgd.jeecg.common.mybatis.EntityMap;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
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.core.io.ClassPathResource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.*;
/**
* @program: wisdomSite
* @description: excel处理工具类
* @author: Mr.Peng
* @create: 2021-08-16 17:42
**/
@Slf4j
public class ExcelUtils {
public static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) throws IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
workbook.write(response.getOutputStream());
}
public static List<Map<String, String>> jxlExlToList(InputStream is, int index) throws Exception {
Workbook book = null;
List<Map<String, String>> list = null;
String companyId = null;
//Map<String,Object> map=new HashMap<>();
try {
book = WorkbookFactory.create(is);
//book = new XSSFWorkbook(is);// 创建一个新的写入工作簿
Sheet sheet = book.getSheetAt(0);
//int totalRows = sheet.getLastRowNum();
int totalRows = sheet.getPhysicalNumberOfRows();
//int totalColumns = sheet.getColumns();
Row xssfRow = sheet.getRow(index);
int totalColumns = xssfRow.getLastCellNum();
if (totalColumns <= 0) {
return null;
}
//读取指定行作为Map中的key
List<String> tableHeaderlist = new ArrayList<>();
for (int i = 0; i < totalColumns; i++) {
String value = getCellValue(sheet, xssfRow.getCell(i));
if (tableHeaderlist.contains(value)) {
value = value + "(1)";
}
if (StringUtils.isNotEmpty(value)) {
value = value.replaceAll("[\\t\\n\\r]", "");
}
tableHeaderlist.add(value);
}
//将指定行后面每一行存为Map集合然后存为list
list = new ArrayList<>();
Map<String, String> rowData = new LinkedHashMap<>();
int start = 1 + index;
for (int i = start; i < totalRows; i++) {
xssfRow = sheet.getRow(i);
rowData = new LinkedHashMap<>(totalColumns);
for (int j = 0; j < xssfRow.getLastCellNum(); j++) {
if (j < totalColumns) {
if (StringUtils.isNotEmpty(tableHeaderlist.get(j).toString())) {
if (xssfRow.getCell(j) != null) {
String value = getCellValue(sheet, xssfRow.getCell(j));
rowData.put(tableHeaderlist.get(j).toString(), value);
} else {
rowData.put(tableHeaderlist.get(j).toString(), "");
}
}
}
}
if (rowData.size() > 0) {
list.add(rowData);
}
}
log.info("工作簿读取数据成功!");
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
public static String getMergedRegionValue(Sheet sheet, int row, int column) {
int sheetMergeCount = sheet.getNumMergedRegions();
for (int i = 0; i < sheetMergeCount; i++) {
CellRangeAddress ca = sheet.getMergedRegion(i);
int firstColumn = ca.getFirstColumn();
int lastColumn = ca.getLastColumn();
int firstRow = ca.getFirstRow();
int lastRow = ca.getLastRow();
if (row >= firstRow && row <= lastRow) {
if (column >= firstColumn && column <= lastColumn) {
Row fRow = sheet.getRow(firstRow);
Cell fCell = fRow.getCell(firstColumn);
return getValue(fCell);
}
}
}
return null;
}
/**
* 判断指定的单元格是否是合并单元格
*
* @param sheet 工作表
* @param row 行下标
* @param column 列下标
* @return
*/
public static boolean isMergedRegion(Sheet sheet, int row, int column) {
int sheetMergeCount = sheet.getNumMergedRegions();
for (int i = 0; i < sheetMergeCount; i++) {
CellRangeAddress range = sheet.getMergedRegion(i);
int firstColumn = range.getFirstColumn();
int lastColumn = range.getLastColumn();
int firstRow = range.getFirstRow();
int lastRow = range.getLastRow();
if (row >= firstRow && row <= lastRow) {
if (column >= firstColumn && column <= lastColumn) {
return true;
}
}
}
return false;
}
public static String getValue(Cell hssfCell) {
if (hssfCell.getCellTypeEnum() == CellType.BOOLEAN) {
return String.valueOf(hssfCell.getBooleanCellValue());
} else if (hssfCell.getCellTypeEnum() == CellType.NUMERIC) {
//if (HSSFDateUtil.isCellDateFormatted(hssfCell)) {
if (CellDateUtil.isCellDateFormatted(hssfCell)) {
Date date = hssfCell.getDateCellValue();
return DateFormatUtils.format(date, "yyyy-MM-dd HH:mm:ss");
} else {
hssfCell.setCellType(CellType.STRING);
return String.valueOf(hssfCell.getStringCellValue());
}
} else if (hssfCell.getCellTypeEnum() == CellType.STRING) {
return String.valueOf(hssfCell.getStringCellValue());
} else {
hssfCell.setCellType(CellType.STRING);
return String.valueOf(hssfCell.getStringCellValue());
}
}
/**
* 获取合并单元格的值
*
* @param sheet
* @param cell
* @return
*/
public static String getCellValue(Sheet sheet, Cell cell) {
String value = "";
if (cell != null) {
//log.info("-----------row:" +cell.getRowIndex()+"-------column:"+cell.getColumnIndex());
int row = cell.getRowIndex();
int column = cell.getColumnIndex();
boolean temp = isMergedRegion(sheet, row, column);
if (temp) {
value = getMergedRegionValue(sheet, row, column);
} else {
value = getValue(cell);
}
}
return value;
}
public static void exportAttendanceExcel(HttpServletResponse response) {
try {
ClassPathResource classPathResource = new ClassPathResource("excel/人员考勤导入模板.xlsx");
InputStream inputStream = classPathResource.getInputStream();
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
downLoadExcel("人员考勤导入模板.xlsx", response, workbook);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void exportHiddenDangerLibraryExcel(HttpServletResponse response) {
try {
ClassPathResource classPathResource = new ClassPathResource("excel/安全隐患库_导入模板.xlsx");
InputStream inputStream = classPathResource.getInputStream();
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
downLoadExcel("安全隐患库_导入模板.xlsx", response, workbook);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void exportInspectTableLibraryExcel(HttpServletResponse response) {
try {
ClassPathResource classPathResource = new ClassPathResource("excel/检查表导入模板.xlsx");
InputStream inputStream = classPathResource.getInputStream();
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
downLoadExcel("检查表导入模板.xlsx", response, workbook);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void exporExcelWorkerTemplate(HttpServletResponse response, List<EntityMap> teamList, List<EntityMap> departmentList) {
try {
ClassPathResource classPathResource = new ClassPathResource("excel/人员导入模板.xlsx");
InputStream inputStream = classPathResource.getInputStream();
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
if (teamList.size() > 0) {
XSSFSheet sheet2 = workbook.getSheet("班组");
for (int i = 0; i < teamList.size(); i++) {
XSSFRow row1 = sheet2.createRow(i);
XSSFCell cell1 = row1.createCell(0);
cell1.setCellType(CellType.STRING);
cell1.setCellValue(MapUtils.getString(teamList.get(i), "enterpriseTeamName"));
XSSFCell cell2 = row1.createCell(1);
cell2.setCellType(CellType.STRING);
cell2.setCellValue(MapUtils.getString(teamList.get(i), "enterpriseTeamId"));
}
}
if (departmentList.size() > 0) {
XSSFSheet sheet2 = workbook.getSheet("部门");
for (int i = 0; i < departmentList.size(); i++) {
XSSFRow row1 = sheet2.createRow(i);
XSSFCell cell1 = row1.createCell(0);
cell1.setCellType(CellType.STRING);
cell1.setCellValue(MapUtils.getString(departmentList.get(i), "enterpriseDepartmentName"));
XSSFCell cell2 = row1.createCell(1);
cell2.setCellType(CellType.STRING);
cell2.setCellValue(MapUtils.getString(departmentList.get(i), "enterpriseDepartmentId"));
}
}
downLoadExcel("人员导入模板.xlsx", response, workbook);
} catch (IOException e) {
e.printStackTrace();
}
}
/*public static void main(String[] args) {
try {
InputStream instream = new FileInputStream("D:/qqq.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(instream);
XSSFSheet sheet = workbook.getSheetAt(0);
XSSFCell cell=sheet.getRow(0).getCell(1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
log.info("项目:"+cell.getStringCellValue());
XSSFCell cell2=sheet.getRow(3).getCell(8, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
log.info("评估时间:"+getValue(cell2));
XSSFCell cell3=sheet.getRow(10).getCell(10, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
log.info("实测实量得分:"+getValue(cell3));
XSSFCell cell4=sheet.getRow(14).getCell(10, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
log.info("质量风险得分:"+getValue(cell4));
XSSFCell cell5=sheet.getRow(23).getCell(10, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
log.info("安全文明得分:"+getValue(cell5));
XSSFCell cell6=sheet.getRow(32).getCell(2, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
log.info("标段评估结果:"+getValue(cell6));
workbook.close();
instream.close();
} catch (Exception e) {
e.printStackTrace();
}
}*/
}