package com.chen.delerium.utils;
import com.chen.delerium.model.OriginExcelModel;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class ExcelReader {
private static Logger logger = LoggerFactory.getLogger(ExcelReader.class);
private static final String XLS = "xls";
private static final String XLSX = "xlsx";
/**
* 根据文件后缀名类型获取对应的工作簿对象
* @param inputStream 读取文件的输入流
* @param fileType 文件后缀名类型(xls或xlsx)
* @return 包含文件数据的工作簿对象
* @throws IOException
*/
public static Workbook getWorkbook(InputStream inputStream, String fileType) throws IOException {
Workbook workbook = null;
if (fileType.equalsIgnoreCase(XLS)) {
workbook = new HSSFWorkbook(inputStream);
} else if (fileType.equalsIgnoreCase(XLSX)) {
workbook = new XSSFWorkbook(inputStream);
}
return workbook;
}
/**
* 读取Excel文件内容
* @return 读取结果列表,读取失败时返回null
*/
public static List readExcel(InputStream inputStream,String fileType,String date) {
Workbook workbook = null;
try {
workbook = getWorkbook(inputStream, fileType);
// 读取excel中的数据
List resultDataList = parseExcel(workbook,date);
return resultDataList;
} catch (Exception e) {
logger.warn("解析Excel失败,文件名:" + " 错误信息:" + e.getMessage());
return null;
} finally {
try {
if (null != workbook) {
workbook.close();
}
if (null != inputStream) {
inputStream.close();
}
} catch (Exception e) {
logger.warn("关闭数据流出错!错误信息:" + e.getMessage());
return null;
}
}
}
/**
* 解析Excel数据
* @param workbook Excel工作簿对象
* @return 解析结果
*/
private static List parseExcel(Workbook workbook,String date) {
List resultDataList = new ArrayList<>();
// 解析sheet
for (int sheetNum = 0; sheetNum < workbook.getNumberOfSheets(); sheetNum++) {
Sheet sheet = workbook.getSheetAt(sheetNum);
// 校验sheet是否合法
if (sheet == null) {
continue;
}
// 获取第一行数据
int firstRowNum = sheet.getFirstRowNum();
Row firstRow = sheet.getRow(firstRowNum);
if (null == firstRow) {
logger.warn("解析Excel失败,在第一行没有读取到任何数据!");
}
// 解析每一行的数据,构造数据对象
int rowStart = firstRowNum + 1;
int rowEnd = sheet.getPhysicalNumberOfRows();
for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
Row row = sheet.getRow(rowNum);
if (null == row) {
continue;
}
int physicalNumberOfCells = row.getPhysicalNumberOfCells();
if (physicalNumberOfCells < 3) {
continue;
}
OriginExcelModel resultData = convertRowToData(row,date);
if (null == resultData) {
logger.warn("第 " + row.getRowNum() + "行数据不合法,已忽略!");
continue;
}
resultDataList.add(resultData);
}
}
return resultDataList;
}
/**
* 提取每一行中需要的数据,构造成为一个结果数据对象
*
* 当该行中有单元格的数据为空或不合法时,忽略该行的数据
*
* @param row 行数据
* @return 解析后的行数据对象,行数据错误时返回null
*/
private static OriginExcelModel convertRowToData(Row row,String date) {
OriginExcelModel resultData = new OriginExcelModel();
Cell cell;
int cellNum = 0;
// 获取股票代碼
cell = row.getCell(cellNum++);
// String code = convertCellValueToString(cell);
if (null == cell) {
return null;
}
String code = cell.getStringCellValue();
try {
Integer.parseInt(code);
} catch (NumberFormatException e) {
// System.out.println("轉化code錯誤 -- " + code);
return null;
}
resultData.setCode(code);
// 获取name
cell = row.getCell(cellNum++);
String name = cell.getStringCellValue();
resultData.setName(name);
// 获取內容
cell = row.getCell(cellNum++);
String desc = cell.getStringCellValue();
resultData.setDesc(desc);
//獲取時間
int rowNum = row.getPhysicalNumberOfCells();
String time = "";
if (rowNum > 3) {
cell = row.getCell(cellNum++);
time = cell.getStringCellValue();
} else {
time = date;
// time = DateUtil.getDate(-1,"yyyy-MM-dd");
// SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
// Calendar calendar = Calendar.getInstance();
// calendar.add(Calendar.DATE, -1);
// Date time1 = calendar.getTime();
// time = df.format(time1);
}
resultData.setDate(time);
return resultData;
}
/**
* CSV文件生成方法
* @param head 文件头
* @param dataList 数据列表
* @param outPutPath 文件输出路径
* @param filename 文件名
* @return
*/
public static File createCSVFile(List<Object> head, List<List<Object>> dataList, String outPutPath, String filename) {
File csvFile = null;
BufferedWriter csvWtriter = null;
try {
csvFile = new File(outPutPath + File.separator + filename + ".csv");
File parent = csvFile.getParentFile();
if (parent != null && !parent.exists()) {
parent.mkdirs();
}
csvFile.createNewFile();
// GB2312使正确读取分隔符","
csvWtriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(
csvFile), "GB2312"), 1024);
// 写入文件头部
writeRow(head, csvWtriter);
// 写入文件内容
for (List<Object> row : dataList) {
writeRow(row, csvWtriter);
}
csvWtriter.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
csvWtriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return csvFile;
}
/**
* 写一行数据方法
* @param row
* @param csvWriter
* @throws IOException
*/
private static void writeRow(List<Object> row, BufferedWriter csvWriter) throws IOException {
// 写入文件头部
for (Object data : row) {
StringBuffer sb = new StringBuffer();
String rowStr = sb.append("\"").append(data).append("\",").toString();
csvWriter.write(rowStr);
}
csvWriter.newLine();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
Pulsar集群 监听mysql8的binlog java代码 (123个子文件)
ExcelReader.class 8KB
PulsarProducer.class 6KB
DebeziumMysql.class 4KB
TestService.class 3KB
PulsarConsumer.class 3KB
TestDao.class 3KB
ResultData.class 2KB
TestController.class 1KB
OriginExcelModel.class 1KB
StockApplication.class 708B
mvnw.cmd 6KB
.gitignore 333B
.gitignore 184B
delerium.iml 9KB
wrapper.iml 2KB
maven-wrapper.jar 50KB
ExcelReader.java 8KB
PulsarProducer.java 5KB
MavenWrapperDownloader.java 5KB
DebeziumMysql.java 3KB
PulsarConsumer.java 3KB
TestDao.java 2KB
TestService.java 2KB
ResultData.java 2KB
TestController.java 1KB
OriginExcelModel.java 1004B
StockApplication.java 323B
error.log 4KB
HELP.md 701B
mvnw 10KB
maven-wrapper.properties 218B
workspace.xml 10KB
uiDesigner.xml 9KB
logback-spring.xml 5KB
logback-spring.xml 5KB
pom.xml 4KB
jarRepositories.xml 864B
Maven__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml 835B
Maven__org_springframework_boot_spring_boot_starter_logging_2_3_7_RELEASE.xml 748B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_3_7_RELEASE.xml 741B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_11_3.xml 736B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_3_7_RELEASE.xml 734B
compiler.xml 729B
Maven__org_springframework_boot_spring_boot_starter_json_2_3_7_RELEASE.xml 727B
Maven__org_springframework_boot_spring_boot_starter_jdbc_2_3_5_RELEASE.xml 727B
Maven__org_springframework_boot_spring_boot_starter_web_2_3_5_RELEASE.xml 720B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_11_3.xml 695B
Maven__org_springframework_boot_spring_boot_starter_2_3_7_RELEASE.xml 692B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_11_3.xml 681B
Maven__org_springframework_spring_expression_5_2_12_RELEASE.xml 665B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_41.xml 660B
Maven__com_google_errorprone_error_prone_annotations_2_3_4.xml 652B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_11_3.xml 651B
Maven__org_apache_pulsar_pulsar_transaction_common_2_9_1.xml 650B
Maven__org_springframework_spring_context_5_2_12_RELEASE.xml 644B
Maven__org_springframework_spring_webmvc_5_2_12_RELEASE.xml 637B
Maven__org_springframework_boot_spring_boot_2_3_7_RELEASE.xml 636B
Maven__org_apache_pulsar_pulsar_client_admin_api_2_9_1.xml 636B
Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml 633B
Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml 633B
Maven__com_fasterxml_jackson_core_jackson_databind_2_11_3.xml 630B
Maven__org_springframework_spring_beans_5_2_12_RELEASE.xml 630B
Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_41.xml 625B
Maven__org_springframework_spring_core_5_2_12_RELEASE.xml 623B
Maven__org_springframework_spring_jdbc_5_2_12_RELEASE.xml 623B
Maven__org_springframework_spring_web_5_2_12_RELEASE.xml 616B
Maven__org_springframework_spring_aop_5_2_12_RELEASE.xml 616B
Maven__org_springframework_spring_jcl_5_2_12_RELEASE.xml 616B
Maven__javax_validation_validation_api_2_0_1_Final.xml 611B
Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml 611B
Maven__org_springframework_spring_tx_5_2_12_RELEASE.xml 609B
Maven__org_apache_pulsar_pulsar_package_core_2_9_1.xml 608B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_13_3.xml 608B
Maven__org_apache_pulsar_pulsar_client_admin_2_9_1.xml 608B
Maven__com_fasterxml_jackson_core_jackson_core_2_11_3.xml 602B
Maven__org_apache_pulsar_bouncy_castle_bc_pkg_2_9_1.xml 595B
Maven__org_apache_pulsar_pulsar_client_api_2_9_1.xml 594B
Maven__com_sun_activation_javax_activation_1_2_0.xml 591B
Maven__org_bouncycastle_bcprov_ext_jdk15on_1_69.xml 590B
Maven__com_google_j2objc_j2objc_annotations_1_3.xml 587B
Maven__org_apache_commons_commons_compress_1_21.xml 584B
Maven__jakarta_ws_rs_jakarta_ws_rs_api_2_1_6.xml 578B
Maven__org_apache_poi_poi_ooxml_schemas_3_12.xml 575B
Maven__mysql_mysql_connector_java_8_0_13.xml 574B
Maven__org_apache_logging_log4j_log4j_api_2_13_3.xml 573B
Maven__org_checkerframework_checker_qual_3_5_0.xml 571B
Maven__ch_qos_logback_logback_classic_1_2_3.xml 568B
Maven__org_apache_pulsar_pulsar_client_2_9_1.xml 566B
Maven__org_apache_avro_avro_protobuf_1_10_2.xml 565B
Maven__org_apache_commons_commons_lang3_3_10.xml 563B
Maven__org_bouncycastle_bcutil_jdk15on_1_69.xml 562B
Maven__org_bouncycastle_bcprov_jdk15on_1_69.xml 562B
Maven__com_google_guava_failureaccess_1_0_1.xml 562B
Maven__org_bouncycastle_bcpkix_jdk15on_1_69.xml 562B
Maven__org_apache_poi_poi_scratchpad_3_12.xml 554B
Maven__ch_qos_logback_logback_core_1_2_3.xml 547B
Maven__com_google_code_findbugs_jsr305_3_0_2.xml 545B
Maven__commons_codec_commons_codec_1_14.xml 543B
Maven__javax_ws_rs_javax_ws_rs_api_2_1.xml 542B
Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml 539B
共 123 条
- 1
- 2
gc889900
- 粉丝: 51
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0