|
@@ -13,6 +13,8 @@ import com.simuwang.base.common.util.ExcelUtil;
|
|
import com.simuwang.base.common.util.StringUtil;
|
|
import com.simuwang.base.common.util.StringUtil;
|
|
import com.simuwang.base.pojo.dto.EmailContentInfoDTO;
|
|
import com.simuwang.base.pojo.dto.EmailContentInfoDTO;
|
|
import com.simuwang.base.pojo.dto.EmailFundNavDTO;
|
|
import com.simuwang.base.pojo.dto.EmailFundNavDTO;
|
|
|
|
+import org.apache.pdfbox.Loader;
|
|
|
|
+import org.apache.pdfbox.pdmodel.PDDocument;
|
|
import org.apache.poi.ss.usermodel.Cell;
|
|
import org.apache.poi.ss.usermodel.Cell;
|
|
import org.apache.poi.ss.usermodel.Row;
|
|
import org.apache.poi.ss.usermodel.Row;
|
|
import org.apache.poi.ss.usermodel.Sheet;
|
|
import org.apache.poi.ss.usermodel.Sheet;
|
|
@@ -25,10 +27,14 @@ import org.jsoup.select.Elements;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
+import technology.tabula.*;
|
|
|
|
+import technology.tabula.extractors.SpreadsheetExtractionAlgorithm;
|
|
|
|
|
|
import java.io.File;
|
|
import java.io.File;
|
|
import java.io.FileOutputStream;
|
|
import java.io.FileOutputStream;
|
|
import java.io.OutputStream;
|
|
import java.io.OutputStream;
|
|
|
|
+import java.nio.file.Files;
|
|
|
|
+import java.nio.file.Paths;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
@@ -66,8 +72,14 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
// 2.解析邮件excel附件
|
|
// 2.解析邮件excel附件
|
|
if (StrUtil.isNotBlank(emailContentInfoDTO.getFilePath()) && ExcelUtil.isExcel(emailContentInfoDTO.getFileName())) {
|
|
if (StrUtil.isNotBlank(emailContentInfoDTO.getFilePath()) && ExcelUtil.isExcel(emailContentInfoDTO.getFileName())) {
|
|
List<EmailFundNavDTO> fundNavDTOList = parseExcelFile(emailContentInfoDTO.getFilePath(), emailFieldMap);
|
|
List<EmailFundNavDTO> fundNavDTOList = parseExcelFile(emailContentInfoDTO.getFilePath(), emailFieldMap);
|
|
- emailFundNavDTOList.addAll(fundNavDTOList);
|
|
|
|
|
|
+ Optional.ofNullable(fundNavDTOList).ifPresent(emailFundNavDTOList::addAll);
|
|
}
|
|
}
|
|
|
|
+ // 3.解析邮件pdf附件
|
|
|
|
+ if (StrUtil.isNotBlank(emailContentInfoDTO.getFilePath()) && ExcelUtil.isPdf(emailContentInfoDTO.getFileName())) {
|
|
|
|
+ List<EmailFundNavDTO> fundNavDTOList = parsePdfFile(emailContentInfoDTO, emailContentInfoDTO.getFilePath(), emailFieldMap);
|
|
|
|
+ Optional.ofNullable(fundNavDTOList).ifPresent(emailFundNavDTOList::addAll);
|
|
|
|
+ }
|
|
|
|
+
|
|
// 校验净值数据格式
|
|
// 校验净值数据格式
|
|
if (CollUtil.isNotEmpty(emailFundNavDTOList)) {
|
|
if (CollUtil.isNotEmpty(emailFundNavDTOList)) {
|
|
emailFundNavDTOList = emailFundNavDTOList.stream().filter(super::dataFormat).collect(Collectors.toList());
|
|
emailFundNavDTOList = emailFundNavDTOList.stream().filter(super::dataFormat).collect(Collectors.toList());
|
|
@@ -76,6 +88,55 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
|
|
+ * 解析邮件pdf附件
|
|
|
|
+ *
|
|
|
|
+ * @param emailContentInfoDTO 邮件信息
|
|
|
|
+ * @param filePath 邮件excel附件地址
|
|
|
|
+ * @param emailFieldMap 邮件字段识别规则映射表
|
|
|
|
+ * @return 解析到的净值数据
|
|
|
|
+ */
|
|
|
|
+ private List<EmailFundNavDTO> parsePdfFile(EmailContentInfoDTO emailContentInfoDTO, String filePath, Map<String, List<String>> emailFieldMap) {
|
|
|
|
+ String excelFilePath = "/data/file/pdf/" + emailContentInfoDTO.getEmailAddress() + "/" + emailContentInfoDTO.getEmailDate().substring(0, 10).replaceAll("-", "")
|
|
|
|
+ + "/" + emailContentInfoDTO.getFileName().replace(".pdf", ".xlsx").replace(".PDF", ".xlsx");
|
|
|
|
+ File savefile = new File(excelFilePath);
|
|
|
|
+ if (!savefile.exists()) {
|
|
|
|
+ if (!savefile.getParentFile().exists()) {
|
|
|
|
+ savefile.getParentFile().mkdirs();
|
|
|
|
+ savefile.getParentFile().setExecutable(true);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ try (OutputStream outputStream = Files.newOutputStream(Paths.get(excelFilePath))) {
|
|
|
|
+ PDDocument document = Loader.loadPDF(new File(filePath));
|
|
|
|
+ PageIterator extract = new ObjectExtractor(document).extract();
|
|
|
|
+ Workbook workbook = new XSSFWorkbook();
|
|
|
|
+ Sheet sheet = workbook.createSheet("Sheet1");
|
|
|
|
+ while (extract.hasNext()) {
|
|
|
|
+ Page next = extract.next();
|
|
|
|
+ List<Table> tableList = new SpreadsheetExtractionAlgorithm().extract(next);
|
|
|
|
+ for (Table table : tableList) {
|
|
|
|
+ List<List<RectangularTextContainer>> rows = table.getRows();
|
|
|
|
+ for (int rowNum = 0; rowNum < rows.size(); rowNum++) {
|
|
|
|
+ Row sheetRow = sheet.createRow(rowNum);
|
|
|
|
+ List<RectangularTextContainer> textContainerList = rows.get(rowNum);
|
|
|
|
+ for (int cellNum = 0; cellNum < textContainerList.size(); cellNum++) {
|
|
|
|
+ Cell cell = sheetRow.createCell(cellNum);
|
|
|
|
+ RectangularTextContainer textContainer = textContainerList.get(cellNum);
|
|
|
|
+ if (textContainer != null) {
|
|
|
|
+ cell.setCellValue(textContainer.getText());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 将Excel工作簿写入输出流
|
|
|
|
+ workbook.write(outputStream);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("解析邮件pdf附件报错 -> 邮件主题:{},邮件日期:{},堆栈信息:{}", emailContentInfoDTO.getEmailTitle(), emailContentInfoDTO.getEmailDate(), ExceptionUtil.stacktraceToString(e));
|
|
|
|
+ }
|
|
|
|
+ return parseExcelFile(excelFilePath, emailFieldMap);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
* 解析邮件excel附件
|
|
* 解析邮件excel附件
|
|
*
|
|
*
|
|
* @param filePath 邮件excel附件地址
|
|
* @param filePath 邮件excel附件地址
|
|
@@ -95,6 +156,40 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
return parseSheetData(sheet, fieldPositionMap);
|
|
return parseSheetData(sheet, fieldPositionMap);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 解析邮件正文
|
|
|
|
+ *
|
|
|
|
+ * @param emailContentInfoDTO 邮件信息
|
|
|
|
+ * @param emailContent 正文内容
|
|
|
|
+ * @param emailFieldMap 邮件字段识别规则映射表
|
|
|
|
+ * @return 解析到的净值数据
|
|
|
|
+ */
|
|
|
|
+ private List<EmailFundNavDTO> parseEmailContent(EmailContentInfoDTO emailContentInfoDTO, String emailContent, Map<String, List<String>> emailFieldMap) {
|
|
|
|
+ Document doc = Jsoup.parse(emailContent);
|
|
|
|
+ Element table = doc.select("table").first();
|
|
|
|
+ Elements rows = table.select("tr");
|
|
|
|
+ String excelFilePath = "/data/file/content/" + emailContentInfoDTO.getEmailAddress() + "/" + emailContentInfoDTO.getEmailDate().substring(0, 10).replaceAll("-", "") + "/"
|
|
|
|
+ + emailContentInfoDTO.getFileName().replace(".html", ".xlsx");
|
|
|
|
+ File savefile = new File(excelFilePath);
|
|
|
|
+ if (!savefile.exists()) {
|
|
|
|
+ if (!savefile.getParentFile().exists()) {
|
|
|
|
+ savefile.getParentFile().mkdirs();
|
|
|
|
+ savefile.getParentFile().setExecutable(true);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ try (OutputStream outputStream = new FileOutputStream(savefile)) {
|
|
|
|
+ // 创建一个新的Excel工作簿
|
|
|
|
+ Workbook workbook = new XSSFWorkbook();
|
|
|
|
+ Sheet sheet = workbook.createSheet("Sheet1");
|
|
|
|
+ writeDataToSheet(sheet, rows);
|
|
|
|
+ // 将Excel工作簿写入输出流
|
|
|
|
+ workbook.write(outputStream);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("解析正文报错 -> 邮件主题:{},邮件日期:{},堆栈信息:{}", emailContentInfoDTO.getEmailTitle(), emailContentInfoDTO.getEmailDate(), ExceptionUtil.stacktraceToString(e));
|
|
|
|
+ }
|
|
|
|
+ return parseExcelFile(excelFilePath, emailFieldMap);
|
|
|
|
+ }
|
|
|
|
+
|
|
private List<EmailFundNavDTO> parseSheetData(Sheet sheet, Map<String, Pair<Integer, Integer>> fieldPositionMap) {
|
|
private List<EmailFundNavDTO> parseSheetData(Sheet sheet, Map<String, Pair<Integer, Integer>> fieldPositionMap) {
|
|
List<EmailFundNavDTO> fundNavDTOList = CollUtil.newArrayList();
|
|
List<EmailFundNavDTO> fundNavDTOList = CollUtil.newArrayList();
|
|
// 通过表头所在位置判断是行数据还是列数据
|
|
// 通过表头所在位置判断是行数据还是列数据
|
|
@@ -190,15 +285,14 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
fundNavDTO.setPriceDate(fieldValueMap.get(EmailFieldConst.PRICE_DATE));
|
|
fundNavDTO.setPriceDate(fieldValueMap.get(EmailFieldConst.PRICE_DATE));
|
|
fundNavDTO.setNav(fieldValueMap.get(EmailFieldConst.NAV));
|
|
fundNavDTO.setNav(fieldValueMap.get(EmailFieldConst.NAV));
|
|
fundNavDTO.setCumulativeNavWithdrawal(fieldValueMap.get(EmailFieldConst.CUMULATIVE_NAV_WITHDRAWAL));
|
|
fundNavDTO.setCumulativeNavWithdrawal(fieldValueMap.get(EmailFieldConst.CUMULATIVE_NAV_WITHDRAWAL));
|
|
|
|
+
|
|
|
|
+ // pdf解析到的值带有",",比如:"10,656,097.37"
|
|
String assetNet = fieldValueMap.get(EmailFieldConst.ASSET_NET);
|
|
String assetNet = fieldValueMap.get(EmailFieldConst.ASSET_NET);
|
|
- if (StrUtil.isBlank(assetNet)) {
|
|
|
|
- assetNet = null;
|
|
|
|
- }
|
|
|
|
|
|
+ assetNet = StrUtil.isNotBlank(assetNet) ? assetNet.replaceAll(",", "") : null;
|
|
|
|
+
|
|
fundNavDTO.setAssetNet(assetNet);
|
|
fundNavDTO.setAssetNet(assetNet);
|
|
String assetShares = fieldValueMap.get(EmailFieldConst.ASSET_NET);
|
|
String assetShares = fieldValueMap.get(EmailFieldConst.ASSET_NET);
|
|
- if (StrUtil.isBlank(assetShares)) {
|
|
|
|
- assetShares = null;
|
|
|
|
- }
|
|
|
|
|
|
+ assetShares = StrUtil.isNotBlank(assetShares) ? assetShares.replaceAll(",", "") : null;
|
|
fundNavDTO.setAssetShare(assetShares);
|
|
fundNavDTO.setAssetShare(assetShares);
|
|
return fundNavDTO;
|
|
return fundNavDTO;
|
|
}
|
|
}
|
|
@@ -233,6 +327,7 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
String fundName = columnFieldMap.get(EmailFieldConst.FUND_NAME) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.FUND_NAME)).getStringCellValue() != null ?
|
|
String fundName = columnFieldMap.get(EmailFieldConst.FUND_NAME) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.FUND_NAME)).getStringCellValue() != null ?
|
|
ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.FUND_NAME))) : null;
|
|
ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.FUND_NAME))) : null;
|
|
emailFundNavDTO.setFundName(fundName);
|
|
emailFundNavDTO.setFundName(fundName);
|
|
|
|
+
|
|
String registerNumber = columnFieldMap.get(EmailFieldConst.REGISTER_NUMBER) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.REGISTER_NUMBER)) != null ?
|
|
String registerNumber = columnFieldMap.get(EmailFieldConst.REGISTER_NUMBER) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.REGISTER_NUMBER)) != null ?
|
|
ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.REGISTER_NUMBER))) : null;
|
|
ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.REGISTER_NUMBER))) : null;
|
|
emailFundNavDTO.setRegisterNumber(registerNumber);
|
|
emailFundNavDTO.setRegisterNumber(registerNumber);
|
|
@@ -243,16 +338,14 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
emailFundNavDTO.setVirtualNav(virtualNav);
|
|
emailFundNavDTO.setVirtualNav(virtualNav);
|
|
String assetNet = columnFieldMap.get(EmailFieldConst.ASSET_NET) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.ASSET_NET)) != null ?
|
|
String assetNet = columnFieldMap.get(EmailFieldConst.ASSET_NET) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.ASSET_NET)) != null ?
|
|
ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.ASSET_NET))) : null;
|
|
ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.ASSET_NET))) : null;
|
|
- if (StrUtil.isBlank(assetNet)) {
|
|
|
|
- assetNet = null;
|
|
|
|
- }
|
|
|
|
|
|
+ // pdf解析到的值带有",",比如:"10,656,097.37"
|
|
|
|
+ assetNet = StrUtil.isNotBlank(assetNet) ? assetNet.replaceAll(",", "") : null;
|
|
emailFundNavDTO.setAssetNet(assetNet);
|
|
emailFundNavDTO.setAssetNet(assetNet);
|
|
String assetShares = columnFieldMap.get(EmailFieldConst.ASSET_SHARE) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.ASSET_SHARE)) != null ?
|
|
String assetShares = columnFieldMap.get(EmailFieldConst.ASSET_SHARE) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.ASSET_SHARE)) != null ?
|
|
ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.ASSET_SHARE))) : null;
|
|
ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.ASSET_SHARE))) : null;
|
|
- if (StrUtil.isBlank(assetShares)) {
|
|
|
|
- assetShares = null;
|
|
|
|
- }
|
|
|
|
|
|
+ assetShares = StrUtil.isNotBlank(assetShares) ? assetShares.replaceAll(",", "") : null;
|
|
emailFundNavDTO.setAssetShare(assetShares);
|
|
emailFundNavDTO.setAssetShare(assetShares);
|
|
|
|
+
|
|
fundNavDTOList.add(emailFundNavDTO);
|
|
fundNavDTOList.add(emailFundNavDTO);
|
|
return fundNavDTOList;
|
|
return fundNavDTOList;
|
|
}
|
|
}
|
|
@@ -282,17 +375,15 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
String virtualNav = columnFieldMap.get(EmailFieldConst.PARENT_VIRTUAL_NAV) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PARENT_VIRTUAL_NAV)) != null ?
|
|
String virtualNav = columnFieldMap.get(EmailFieldConst.PARENT_VIRTUAL_NAV) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PARENT_VIRTUAL_NAV)) != null ?
|
|
ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PARENT_VIRTUAL_NAV))) : null;
|
|
ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PARENT_VIRTUAL_NAV))) : null;
|
|
emailFundNavDTO.setVirtualNav(virtualNav);
|
|
emailFundNavDTO.setVirtualNav(virtualNav);
|
|
|
|
+
|
|
String assetNet = columnFieldMap.get(EmailFieldConst.PARENT_ASSET_NET) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PARENT_ASSET_NET)) != null ?
|
|
String assetNet = columnFieldMap.get(EmailFieldConst.PARENT_ASSET_NET) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PARENT_ASSET_NET)) != null ?
|
|
ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PARENT_ASSET_NET))) : null;
|
|
ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PARENT_ASSET_NET))) : null;
|
|
- if (StrUtil.isBlank(assetNet) || !StrUtil.isNumeric(assetNet)) {
|
|
|
|
- assetNet = null;
|
|
|
|
- }
|
|
|
|
|
|
+ assetNet = StrUtil.isNotBlank(assetNet) ? assetNet.replaceAll(",", "") : null;
|
|
emailFundNavDTO.setAssetNet(assetNet);
|
|
emailFundNavDTO.setAssetNet(assetNet);
|
|
String assetShares = columnFieldMap.get(EmailFieldConst.PARENT_ASSET_SHARE) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PARENT_ASSET_SHARE)) != null ?
|
|
String assetShares = columnFieldMap.get(EmailFieldConst.PARENT_ASSET_SHARE) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PARENT_ASSET_SHARE)) != null ?
|
|
ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PARENT_ASSET_SHARE))) : null;
|
|
ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PARENT_ASSET_SHARE))) : null;
|
|
- if (StrUtil.isBlank(assetShares) || !StrUtil.isNumeric(assetShares)) {
|
|
|
|
- assetShares = null;
|
|
|
|
- }
|
|
|
|
|
|
+ assetShares = StrUtil.isNotBlank(assetShares) ? assetShares.replaceAll(",", "") : null;
|
|
|
|
+
|
|
emailFundNavDTO.setAssetShare(assetShares);
|
|
emailFundNavDTO.setAssetShare(assetShares);
|
|
return emailFundNavDTO;
|
|
return emailFundNavDTO;
|
|
}
|
|
}
|
|
@@ -411,32 +502,6 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
- private List<EmailFundNavDTO> parseEmailContent(EmailContentInfoDTO emailContentInfoDTO, String emailContent, Map<String, List<String>> emailFieldMap) {
|
|
|
|
- Document doc = Jsoup.parse(emailContent);
|
|
|
|
- Element table = doc.select("table").first();
|
|
|
|
- Elements rows = table.select("tr");
|
|
|
|
- String excelFilePath = "/data/file/content/" + emailContentInfoDTO.getEmailDate().substring(0, 10).replaceAll("-","")
|
|
|
|
- + "/" + emailContentInfoDTO.getFileName().replace(".html", ".xlsx");
|
|
|
|
- File savefile = new File(excelFilePath);
|
|
|
|
- if (!savefile.exists()) {
|
|
|
|
- if (!savefile.getParentFile().exists()) {
|
|
|
|
- savefile.getParentFile().mkdirs();
|
|
|
|
- savefile.getParentFile().setExecutable(true);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- try (OutputStream outputStream = new FileOutputStream(savefile)) {
|
|
|
|
- // 创建一个新的Excel工作簿
|
|
|
|
- Workbook workbook = new XSSFWorkbook();
|
|
|
|
- Sheet sheet = workbook.createSheet("Sheet1");
|
|
|
|
- writeDataToSheet(sheet, rows);
|
|
|
|
- // 将Excel工作簿写入输出流
|
|
|
|
- workbook.write(outputStream);
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("解析正文报错 -> 堆栈信息:{}", ExceptionUtil.stacktraceToString(e));
|
|
|
|
- }
|
|
|
|
- return parseExcelFile(excelFilePath, emailFieldMap);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
private void writeDataToSheet(Sheet sheet, Elements rows) {
|
|
private void writeDataToSheet(Sheet sheet, Elements rows) {
|
|
int rowSize = rows.size();
|
|
int rowSize = rows.size();
|
|
for (int rowNum = 0; rowNum < rowSize; rowNum++) {
|
|
for (int rowNum = 0; rowNum < rowSize; rowNum++) {
|
|
@@ -445,7 +510,7 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
Element elementRow = rows.get(rowNum);
|
|
Element elementRow = rows.get(rowNum);
|
|
Elements cells = elementRow.select("td");
|
|
Elements cells = elementRow.select("td");
|
|
int cellSize = cells.size();
|
|
int cellSize = cells.size();
|
|
- for (int cellNum = 0; cellNum< cellSize; cellNum++) {
|
|
|
|
|
|
+ for (int cellNum = 0; cellNum < cellSize; cellNum++) {
|
|
Cell sheetRowCell = sheetRow.createCell(cellNum);
|
|
Cell sheetRowCell = sheetRow.createCell(cellNum);
|
|
sheetRowCell.setCellValue(cells.get(cellNum).text());
|
|
sheetRowCell.setCellValue(cells.get(cellNum).text());
|
|
}
|
|
}
|