导入成功后:
导入时格式错误提示:

当导入模板错时提示

当标题有错误时提示

直接上代码:

package org.jeecgframework.web.cgform.service.excel;import java.io.InputStream;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;import javax.annotation.PostConstruct;
import javax.swing.JOptionPane;import org.hibernate.validator.xml.GetterType;
import org.jeecgframework.web.cgform.entity.config.CgFormFieldEntity;
import org.jeecgframework.web.cgreport.controller.core.CgReportController;
import org.jeecgframework.web.cgreport.service.core.CgReportServiceI;
import org.jeecgframework.web.system.pojo.base.DictEntity;
import org.jeecgframework.web.system.service.SystemService;
import org.jeecgframework.web.system.service.impl.SystemServiceImpl;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jeecgframework.core.common.exception.BusinessException;
import org.jeecgframework.core.constant.SysConstant;
import org.jeecgframework.core.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;/*** 模版导出工具类* * @author huiyong* */
@Component
public class ExcelTempletService {// 默认列宽// TODO 慧勇 从数据库或者配置文件设置默认列宽private static int maxColumnWidth = 30;private static int minColumnWidth = 12;// TODO 文件生成的空行太多的话,填写文件又没有填写满的话,空行数据在导入的时候会导入空数据进数据库,private static int defaultBlankRow = 1;@Autowiredprivate  SystemService service;private static ExcelTempletService excelTempletService;   @PostConstruct  public void init() {  excelTempletService = this;  excelTempletService.service = this.service;   }  /*** 导出excel模版* * @param title* @param titleSet* @param datalist* @return*/public static HSSFWorkbook exportExcel(String title, Collection<?> dataSet, List<Map<String, Object>> datalist) {// 使用userModel模式实现的,当excel文档出现10万级别的大数据文件可能导致OOM内存溢出return exportExcelInUserModel2File2(title, dataSet, datalist);}@SuppressWarnings("unchecked")private static HSSFWorkbook exportExcelInUserModel2File(String title, Collection<?> dataSet, List<Map<String, Object>> datalist) {// 声明一个工作薄HSSFWorkbook workbook = null;try {// 首先检查数据看是否是正确的if (dataSet == null || dataSet.size() == 0) {throw new Exception("导出数据为空!");}if (title == null) {throw new Exception("传入参数不能为空!");}// 声明一个工作薄workbook = new HSSFWorkbook();// 生成一个表格Sheet sheet = workbook.createSheet(title);int index = 0;// 产生表格标题行Row row = sheet.createRow(index);row.setHeight((short) 450);CellStyle titleStyle = getTitleStyle(workbook);Iterator it = dataSet.iterator();while (it.hasNext()) {CgFormFieldEntity type = (CgFormFieldEntity) it.next();// 输入需要显示的字段信息if (type.getIsExport().equals("Y")) {Cell cell = row.createCell(index);RichTextString text = new HSSFRichTextString(type.getContent());cell.setCellValue(text);// 设置列宽int columnWidth = type.getLength() == 0 ? minColumnWidth : type.getLength() > maxColumnWidth ? maxColumnWidth : type.getLength();sheet.setColumnWidth(index, 256 * columnWidth);cell.setCellStyle(titleStyle);index++;// 标题列下方默认给三行的边框空位置}setBlankRows(defaultBlankRow, index, workbook);}for (int i = 0; i < datalist.size(); i++) {it = dataSet.iterator();row = sheet.createRow(i + 1);index = 0;while (it.hasNext()) {CgFormFieldEntity type = (CgFormFieldEntity) it.next();// 输入需要显示的字段信息if (type.getIsExport().equals("Y")) {Cell cell = row.createCell(index);if (datalist.get(i).get(type.getFieldName()) != null) {RichTextString text = new HSSFRichTextString(datalist.get(i).get(type.getFieldName()).toString());cell.setCellValue(text);}// 标题列下方默认给三行的边框空位置index++;}}}} catch (Exception e) {e.printStackTrace();}return workbook;}@SuppressWarnings("unchecked")private static HSSFWorkbook exportExcelInUserModel2File2(String title, Collection<?> dataSet, List<Map<String, Object>> datalist) {// 声明一个工作薄HSSFWorkbook workbook = null;try {// 首先检查数据看是否是正确的if (dataSet == null || dataSet.size() == 0) {throw new Exception("导出数据为空!");}if (title == null) {throw new Exception("传入参数不能为空!");}// 声明一个工作薄workbook = new HSSFWorkbook();// 生成一个表格Sheet sheet = workbook.createSheet(title);int index = 0;// 产生表格标题行Row row = sheet.createRow(index);row.setHeight((short) 450);CellStyle titleStyle = getTitleStyle(workbook);Iterator it = dataSet.iterator();while (it.hasNext()) {CgFormFieldEntity type = (CgFormFieldEntity) it.next();// 输入需要显示的字段信息//if (type.getIsShow().equals("Y")) {Cell cell = row.createCell(index);RichTextString text = new HSSFRichTextString(type.getContent());cell.setCellValue(text);// 设置列宽int columnWidth = type.getLength() == 0 ? minColumnWidth : type.getLength() > maxColumnWidth ? maxColumnWidth : type.getLength();sheet.setColumnWidth(index, 256 * columnWidth);cell.setCellStyle(titleStyle);index++;// 标题列下方默认给三行的边框空位置//}}for (int i = 0; i < datalist.size(); i++) {it = dataSet.iterator();row = sheet.createRow(i + 1);index = 0;while (it.hasNext()) {CgFormFieldEntity type = (CgFormFieldEntity) it.next();// 输入需要显示的字段信息//if (type.getIsShow().equals("Y")) {Cell cell = row.createCell(index);if (datalist.get(i).get(type.getFieldName()) != null) {RichTextString text = new HSSFRichTextString(datalist.get(i).get(type.getFieldName()).toString());cell.setCellValue(text);}// 标题列下方默认给三行的边框空位置index++;//}}}} catch (Exception e) {e.printStackTrace();}return workbook;}/*** exce表头单元格样式处理* * @param workbook* @return*/public static HSSFCellStyle getTitleStyle(HSSFWorkbook workbook) {// 产生Excel表头HSSFCellStyle titleStyle = workbook.createCellStyle();titleStyle.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE); // 设置边框样式titleStyle.setBorderLeft((short) 2); // 左边框titleStyle.setBorderRight((short) 2); // 右边框titleStyle.setBorderTop((short) 2); // 左边框titleStyle.setBorderBottom((short) 2); // 右边框titleStyle.setBorderTop(HSSFCellStyle.BORDER_DOUBLE); // 顶边框titleStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index); // 填充的背景颜色titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); // 填充图案return titleStyle;}// 生成多少行的带有比边框的空行public static void setBlankRows(int rows, int columns, HSSFWorkbook workbook) {// 得到第一页Sheet sheet = workbook.getSheetAt(0);// 样式CellStyle cellStyle = getOneStyle(workbook);for (int i = 1; i <= rows; i++) {Row row = sheet.createRow(i);for (int j = 0; j < columns; j++) {row.createCell(j).setCellStyle(cellStyle);}}}public static HSSFCellStyle getTwoStyle(HSSFWorkbook workbook) {// 产生Excel表头HSSFCellStyle style = workbook.createCellStyle();style.setBorderLeft((short) 1); // 左边框style.setBorderRight((short) 1); // 右边框style.setBorderBottom((short) 1);style.setBorderTop((short) 1);style.setFillForegroundColor(HSSFColor.LIGHT_TURQUOISE.index); // 填充的背景颜色style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); // 填充图案return style;}public static HSSFCellStyle getOneStyle(HSSFWorkbook workbook) {// 产生Excel表头HSSFCellStyle style = workbook.createCellStyle();style.setBorderLeft((short) 1); // 左边框style.setBorderRight((short) 1); // 右边框style.setBorderBottom((short) 1);style.setBorderTop((short) 1);return style;}/*** 导入 excel* * @param inputstream*            : 文件输入流* @param pojoClass*            : 对应的导入对象 (每行记录)* @return*/public static Collection importExcelByIs(InputStream inputstream, List<CgFormFieldEntity> lists) {Map<String, CgFormFieldEntity> fieldMap = ConvertDate(lists);// 返回的数据类型List<Map<String, Object>> tObject = new ArrayList<Map<String, Object>>();try {// 将传入的File构造为FileInputStream;// // 得到工作表HSSFWorkbook book = new HSSFWorkbook(inputstream);// // 得到第一页HSSFSheet sheet = book.getSheetAt(0);// // 得到第一面的所有行Iterator<Row> row = sheet.rowIterator();// 得到第一行,也就是标题行Row title = row.next();// 得到第一行的所有列Iterator<Cell> cellTitle = title.cellIterator();// 将标题的文字内容放入到一个map中。Map titlemap = new HashMap();// 从标题第一列开始int i = 0;// 循环标题所有的列while (cellTitle.hasNext()) {Cell cell = cellTitle.next();String value = cell.getStringCellValue();if (fieldMap.get(value) == null) {throw new BusinessException("导入数据excel列名有不能识别的列");}titlemap.put(i, value);i = i + 1;}// 用来格式化日期的DateFormatMap<String, Object> retMap = null;while (row.hasNext()) {retMap = new HashMap<String, Object>();// 标题下的第一行Row rown = row.next();// 行的所有列Iterator<Cell> cellbody = rown.cellIterator();int k = 0;// 遍历一行的列while (cellbody.hasNext()) {Cell cell = cellbody.next();// 这里得到此列的对应的标题String titleString = (String) titlemap.get(k);if (fieldMap.containsKey(titleString)) {retMap.put(fieldMap.get(titleString).getFieldName(), getCellValueString(cell));}// 下一列k = k + 1;}tObject.add(retMap);}} catch (Exception e) {e.printStackTrace();return null;}return tObject;}/*** 导入 excel* * @param inputstream*            : 文件输入流* @param pojoClass*            : 对应的导入对象 (每行记录)* @return*/public static Collection importExcelByIs2(InputStream inputstream, List<CgFormFieldEntity> lists) {Map<String, CgFormFieldEntity> fieldMap = ConvertDate(lists);// 返回的数据类型List<Map<String, Object>> tObject = new ArrayList<Map<String, Object>>();//行数int g = 0;//列数int k1 = 0;try {// 将传入的File构造为FileInputStream;// // 得到工作表XSSFWorkbook book = new XSSFWorkbook(inputstream);// // 得到第一页XSSFSheet sheet = book.getSheetAt(0);// // 得到第一面的所有行Iterator<Row> row = sheet.rowIterator();// 得到第一行,也就是标题行Row title = row.next();// 得到第一行的所有列Iterator<Cell> cellTitle = title.cellIterator();// 将标题的文字内容放入到一个map中。Map titlemap = new HashMap();// 从标题第一列开始int i = 0;// 循环标题所有的列while (cellTitle.hasNext()) {Cell cell = cellTitle.next();String value = cell.getStringCellValue();//如果表格标题有数据库没有的字段,执行提示if (fieldMap.get(value) == null) {JOptionPane.showMessageDialog(null,i+1+"列有不能识别的列名:"+value);throw new BusinessException("导入数据excel列名有不能识别的列:"+value);}titlemap.put(i, value);i = i + 1;}// 用来格式化日期的DateFormatMap<String, Object> retMap = null;while (row.hasNext()) {retMap = new HashMap<String, Object>();// 标题下的第一行Row rown = row.next();// 行的所有列Iterator<Cell> cellbody = rown.cellIterator();int k = 0;// 遍历一行的列while (cellbody.hasNext()) {Cell cell = cellbody.next();// 这里得到此列的对应的标题String titleString = (String) titlemap.get(k);if (fieldMap.containsKey(titleString)) {//xiaoyanan 数据字典项String valueString = "";List<DictEntity> data = loadDic((CgFormFieldEntity)fieldMap.get(titleString));if(data.size()>0){for(int p=0;p<data.size();p++){if(getCellValueString(cell).equals(data.get(p).getTypename())){valueString = data.get(p).getTypecode();}}}else{if("unit".equals(fieldMap.get(titleString).getFieldName())){List<Map<String,Object>> map = excelTempletService.service.findForJdbc("select id from za_unit where dwqc=? limit 1", getCellValueString(cell));if(map.size()>0){retMap.put("unit_id",map.get(0).get("id"));} valueString = getCellValueString(cell);}else if("sfzh".equals(fieldMap.get(titleString).getFieldName())){   List<Map<String,Object>> map = excelTempletService.service.findForJdbc("select id from za_staypeople where identity=? limit 1", getCellValueString(cell));if(map.size()>0){retMap.put("owner",map.get(0).get("id"));} valueString = getCellValueString(cell);}//判断时间属性字段是否符合格式,不符合时提示else if("kysj".equals(fieldMap.get(titleString).getFieldName())){String arr1[] =getCellValueString(cell).split("-");if(arr1.length!=3){JOptionPane.showMessageDialog(null,"第"+(g+1)+"行"+(k+1)+"列有不能识别的格式,请更改格式后重试");//停止运行后面的方法,但不停止整个服务器的运行boolean flag = true;while(flag) {}}}else if("xjzd".equals(fieldMap.get(titleString).getFieldName())){String arr[] =getCellValueString(cell).split("-");List<DictEntity> fwwzList = queryDic("","unittype","");List<DictEntity> fwlhList = queryDic("","lh","");List<DictEntity> fwdyhList = queryDic("","dyh","");List<DictEntity> fwfjhList = queryDic("","fjh","");String fwwzStr = "";String fwlhStr = "";String fwdyhStr ="";String fwfjhStr ="";for(DictEntity fwwz:fwwzList){if(arr[0].equals(fwwz.getTypename())){fwwzStr = fwwz.getTypecode();}}for(DictEntity fwlh:fwlhList){if(arr[1].equals(fwlh.getTypename())){fwlhStr =fwlh.getTypecode();}}if("生活区".equals(arr[0])){fwdyhStr = "1";for(DictEntity fjh:fwfjhList){ if(arr[2].equals(fjh.getTypename())){fwfjhStr =fjh.getTypecode();} }}else{for(DictEntity dyh:fwdyhList){if(arr[2].equals(dyh.getTypename())){fwdyhStr = dyh.getTypecode();}}for(DictEntity fjh:fwfjhList){ if(arr[3].equals(fjh.getTypename())){fwfjhStr = fjh.getTypecode();} }}List<Map<String,Object>> map = excelTempletService.service.findForJdbc("select  id from za_renthouse where fwwz=? and fwlh=? and fwdyh =? and fwfjh = ? limit 1",fwwzStr,fwlhStr,fwdyhStr,fwfjhStr);if(map.size()>0){retMap.put("xjzdxz",map.get(0).get("id"));} if("生活区".equals(arr[0])){valueString = arr[0]+arr[1]+"号楼"+" "+arr[2]+"室";}else{valueString = arr[0]+arr[1]+"号楼"+arr[2]+arr[3]+"室";}}else{valueString = getCellValueString(cell);}}retMap.put(fieldMap.get(titleString).getFieldName(),valueString);}// 下一列k = k + 1;k1 = k1 + 1;}g = g + 1;tObject.add(retMap);}} catch (Exception e) {//如果出现模板导入错误,表的标题不正确时都会提示e.printStackTrace();JOptionPane.showMessageDialog(null,"识别模版数据错误");return null;}//导入成功后提示,并进行传值JOptionPane.showMessageDialog(null,"导入成功:共"+g+"条数据");return tObject;}// TODO huiyong excel日期格式处理默认如此,需要从数据库或者配置文件读取public final static DateFormat DEFAULT_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");/*** 得到某个格子的值 已经对过时方法进行更新* * @param cell*            格子对象* @return 格子的值*/public static String getCellValueString(Cell cell) {if (cell == null) {return null;}// 时间对象 特殊处理int dataFormat = cell.getCellStyle().getDataFormat();if (dataFormat == 14 || dataFormat == 178 || dataFormat == 180 || dataFormat == 181 || dataFormat == 182) {return getDateValue(cell);}String value = null;switch (cell.getCellType()) {case Cell.CELL_TYPE_NUMERIC:value = new DecimalFormat("0.##########").format(cell.getNumericCellValue());break;case Cell.CELL_TYPE_STRING:// value = cell.getStringCellValue();value = cell.getRichStringCellValue().toString();break;case Cell.CELL_TYPE_FORMULA:value = String.valueOf(cell.getCellFormula());break;case Cell.CELL_TYPE_BLANK:// value = String.valueOf(cell.getStringCellValue());value = String.valueOf(cell.getRichStringCellValue().toString());break;case Cell.CELL_TYPE_BOOLEAN:value = String.valueOf(cell.getBooleanCellValue());break;case Cell.CELL_TYPE_ERROR:value = String.valueOf(cell.getErrorCellValue());break;}return value;}/*** 返回时间内的特殊时间格式 OFFICE2003* * @param cell* @return*/private static String getDateValue(Cell cell) {return DEFAULT_DATE_FORMAT.format(cell.getDateCellValue());}/*** 数据处理*/private static Map<String, CgFormFieldEntity> ConvertDate(List<CgFormFieldEntity> lists) {Map<String, CgFormFieldEntity> maps = new HashMap<String, CgFormFieldEntity>();for (CgFormFieldEntity cgFormFieldEntity : lists) {maps.put(cgFormFieldEntity.getContent(), cgFormFieldEntity);}return maps;}/*** 装载数据字典* * @param m*            要放入freemarker的数据* @param bean*            获取字典数据*/private static List<DictEntity> loadDic(CgFormFieldEntity bean) {List<DictEntity> dicDatas = new ArrayList<DictEntity>(0);String dicT = bean.getDictTable();// 字典TableString dicF = bean.getDictField();// 字典CodeString dicText = bean.getDictText();// 字典Textif (StringUtil.isNotEmpty(dicT) || StringUtil.isNotEmpty(dicF)) {if (!bean.getShowType().equals("popup")) {dicDatas = queryDic(dicT, dicF, dicText);}}return dicDatas;}private static List<DictEntity> queryDic(String dicTable, String dicCode, String dicText) {return excelTempletService.service.queryDict(dicTable, dicCode, dicText);}
}

