完成excel文件的解析
This commit is contained in:
parent
34708604de
commit
9603bff042
|
|
@ -1,11 +1,27 @@
|
||||||
package com.electromagnetic.industry.software.common.parse;
|
package com.electromagnetic.industry.software.common.parse;
|
||||||
|
|
||||||
|
import cn.hutool.core.io.FileUtil;
|
||||||
|
import com.electromagnetic.industry.software.common.util.OfficeFileUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
public class ExcelParse extends FileParse {
|
public class ExcelParse extends FileParse {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String parseContent(InputStream stream, String fileType) {
|
public String parseContent(InputStream stream, String fileType) {
|
||||||
|
String fileTmpPath = createFileTmpPath(fileType);
|
||||||
|
String res = "";
|
||||||
|
try {
|
||||||
|
FileUtil.writeFromStream(stream, fileTmpPath);
|
||||||
|
if (fileType.endsWith("xlsx")) {
|
||||||
|
return OfficeFileUtil.parseXlsx(fileTmpPath);
|
||||||
|
}
|
||||||
|
return OfficeFileUtil.parseXls(fileTmpPath);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("解析{}格式的excel错误,具体为{}",fileType, e.getMessage(), e);
|
||||||
|
}
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.electromagnetic.industry.software.common.util;
|
package com.electromagnetic.industry.software.common.util;
|
||||||
|
|
||||||
|
import cn.hutool.core.io.FileUtil;
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
import com.documents4j.api.DocumentType;
|
import com.documents4j.api.DocumentType;
|
||||||
import com.documents4j.api.IConverter;
|
import com.documents4j.api.IConverter;
|
||||||
|
|
@ -9,6 +10,10 @@ import org.apache.pdfbox.pdmodel.PDDocument;
|
||||||
import org.apache.pdfbox.text.PDFTextStripper;
|
import org.apache.pdfbox.text.PDFTextStripper;
|
||||||
import org.apache.poi.hwpf.HWPFDocument;
|
import org.apache.poi.hwpf.HWPFDocument;
|
||||||
import org.apache.poi.hwpf.extractor.WordExtractor;
|
import org.apache.poi.hwpf.extractor.WordExtractor;
|
||||||
|
import org.apache.poi.ss.usermodel.*;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFRow;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
import org.apache.poi.xwpf.usermodel.XWPFDocument;
|
import org.apache.poi.xwpf.usermodel.XWPFDocument;
|
||||||
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
|
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
|
||||||
|
|
||||||
|
|
@ -16,6 +21,7 @@ import java.io.*;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class OfficeFileUtil {
|
public class OfficeFileUtil {
|
||||||
|
|
@ -81,4 +87,66 @@ public class OfficeFileUtil {
|
||||||
fis.close();
|
fis.close();
|
||||||
return stringBuilder.toString();
|
return stringBuilder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String parseXlsx(String path) throws IOException {
|
||||||
|
XSSFWorkbook excel = new XSSFWorkbook(FileUtil.getInputStream(path));
|
||||||
|
int activeSheetIndex = excel.getNumberOfSheets();
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
for (int i = 0; i < activeSheetIndex; i++) {
|
||||||
|
XSSFSheet sheet = excel.getSheetAt(i);
|
||||||
|
int allRows = sheet.getPhysicalNumberOfRows();
|
||||||
|
for (int j = 0; j < allRows; j++) {
|
||||||
|
XSSFRow row = sheet.getRow(j);
|
||||||
|
if (Objects.isNull(row)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for (Cell cell : row) {
|
||||||
|
stringBuilder.append(getCellValue(cell)).append("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return stringBuilder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getCellValue(Cell cell) {
|
||||||
|
if (Objects.isNull(cell)) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (cell.getCellType()) {
|
||||||
|
case STRING:
|
||||||
|
return cell.getStringCellValue();
|
||||||
|
case NUMERIC:
|
||||||
|
return String.valueOf(cell.getNumericCellValue());
|
||||||
|
case BOOLEAN:
|
||||||
|
return String.valueOf(cell.getBooleanCellValue());
|
||||||
|
case ERROR:
|
||||||
|
return String.valueOf(cell.getErrorCellValue());
|
||||||
|
case FORMULA:
|
||||||
|
return String.valueOf(cell.getCellFormula());
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String parseXls(String path) throws IOException {
|
||||||
|
InputStream inputStream = FileUtil.getInputStream(path);
|
||||||
|
Workbook sheets = WorkbookFactory.create(inputStream);
|
||||||
|
int numberOfSheets = sheets.getNumberOfSheets();
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
for (int i = 0; i < numberOfSheets; i++) {
|
||||||
|
Sheet sheet = sheets.getSheetAt(i);
|
||||||
|
int allRows = sheet.getPhysicalNumberOfRows();
|
||||||
|
for (int j = 0; j < allRows; j++) {
|
||||||
|
Row row = sheet.getRow(j);
|
||||||
|
if (Objects.isNull(row)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for (Cell cell : row) {
|
||||||
|
stringBuilder.append(getCellValue(cell)).append("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return stringBuilder.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue