java导入excle文件,正确返回给前端字符串,发生错误时将错误数据标红并下载文件
时间: 2024-03-06 20:50:29 浏览: 111
把数据导出为excle并提供下载
以下是一个基于Apache POI的Java代码示例,可以导入Excel文件并校验数据。对于正确的数据,将它们存入一个List中并返回给前端字符串。对于错误的数据,将它们标红并生成一个新的Excel文件供下载。
```java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
import org.apache.poi.hssf.usermodel.HSSFDataValidationHelper;
import org.apache.poi.hssf.usermodel.HSSFDataValidationList;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidationConstraint;
import org.apache.poi.ss.usermodel.DataValidationHelper;
import org.apache.poi.ss.usermodel.DataValidationConstraint.OperatorType;
import org.apache.poi.ss.usermodel.DataValidationConstraint.ValidationType;
import org.apache.poi.ss.usermodel.DataValidationList;
import org.apache.poi.ss.usermodel.DataValidationWorkbook;
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.util.CellRangeAddressList;
import org.apache.poi.ss.util.CellUtil;
import org.apache.poi.ss.util.CellRangeAddress;
public class ExcelValidator {
public static void main(String[] args) throws IOException {
// 导入Excel文件
File inputFile = new File("input.xls");
FileInputStream fis = new FileInputStream(inputFile);
Workbook workbook = new HSSFWorkbook(fis);
Sheet sheet = workbook.getSheetAt(0);
// 校验数据
List<Integer> errorRows = new ArrayList<>();
List<String> correctData = new ArrayList<>();
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
if (row == null) {
continue;
}
Cell idCell = row.getCell(0);
Cell nameCell = row.getCell(1);
if (idCell == null || nameCell == null ||
idCell.getCellType() != Cell.CELL_TYPE_NUMERIC ||
nameCell.getCellType() != Cell.CELL_TYPE_STRING) {
errorRows.add(i);
} else {
correctData.add(idCell.toString() + "," + nameCell.toString());
}
}
// 标注错误行
CellStyle errorStyle = workbook.createCellStyle();
errorStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
errorStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
for (Integer rowIndex : errorRows) {
HSSFRow row = (HSSFRow) sheet.getRow(rowIndex);
HSSFCell idCell = row.getCell(0);
HSSFCell nameCell = row.getCell(1);
CellUtil.setCellStyleProperty(idCell, workbook, CellUtil.FILL_FOREGROUND_COLOR, IndexedColors.RED.getIndex());
CellUtil.setCellStyleProperty(nameCell, workbook, CellUtil.FILL_FOREGROUND_COLOR, IndexedColors.RED.getIndex());
}
// 创建新的Excel文件
File outputFile = new File("output.xls");
FileOutputStream fos = new FileOutputStream(outputFile);
workbook.write(fos);
fos.close();
// 返回正确的数据
String correctDataStr = String.join(",", correctData);
// TODO: 将正确的数据返回给前端
// 下载生成的Excel文件
// TODO: 实现下载功能
}
}
```
在这个示例中,我们假设Excel文件的第一列是ID(数字类型),第二列是名称(字符串类型)。我们使用Apache POI API来读取工作簿和工作表,然后检查单元格类型是否正确。如果存在错误的行,我们使用CellUtil工具类设置单元格样式以标注错误行。对于正确的数据,我们将它们存入一个List中,并将List元素拼接成一个字符串返回给前端。最后,我们创建一个新的Excel文件,将修改后的工作簿写入其中,并提供下载功能。
需要注意的是,示例代码中的数据校验仅仅是一种简单的实现方式,你需要根据实际需求进行修改和扩展。
阅读全文