jeecg 关于.xlsx.xls表格文件导入后提示框功能(后台设置提示框)相关推荐

  1. vue+xlsx实现表格的导入导出:

    文章目录 一.vue前端使用xlsx和 xlsx-style 导出excel,并修改样式: 1.改造后效果: 2.实现: 3.引入库xlsx-style 4.excelUtil.js文件 二.前端xl ...

  2. qt使用qxlsx实现xlsx、xls表格文件快速写入和读取

    一.前言 本片文章主要记录和分享一下qt使用qxlsx开源文件读写xlsx表格文件用法. 目录 一.前言 二.环境 三.正文 1.读取指定xlsx文件 2.保存xlsx文件 3.保存xlsx文件内容过 ...

  3. 关于xx.xls表格怎么导入到Oracle数据库中

    看了网上各种方法,不知道有没有用但感觉很复杂就想写一个自己总结的方法 一般处理的xx.xls表格都是从数据库中导出的,所以今天我们模拟一个环境 首先从Scott用户下导出一份emp表 3.打开你刚才导 ...

  4. 将xls表格文件转为xml文件以及json格式的文件,支持2010xls解析

    项目需求,要通过数据库将数据以xls文件格式导出.直接解析xls的文件是没法解析的,所以需要通过解析成xml或者json格式文件后进一步处理.2003版本的Excel有65536的限制.搞了个java ...

  5. 我找不到我的电子邮件从 Outlook 数据文件 (.pst) 导入后,收发功能正常

    概述 将电子邮件从 Outlook 中的 IMAP 帐户导出到 .pst 文件时,在将文件导入回 Outlook 后可能无法看到邮件.再或者最近接收的电子邮件都无法查看到,同时也测试了收发邮件功能,么 ...

  6. 淘宝助理CSV文件导入后无法显示宝贝图片的解决办法

    重点有两个: 1.图片文件要放在CSV文件所在路径的子目录images里面. 2.图片以.tbi结尾,如果是jpg或者gif文件,直接改个名就好了 为了这个问题费了好几个小时,郁闷ing...大家碰到 ...

  7. 如何用Matlab批量读取Excel 表格 .csv .xlsx .xls格式文件并整合成一个.mat格式文件保存

    一个文件夹有三百多多个.csv格式的表格,我需要读取所有的表格,提取每一个表格的第7列,然后将所有表格的第七列的数据依次排列整合在一个表格中. 下图为处理前的文件的一部分 下面是实现这些功能的Matl ...

  8. springboot处理xlsx或xls表格文件

    //读取表格数据 XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream("D:/数据收集规范表格.xlsx&quo ...

  9. 【Pandas数据处理100例】(三十一):Pandas读取Excel(xlsx)表格文件

    前言 大家好,我是阿光. 本专栏整理了<Pandas数据分析处理>,内包含了各种常见的数据处理,以及Pandas内置函数的使用方法,帮助我们快速便捷的处理表格数据. 正在更新中~ ✨

