| | |
| | | package com.ruoyi.common.utils.poi; |
| | | |
| | | import cn.hutool.core.convert.Convert; |
| | | import cn.hutool.core.lang.Validator; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.ruoyi.common.annotation.Excel; |
| | | import com.ruoyi.common.annotation.Excel.ColumnType; |
| | | import com.ruoyi.common.annotation.Excel.Type; |
| | |
| | | import com.ruoyi.common.exception.CustomException; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import com.ruoyi.common.utils.DictUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.utils.file.FileTypeUtils; |
| | | import com.ruoyi.common.utils.file.ImageUtils; |
| | | import com.ruoyi.common.utils.reflect.ReflectUtils; |
| | |
| | | */ |
| | | public List<T> importExcel(InputStream is) throws Exception |
| | | { |
| | | return importExcel(StrUtil.EMPTY, is); |
| | | return importExcel(StringUtils.EMPTY, is); |
| | | } |
| | | |
| | | /** |
| | |
| | | this.wb = WorkbookFactory.create(is); |
| | | List<T> list = new ArrayList<T>(); |
| | | Sheet sheet = null; |
| | | if (Validator.isNotEmpty(sheetName)) |
| | | if (StringUtils.isNotEmpty(sheetName)) |
| | | { |
| | | // 如果指定sheet名,则取指定sheet中的内容. |
| | | sheet = wb.getSheet(sheetName); |
| | |
| | | for (int i = 0; i < heard.getPhysicalNumberOfCells(); i++) |
| | | { |
| | | Cell cell = heard.getCell(i); |
| | | if (Validator.isNotNull(cell)) |
| | | if (StringUtils.isNotNull(cell)) |
| | | { |
| | | String value = this.getCellValue(heard, i).toString(); |
| | | cellMap.put(value, i); |
| | |
| | | if (String.class == fieldType) |
| | | { |
| | | String s = Convert.toStr(val); |
| | | if (StrUtil.endWith(s, ".0")) |
| | | if (StringUtils.endWith(s, ".0")) |
| | | { |
| | | val = StrUtil.subBefore(s, ".0",false); |
| | | val = StringUtils.subBefore(s, ".0",false); |
| | | } |
| | | else |
| | | { |
| | | String dateFormat = field.getAnnotation(Excel.class).dateFormat(); |
| | | if (Validator.isNotEmpty(dateFormat)) |
| | | if (StringUtils.isNotEmpty(dateFormat)) |
| | | { |
| | | val = DateUtils.parseDateToStr(dateFormat, (Date) val); |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | else if ((Integer.TYPE == fieldType || Integer.class == fieldType) && Validator.isNumber(Convert.toStr(val))) |
| | | else if ((Integer.TYPE == fieldType || Integer.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val))) |
| | | { |
| | | val = Convert.toInt(val); |
| | | } |
| | |
| | | { |
| | | val = Convert.toBool(val, false); |
| | | } |
| | | if (Validator.isNotNull(fieldType)) |
| | | if (StringUtils.isNotNull(fieldType)) |
| | | { |
| | | Excel attr = field.getAnnotation(Excel.class); |
| | | String propertyName = field.getName(); |
| | | if (Validator.isNotEmpty(attr.targetAttr())) |
| | | if (StringUtils.isNotEmpty(attr.targetAttr())) |
| | | { |
| | | propertyName = field.getName() + "." + attr.targetAttr(); |
| | | } |
| | | else if (Validator.isNotEmpty(attr.readConverterExp())) |
| | | else if (StringUtils.isNotEmpty(attr.readConverterExp())) |
| | | { |
| | | val = reverseByExp(Convert.toStr(val), attr.readConverterExp(), attr.separator()); |
| | | } |
| | | else if (Validator.isNotEmpty(attr.dictType())) |
| | | else if (StringUtils.isNotEmpty(attr.dictType())) |
| | | { |
| | | val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator()); |
| | | } |
| | |
| | | { |
| | | if (ColumnType.STRING == attr.cellType()) |
| | | { |
| | | cell.setCellValue(Validator.isNull(value) ? attr.defaultValue() : value + attr.suffix()); |
| | | cell.setCellValue(StringUtils.isNull(value) ? attr.defaultValue() : value + attr.suffix()); |
| | | } |
| | | else if (ColumnType.NUMERIC == attr.cellType()) |
| | | { |
| | | if (Validator.isNotNull(value)) |
| | | if (StringUtils.isNotNull(value)) |
| | | { |
| | | cell.setCellValue(StrUtil.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value)); |
| | | cell.setCellValue(StringUtils.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value)); |
| | | } |
| | | } |
| | | else if (ColumnType.IMAGE == attr.cellType()) |
| | |
| | | ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + 1), |
| | | cell.getRow().getRowNum() + 1); |
| | | String imagePath = Convert.toStr(value); |
| | | if (Validator.isNotEmpty(imagePath)) |
| | | if (StringUtils.isNotEmpty(imagePath)) |
| | | { |
| | | byte[] data = ImageUtils.getImage(imagePath); |
| | | getDrawingPatriarch(cell.getSheet()).createPicture(anchor, |
| | |
| | | sheet.setColumnWidth(column, (int) ((attr.width() + 0.72) * 256)); |
| | | } |
| | | // 如果设置了提示信息则鼠标放上去提示. |
| | | if (Validator.isNotEmpty(attr.prompt())) |
| | | if (StringUtils.isNotEmpty(attr.prompt())) |
| | | { |
| | | // 这里默认设了2-101列提示. |
| | | setXSSFPrompt(sheet, "", attr.prompt(), 1, 100, column, column); |
| | |
| | | String readConverterExp = attr.readConverterExp(); |
| | | String separator = attr.separator(); |
| | | String dictType = attr.dictType(); |
| | | if (Validator.isNotEmpty(dateFormat) && Validator.isNotNull(value)) |
| | | if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)) |
| | | { |
| | | cell.setCellValue(DateUtils.parseDateToStr(dateFormat, (Date) value)); |
| | | } |
| | | else if (Validator.isNotEmpty(readConverterExp) && Validator.isNotNull(value)) |
| | | else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value)) |
| | | { |
| | | cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator)); |
| | | } |
| | | else if (Validator.isNotEmpty(dictType) && Validator.isNotNull(value)) |
| | | else if (StringUtils.isNotEmpty(dictType) && StringUtils.isNotNull(value)) |
| | | { |
| | | cell.setCellValue(convertDictByExp(Convert.toStr(value), dictType, separator)); |
| | | } |
| | |
| | | for (String item : convertSource) |
| | | { |
| | | String[] itemArray = item.split("="); |
| | | if (StrUtil.containsAny(propertyValue, separator)) |
| | | if (StringUtils.containsAny(propertyValue, separator)) |
| | | { |
| | | for (String value : propertyValue.split(separator)) |
| | | { |
| | |
| | | } |
| | | } |
| | | } |
| | | return StrUtil.strip(propertyString.toString(), null,separator); |
| | | return StringUtils.strip(propertyString.toString(), null,separator); |
| | | } |
| | | |
| | | /** |
| | |
| | | for (String item : convertSource) |
| | | { |
| | | String[] itemArray = item.split("="); |
| | | if (StrUtil.containsAny(propertyValue, separator)) |
| | | if (StringUtils.containsAny(propertyValue, separator)) |
| | | { |
| | | for (String value : propertyValue.split(separator)) |
| | | { |
| | |
| | | } |
| | | } |
| | | } |
| | | return StrUtil.strip(propertyString.toString(), null,separator); |
| | | return StringUtils.strip(propertyString.toString(), null,separator); |
| | | } |
| | | |
| | | /** |
| | |
| | | private Object getTargetValue(T vo, Field field, Excel excel) throws Exception |
| | | { |
| | | Object o = field.get(vo); |
| | | if (Validator.isNotEmpty(excel.targetAttr())) |
| | | if (StringUtils.isNotEmpty(excel.targetAttr())) |
| | | { |
| | | String target = excel.targetAttr(); |
| | | if (target.contains(".")) |
| | |
| | | */ |
| | | private Object getValue(Object o, String name) throws Exception |
| | | { |
| | | if (Validator.isNotNull(o) && Validator.isNotEmpty(name)) |
| | | if (StringUtils.isNotNull(o) && StringUtils.isNotEmpty(name)) |
| | | { |
| | | Class<?> clazz = o.getClass(); |
| | | Field field = clazz.getDeclaredField(name); |
| | |
| | | try |
| | | { |
| | | Cell cell = row.getCell(column); |
| | | if (Validator.isNotNull(cell)) |
| | | if (StringUtils.isNotNull(cell)) |
| | | { |
| | | if (cell.getCellType() == CellType.NUMERIC || cell.getCellType() == CellType.FORMULA) |
| | | { |