使用java的姿势完善【年、月、周】个人工作量总结

本文介绍了一种使用Java从周报或月报的txt文件中提取工作内容,然后整理并写入年度工作量Excel的方法。首先,整理txt文件,保留工作内容;接着,设计Excel模板,区分固定格式和填写区域;再通过Java代码读取txt文件内容,按工作日写入Excel,最后提供完整Java代码示例。
摘要由CSDN通过智能技术生成

前提

年度到了,需要上交自己的个人工作量excel文件了,因为一年来干的事情太多太细了,所以准备使用java来将这一年的工作记录总结到excel中

过程

1、从周报或者月报中复制个人记录
2、整理成txt文件,每行开头和结尾皆不需要特殊处理,只保留工作内容即可

如:

今天摸鱼
今日划水
今日专心工作

3、思考excel的版面及一些固定信息

如下:
1)红色是固定格式不需要填写,excel下拉即可全部复制
2)绿色是需要填写的工作内容,【上面的今日摸鱼等信息】
在这里插入图片描述

4、java代码开发

整体思路如下:

1.将这一年的工作日整理出列表【节假日不写工作内容】
2. 读取提交准备好的工作内容txt文件
3. 从指定的excel文件中写入循环第二步的内容【节假日跳过】

5、代码献上

只要文件都准备好,可直接运行~😊

package person.keino.OperatExcelPrac;

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.*;

/**
 * @Classname OperaExcel
 * @Description TODO
 * @Date 2021-06-07 11:30
 * @Created by keino
 */
public class OperaExcel {

    //提前自定义的一些日期,比如每年五一、国庆等不属于周六周日但是依旧是休息日的多个日期
    final static String[] commonHolidays = {"20211001","20211002","20211003","20211004","20211005","20211006","20211007"};
    //将定义好的日期 放入 holidaySet
    final static HashSet<String> holidaySet = new HashSet<String>(Arrays.asList(commonHolidays));
    //工作日集合
    final static HashSet<String> workdaySet = new HashSet<>();

    final static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");


    /**
     * 统计从【date】开始,之后【length】天中的工作日
     * @param date
     * @param length
     */
    public static void getWorkDays(String date,int length){


        Calendar calendar = Calendar.getInstance();
        try {
            Date beginDay = sdf.parse(date);
            calendar.setTime(beginDay);
            for(int i=0;i<length;i++){
                calendar.add(Calendar.DAY_OF_WEEK,1); // 每次累加一天
                int day = calendar.get(Calendar.DAY_OF_WEEK); // 获取当天是周几
                String tmp_day = sdf.format(calendar.getTime());
                //如果当天是1和7或者属于自定义日期 则属于休息日 剩余的则是工作日
                if((day!=1 && day!=7) && (!holidaySet.contains(tmp_day))){
                    workdaySet.add(tmp_day);//将工作日添加到workdaySet
                }
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }



    public static ArrayList<String> getLines(String path) throws IOException {

        ArrayList<String> lines = new ArrayList<>();
        BufferedReader br = new BufferedReader(new FileReader(path));
        String str = "";
        while((str = br.readLine())!=null) {
            if(str.length()>2){
                lines.add("1."+str);
            }
        }
        return lines;
    }


    /**
     *
     * @param writeBegin  开始写记录的初始位置
     * @param writeEnd    结束写记录的位置
     * @param worksNotes  工作记录,可以以txt文件为载体,总是需要提前写好每一条工作记录【可以从日报或者周报获取】
     * @param path        【年度工作总结】excel文件的本地地址
     * @param writePos01  需要插入的excel的列1
     * @param writePos02  需要插入的excel的列2
     * @throws IOException
     */
    public void writeReports(int writeBegin,int writeEnd,ArrayList<String> worksNotes,String path,int writePos01,int writePos02) throws IOException {

        XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(path));
        XSSFSheet sheet = workbook.getSheet("日工作量清单-数据平台部");

        int recordNum = 0; // 日志记录中对应的行数

        for(int i=writeBegin-1;i<=writeEnd-1;i++){

            XSSFRow row = sheet.getRow(i);
            //获取该行日期
            String date = sdf.format(row.getCell(0).getDateCellValue());

            if(workdaySet.contains(date)){
                //创建填充shell位置,并且填充数据
                XSSFCell cell = row.createCell(writePos01);
                cell.setCellValue(worksNotes.get(recordNum)); //从日志记录 第0行开始,递增
                XSSFCell cell2 = row.createCell(writePos02);
                cell2.setCellValue(worksNotes.get(recordNum++)); //从日志记录 第0行开始 递增
            }else{
                continue;
            }
        }
        FileOutputStream fos = new FileOutputStream("/Users/keino/Desktop/workNote.xlsx");
        workbook.write(fos);
        workbook.close();
        fos.close();
        workbook.close();
    }


    public static void main(String[] args) throws IOException {


        getWorkDays("20210531", 360);

        OperaExcel excel = new OperaExcel();

        excel.writeReports(180,363,getLines("/Users/keino/Desktop/工作记录.txt"),"/Users/keino/Desktop/年度工作量总结.xlsx",5,6);

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值