最新文章

  1. IDA 逆向工程 反汇编使用
  2. 译注(3): NULL-计算机科学上最糟糕的失误
  3. Maximum Xor Secondary(单调栈好题)
  4. java ranger rest_使用REST
  5. 局域网ip冲突检测工具_“网络工程师培训”基础教程五:局域网
  6. Expression Blend学习5控件
  7. Java内存模型深度解析:重排序
  8. Linux root找回密码的方法
  9. 环洋市场调研-2021年全球Camlock联轴器行业调研及趋势分析报告
  10. 巧用讯飞TTS进行文本合成语音(LINUX操作系统)
  11. AiTrust下预训练和小样本学习在中文医疗信息处理挑战榜CBLUE表现
  12. 欧盟物联网推动措施重点与趋势观察
  13. 最新支付宝蚂蚁森林自动偷能量,解放双手
  14. Lifeline功能介绍02——个人事件的添加
  15. 抖音如何推动音乐的流行?看完这篇文章你就明白了
  16. cgb2107-day07
  17. Linux的进程空间管理
  18. 如何对需求进行排序?
  19. 数据库(单表查询与多表联查)
  20. 原根(知识学习+板子总结+例题+应用)

热门文章

  1. 电脑中.et格式文件转换成PDF操作方法
  2. 想让零件随着模型变动而变形?“柔性零部件”了解一下
  3. 智能焊接机器人的结构和性能
  4. Mac工具系列之Forklift:Mac下的Total Commander
  5. 炉石传说怎么修改服务器,云服务器 炉石传说
  6. 怎样将计算机和电视机连接网络,电脑如何连电视机连接 电脑连接电视机步骤【详解】...
  7. JAVA使用http包进行url接口调用以及返回值处理 HttpEntity ResponseEntity
  8. Damunda DMN 官方教程
  9. NVIDIA TX2刷ubuntu16.04、刷设备树教程
  10. cordova whitelist白名单