excel上传后由于第一列sheet携带了“/”,导致了导出反馈文档识别不了url,怎么在这部分代码里对excel内部进行验证呢

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);

其中,ExcelUtil是自定义的工具类,可以根据实际情况进行修改。readExcelColumn()方法用于读取excel中的某一列的值,writeExcelColumn()方法用于将修改后的值写回excel中。

注意,在读取和写入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();
}