(poi)Excel转List,List转Excel,输入日期为当年的第几天

久未见 提交于 2019-11-25 19:47:44

首先:pom.xml导入所需依赖

        #配置mybatis        
        <dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.0.0</version>
		</dependency>
         #springboot配置
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>1.1.9</version>
		</dependency>
		<!-- 添加MySQL依赖 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- 添加JDBC依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
        
        #gson工具类
		<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.8.5</version>
		</dependency>

        #处理xls文本,可以采用jxl包
		<!-- https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl -->
		<dependency>
			<groupId>net.sourceforge.jexcelapi</groupId>
			<artifactId>jxl</artifactId>
			<version>2.6.12</version>
		</dependency>
        
        #本篇使用到的excel工具包
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.14</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.14</version>
		</dependency>

附上工具类及代码

package com.songshan.wieye;

import com.songshan.wieye.Util.ExcelUtil;
import com.songshan.wieye.Util.FieldInfo;
import com.songshan.wieye.entity.ExcelEntity;
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.util.CellReference;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;


public class ExcelToList2 {

    /**
     * 将Excel数据转为List集合
     *
     * @param name Excel路径
     */
    public static List<ExcelEntity> readExcel2List(String name) throws IOException {
        InputStream is = new FileInputStream(name);
        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);

        List<ExcelEntity> excelEntityList = new ArrayList<ExcelEntity>();
        XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
        for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
            XSSFRow xssfRow = xssfSheet.getRow(rowNum);
            int minColIx = xssfRow.getFirstCellNum();
            int maxColIx = xssfRow.getLastCellNum();
            List<String> rowList = new ArrayList<String>();
            ExcelEntity excelEntity = new ExcelEntity();
            for (int colIx = minColIx; colIx < maxColIx; colIx++) {
                XSSFCell cell = xssfRow.getCell(colIx);
                if (cell == null) {
                    continue;
                }
                rowList.add(cell.toString());
            }
            excelEntity.setNum(rowList.get(0));
            excelEntity.setMerchantName(rowList.get(1));
            excelEntity.setSrcStoreId(rowList.get(2));
            excelEntity.setStoreName(rowList.get(3));
            excelEntity.setTrdDt(rowList.get(4));
            excelEntity.setCardId(rowList.get(5));
            excelEntity.setNewPos(rowList.get(6));
            excelEntity.setPOSTrdBillId(rowList.get(7));
            excelEntity.setSumPointQty(rowList.get(8));
            excelEntityList.add(excelEntity);
        }
        return excelEntityList;
    }

    //TODO:根据业务逻辑,修改List数据,并重新写出Excel文件
    public static List<ExcelEntity> listService(List<ExcelEntity> excelEntityList) {
        for (ExcelEntity excelEntity : excelEntityList) {
            excelEntity.getPOSTrdBillId();
            //获取当前交易日期为当年多少天,并判断其长度
            int length = (method_2( excelEntity.getTrdDt())+"").length();
            String s = doStringSub(excelEntity.getPOSTrdBillId(),length);
            excelEntity.setPOSTrdBillId(s);
        }
        return excelEntityList;
    }

    /*
    * 将处理后的List集合重新生成Excel文件
    * */
    public static void list2excel(String fileName,List<ExcelEntity> excelEntityList) throws IOException {
        SXSSFWorkbook wb = new SXSSFWorkbook(1000); // 在内存当中保持 1000 行 , 超过的数据放到硬盘中
        Sheet sh = wb.createSheet();
        String info[] = {"","品牌名称","原店铺编号","店铺名称","交易日期","卡编号","new_Pos","POS交易单据编号","Sum(积分点数)"};

        int rowIndex = 0;
        int columnIndex = 0;
        Row header = sh.createRow(0);
        for (int i = 0; i < info.length; i++) {
                header.createCell(columnIndex++).setCellValue(info[i]);
        }
        for(int rownum = 1; rownum <= excelEntityList.size();rownum++){
            ExcelEntity excelEntity = excelEntityList.get(rownum-1);
                Row row = sh.createRow(rownum);
                row.createCell(0).setCellValue(excelEntity.getNum());
                row.createCell(1).setCellValue(excelEntity.getMerchantName());
                row.createCell(2).setCellValue(excelEntity.getSrcStoreId());
                row.createCell(3).setCellValue(excelEntity.getStoreName());
                row.createCell(4).setCellValue(excelEntity.getTrdDt());
                row.createCell(5).setCellValue(excelEntity.getCardId());
                row.createCell(6).setCellValue(excelEntity.getNewPos());
                row.createCell(7).setCellValue(excelEntity.getPOSTrdBillId());
                row.createCell(8).setCellValue(excelEntity.getSumPointQty());
        }
        FileOutputStream out = new FileOutputStream(fileName);
        wb.write(out);
        out.close();
        // dispose of temporary files backing this workbook on disk
        wb.dispose();
    }


   
    /*
    * 将传入的字符串,根据指定长度处理截取
    * */
    public static String doStringSub(String s,int length){
        s = s.isEmpty()?"ssssssssss":s;
        StringBuffer sb = new StringBuffer(s);
        s = sb.substring(0,sb.length()-length);
        if(length < 3 && s.indexOf("0") == 0 ){
            s = s.substring(1);
        }
        return s;
    }

    /*
    * 获取传入的日期,是当月的第几天
    * */
    public static int method_2(String sdate) {
        //创建Calendar对象
        Calendar calendar = Calendar.getInstance();
        //定义输入时间的格式
        SimpleDateFormat format = new SimpleDateFormat("yyyy/M/d");
        int days = -1;
        try {
            //将输入的时间转化为Date对象
            Date date = format.parse(sdate);
            //将Date对象传给calendar
            calendar.setTime(date);
            //获取它在这 一年中是第几天
            days = calendar.get(Calendar.DAY_OF_YEAR);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return days;
    }

    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要替换的文件路径:(例如D://dataResource)");
       String readFilePath =  sc.nextLine();
        System.out.println("请输入要替换的文件名:(例如:33)");
        String readFileName =  sc.nextLine();
        //读取Excel
        List<ExcelEntity> excelEntityList =  readExcel2List(readFilePath+"/"+readFileName+".xlsx");
        //处理数据
        excelEntityList = listService(excelEntityList);
        //导出数据
        String fileName = readFilePath+"/result/"+readFileName+"y.xlsx";
        list2excel(fileName,excelEntityList);

    }
}

数据源配置

  spring:
    datasource:
      #type: com.alibaba.druid.pool.DruidDataSource
      #driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/testbysongshan?useUnicode=true&characterEncoding=utf8
      username: root
      password: ody1234

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!