excel上传后由于第一列sheet携带了“/”,导致了导出反馈文档识别不了url,怎么在这部分代码里对excel内部进行验证呢
/**
* 上传excel
*/
```java
// 以下是导入与下载模板功能
@RequestMapping(value = "uploadLeadergroupExcel", produces = "text/html;charset=UTF-8")
public String UploadFile2(HttpServletRequest request) {
SysUserinfo user = SessionUtils.getSessionSysUser(request);
Map uploadResult = new HashMap();
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
ServletRequestContext ctx = new ServletRequestContext(request);
//获取上传文件尺寸大小
long requestSize = ctx.contentLength();
if (requestSize > uploadConfig.maxSize) {
uploadResult.put("geshi", "上传文件大小不能超过" + Math.floor(uploadConfig.maxSize / 1024 / 1024) + "M");
uploadResult.put("result", "uploadfail");
return JSON.toJSONString(uploadResult);
}
MultipartFile file = multipartRequest.getFile("myfile");
String realFileName = file.getOriginalFilename();
String suffixfilename = ExcelUtil.getUploadFileName(realFileName);
InputStream is = null;
try {
is = file.getInputStream();
InputStream checkis = file.getInputStream();//输入流传入会自动关闭
boolean iread = true;
// 读取文件格式
StringBuilder geshi = ExcelUtil.uploadGeshi(request, realFileName, checkis, LeadergroupCell.ORG_NAME);
// 判断格式可变字符串的值是否为空,不为空则表示格式错误
if (geshi.toString() != null && !geshi.toString().isEmpty()) {
uploadResult.put("geshi", geshi.toString());
log.info("格式错误,请确定格式正确后重新导入" + geshi);
uploadResult.put("result", "uploadfail");
return JSON.toJSONString(uploadResult);
} else {// 格式正确
log.info("格式正确正在导入数据");
iread = true;
}
if (iread) {
// 判断上传文件的类型通过后缀名
if (suffixfilename.equals("xls")) {
StringBuffer xlssb = leadergroupService.readXls(request, realFileName, is, user.getPLeadergroupId(), user.getId());
uploadResult.put("readdata", xlssb.toString());
}
if (suffixfilename.equals("xlsx")) {
StringBuffer xlsxsb = leadergroupService.readXlsx(request, realFileName, is, user.getPLeadergroupId(), user.getId());
uploadResult.put("readdata", xlsxsb.toString());
}
uploadResult.put("result", "uploadsucess");
}
return JSON.toJSONString(uploadResult);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
该回答引用GPTᴼᴾᴱᴺᴬᴵ
要对excel内部进行验证,可以在读取excel时对第一列的值进行处理,去掉其中的“/”,然后再进行后续的操作。
在上述代码中,可以在对上传的文件进行处理之前,在读取文件格式之前添加如下代码来处理第一列的值:
// 读取第一列的值,去掉其中的“/”
List<String> firstColumnList = ExcelUtil.readExcelColumn(is, 0, 0, 0, 0);
List<String> processedFirstColumnList = new ArrayList<String>();
for (String value : firstColumnList) {
processedFirstColumnList.add(value.replace("/", ""));
}
// 将处理后的第一列的值写回excel中
ExcelUtil.writeExcelColumn(is, 0, 0, 0, 0, processedFirstColumnList);
注意,在读取和写入excel的过程中,要将输入流重新赋值给is,以确保正确读取和写入excel。
import java.io.FileInputStream;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
public static void validateExcelFile(String filePath) throws IOException {
FileInputStream file = new FileInputStream(filePath);
Workbook workbook = WorkbookFactory.create(file);
// 读取第一个 Sheet
Sheet sheet = workbook.getSheetAt(0);
// 定义正则表达式
String regex = ".*[/\\\\]+.*";
Pattern pattern = Pattern.compile(regex);
// 遍历每一行,检查第一列是否包含“/”
for (Row row : sheet) {
Cell cell = row.getCell(0);
if (cell != null && cell.getCellType() == Cell.CELL_TYPE_STRING) {
String value = cell.getStringCellValue();
Matcher matcher = pattern.matcher(value);
if (matcher.matches()) {
System.out.println("第一列包含非法字符:" + value);
// TODO: 在这里进行处理
}
}
}
workbook.close();
file.close();
}