我是靠谱客的博主 单薄蛋挞,最近开发中收集的这篇文章主要介绍小项目 GIT生成公司EXCEL周报(5)EXCEL创建项目任务5 创建excel表格(1),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

项目任务5 创建excel表格(1

 EXCEL jar 包导入

需要一些jar包,项目jar包都放在百度云了:

百度网盘 请输入提取码 提取码:gr6d

导入如下:

 大致格式:

第一行:合并9列,加粗居中【每周工作计划和进度记录表】

第二行:姓名:+配置姓名(加粗)岗位+配置岗位(加粗) 记录日期:【开始日期-结束日期】合并3列,

第三行是各种固定的标题,一共9列

第四行:开始,是实际的日志内容,工作时间,我这里都简单的定义为每天的上班时间到下班时间,目前进度100%,工期0.4,提前完成率0%备注全部完成

然后第四行到日志结束行前面要加个合并列

日志后1:北京蓝色字居中加粗

日志后2,写各种标题

首列加粗居中北京2行合并

今天写前三行内容,明天续写后续内容

.ExcelUtil.java

❤????????????????????????????❤????????????????????????????❤????????????????????????????

import com.weekpaper.bean.ConfigData;
import com.weekpaper.bean.LogContent;
import jxl.Workbook;
import jxl.format.UnderlineStyle;
import jxl.write.*;
import jxl.write.biff.RowsExceededException;
 
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
public class ExcelUtil {
    public static void createExcel(String fileName, Map<String, List<LogContent>> projectLogs, ConfigData data) {
        WritableWorkbook book = null;
        try{
            //1.创建文件
            File f = FileUtil.reCreateFile(fileName);
             
            //2. 创建Excel对象
            book = Workbook.createWorkbook(f);
             
            //3. 创建工作表
            WritableSheet sheet = book.createSheet("sheet_one", 0);
             
            //4. 配置工作表各列宽度,各行高度
            int totalSize = getTotalSize(projectLogs);
            configSheetInfo(sheet,totalSize);
             
            //5. 添加标题 第一行
            addTitle1(sheet);
             
            //6. 添加标题第二行,配置姓名等信息
            WritableFont font = new WritableFont(WritableFont.createFont("宋体"), 11,
                    WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,
                    jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色
            WritableCellFormat style2 = new WritableCellFormat(font); // 单元格定义
            addTitle2(sheet,style2,data);
             
            //7. 添加标题第三行,固定内容
            addTitle3(sheet,style2);
        } catch (IOException e) {
            System.out.println(e);
        } catch (RowsExceededException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (WriteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            if(book!=null){
                try{
                    //写入数据并关闭文
                    book.write();
                    book.close();
                }catch (IOException e){
                 
                } catch (WriteException e) {
                    e.printStackTrace();
                }
     
            }
        }
    }
     
    private static void addTitle3(WritableSheet sheet, WritableCellFormat style2) throws WriteException {
        String[] cols = new String[]{
                "类型","工作任务名称","工作开始时间","计划完成时间","实际完成时间","目前进度(%)","工期(天)","提前完成率(%)","备注(必填)"
        };
         
        for(int i = 0; i < cols.length; i++){
            Label head3 = new Label(i,2,cols[i],style2);
            sheet.addCell(head3);
        }
        
    }
     
    private static void addTitle2(WritableSheet sheet, WritableCellFormat style2, ConfigData data) throws WriteException {
        style2.setBackground(jxl.format.Colour.WHITE); // 设置单元格的背景颜色
        style2.setAlignment(jxl.format.Alignment.LEFT); // 设置对齐方式
        style2.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //设置边框
        sheet.mergeCells(2, 1, 4, 1);
         
        Map<Integer,String> map = new HashMap<>();
        map.put(0,"姓名:"+data.getAuthor());
        map.put(1,"岗位:"+data.getCareer());
        map.put(2,"记录周期:"+DateUtil.toString(data.getStartDate())+"-"+DateUtil.toString(data.getEndDate()));
        map.put(5,"");
        map.put(6,"");
        map.put(7,"");
        map.put(8,"");
         
        for(Integer col:map.keySet()){
            Label head2 = new Label(col,1,map.get(col));
            sheet.addCell(head2);
        }
    }
     
    private static void addTitle1(WritableSheet sheet) throws WriteException {
        WritableFont wf_title = new WritableFont(WritableFont.createFont("宋体"), 16,
                WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,
                jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色
        WritableCellFormat wcf_title = new WritableCellFormat(wf_title); // 单元格定义
        wcf_title.setBackground(jxl.format.Colour.WHITE); // 设置单元格的背景颜色
        wcf_title.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式
        wcf_title.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //设置边框
     
        Label titleName = new Label(0,0,"每周工作计划和进度记录表",wcf_title);
        sheet.addCell(titleName);
        sheet.mergeCells(0, 0, 8, 0);
    }
     
    private static int getTotalSize(Map<String, List<LogContent>> projectLogs){
        int size = 0;
        for(List<LogContent> content:projectLogs.values()){
            size += content.size();
        }
        return size;
    }
     
    private static void configSheetInfo(WritableSheet sheet,int logLen) throws RowsExceededException {
        int[] width = new int[]{20,104,56,56,56,15,23,17,44};
        for(int i = 0; i < width.length; i++){
            sheet.setColumnView(i, width[i]); // 设置列的宽度
        }
         
        sheet.setRowView(logLen+3, 2000);//下周工作计划安排记录
        sheet.setRowView(logLen+5, 4000);//工作中存在的问题及解决方法
    }
}

❤????????????????????????????❤????????????????????????????❤????????????????????????????

其他修改文件:

WeekPaper.java

❤????????????????????????????❤????????????????????????????❤????????????????????????????

import com.weekpaper.bean.ConfigData;
import com.weekpaper.bean.LogContent;
import com.weekpaper.util.*;
 
import java.util.*;
 
public class WeekPaper {
     
    public static void main(String[] args) {
        if(args==null || args.length<1){
            LogUtil.severe("找不到配置文件!");
            System.exit(0);
        }
        //1.加载配置文件信息
        ConfigData cd = loadConfigFile(args[0]);
         
        //2. 创建Git日志文件读取日志内容
        Map<String, List<LogContent>> projectLogs = GitDealUtil.createLogTxt(cd);
         
        //3. 创建 excel 周报文件
        String excelFile = FileUtil.getFilePath(cd.getOutputPath(),DateUtil.toString(new Date())+"_"+cd.getAuthor()+".xls");
        ExcelUtil.createExcel(excelFile,projectLogs,cd);
    }
     
     
     
     
    private static ConfigData loadConfigFile(String path) {
        ConfigData cd = FileUtil.loadConfigData(path);
        if(cd == null){
            LogUtil.severe("配置内容有误!");
            System.exit(0);
        }else{
            LogUtil.info("获取配置文件"+ FileUtil.getFilePath(path)+"成功!");
//            LogUtil.info("获取配置文件"+ FileUtil.getFilePath(args[0])+"成功!信息如下:");
//            LogUtil.info(cd.toString());
        }
        return cd;
    }
     
     
}

❤????????????????????????????❤????????????????????????????❤????????????????????????????

FileUtil加方法

❤????????????????????????????❤????????????????????????????❤????????????????????????????

public static String getFilePath(String root,String name){
        return root+File.separator+name;
}

❤????????????????????????????❤????????????????????????????❤????????????????????????????

GitDealUtil.java

❤????????????????????????????❤????????????????????????????❤????????????????????????????

import com.weekpaper.bean.ConfigData;
import com.weekpaper.bean.LogContent;

import java.io.File;
import java.io.InputStream;
import java.util.*;

public class GitDealUtil {
    
    public static Map<String, List<LogContent>> createLogTxt(ConfigData cd){
        //2. 生成 git 执行命令行(windows,linux的类似,进入盘符的几个步骤有差别)
        String commandFilePath = createGitCommandFile(cd);
    
        //3. 执行 git 生成限定时间段日志
        boolean result = executeGitCommand(commandFilePath);
        //4. 读取抓到的日志内容
        Map<String,String> originLogs = readGitLog(cd,result);
        //5. 生成日志对象
        return getListObjects(originLogs);
    }
    
    private static Map<String, List<LogContent>> getListObjects(Map<String, String> logMsgs) {
        Map<String,List<LogContent>> logAns = new HashMap<>();
        for(Map.Entry<String,String> item:logMsgs.entrySet()){
            String name = item.getKey();
            String content = item.getValue();
            String[] lines = content.split("n");
            //3.处理日志内容,抽象为对象
            List<LogContent> lcs = new ArrayList<>();
            LogContent lc = null;
            StringBuilder sb = new StringBuilder();
            boolean isMerge = false;
            for(String line:lines){
                if(line.startsWith("commit")){
                    if(lc!=null){
                        if(sb.length()>0){
                            sb.deleteCharAt(sb.length()-1);
                        }
                        lc.setContent(sb.toString());
                        sb.delete(0,sb.length());
                        if(!isMerge)
                            lcs.add(lc);
                        isMerge = false;
                    }
                    lc = new LogContent();
                    lc.setCommitVersion(line.substring("commit".length()+1).trim());
                }else if(line.startsWith("Author:")){
                    String authorAndEmail = line.substring("Author:".length()+1).trim();
                    lc.setAuthor(authorAndEmail.split(" ")[0]);
                    lc.setEmail(authorAndEmail.split(" ")[1]);
                    lc.setEmail(lc.getEmail().substring(1,lc.getEmail().length()-1));
                }else if(line.startsWith("Date:")){
                    lc.setDate(DateUtil.getUsDate(line.substring("Date:".length()+1).trim()));
                }else if(line.startsWith("Merge: ")){
                    isMerge = true;
                }else{
//                    commit 50ff270a2ba476db707df277d652t1234b732da8e
//                    Merge: 2677td2 1c873fe
//                    Author: xx <xx@xx.com>
//                    Date:   Wed Jun 1 13:55:26 2022 +0800
//
//                    Merge branch 'dev'
//                    Merge 合并分支格式的忽略
                    if(line.length()<"    ".length()) continue;
                    String str = line.substring("    ".length()).trim();
                    
                    if(str.length()>0){
                        sb.append(str);
                        sb.append("n");
                    }
                }
            }
            if(lc!=null){
                if(sb.length()>0){
                    sb.deleteCharAt(sb.length()-1);
                }
                lc.setContent(sb.toString());
                sb.delete(0,sb.length());
                if(!isMerge)
                    lcs.add(lc);
            }
            //由于时间倒序,所以需要反过来
            Collections.reverse(lcs);
            if(!lcs.isEmpty()){
                logAns.put(name,lcs);
            }
            
        }
        return logAns;
        
    }
    
    private static Map<String,String> readGitLog(ConfigData cd, boolean result){
        if(cd == null || !result){
            LogUtil.severe("配置文件拿到空值或命令执行失败, 无法执行后续操作!");
            System.exit(0);
            return new LinkedHashMap<>();
            
        }
        
        Map<String,String> map = new LinkedHashMap<>();
        int n = cd.getProjectPaths().size();
        for(int i = 0; i < n; i++) {
            String path = cd.getProjectPaths().get(i);
            File f = new File(path);
          
            if(f.exists() && f.isDirectory()){
                String fullPath = FileUtil.getTmpFilePath(cd.getOutputPath(),f.getName()+".txt");
                String msg = FileUtil.getInputMsg(fullPath);
                map.put(cd.getProjectNames().get(i),msg);
            }
        }
        
        
        return map;
    }
    
    private static boolean executeGitCommand(String path){
        if(path == null || path.length() == 0){
            LogUtil.severe("未生成可执行命令,无法进行后续流程!");
            System.exit(0);
            return false;
        }
        LogUtil.info("CMD /GIT命令开始执行...");
        Process p;
        boolean result = true;
        try {
            p = Runtime.getRuntime().exec(path);
            InputStream fis = p.getErrorStream();//p.getInputStream();
            String msg = FileUtil.getInputMsg(fis,false);
            p.waitFor();
            int i = p.exitValue();
            if (i != 0) {
                result = false;
                LogUtil.severe("CMD /GIT命令执行失败!请检查是否安装 git 环境,命令是否正确!提示信息为:"+msg);
            }else {
                LogUtil.info("CMD /GIT命令执行成功!");
            }
        } catch (Exception e) {
            result = false;
            LogUtil.severe("未知错误!"+e.getMessage());
        }
        return result;
    }
    
    
    private static String createGitCommandFile(ConfigData cd) {
        if(cd == null){
            LogUtil.severe("配置文件拿到空值,无法执行后续操作!");
            System.exit(0);
            return "";
        }
        LogUtil.info("开始生成"+DateUtil.toString(cd.getStartDate())+"到"+DateUtil.toString(cd.getEndDate())+"git 命令行,如下:");
//        盘符:
//        cd 【项目路径】
//        for /F %%i in ('git config --get user.name') do ( set name=%%i)
//        git log --author=%name% --since ==【开始时间】 --until=【结束时间】 > 【输出路径tmp】【项目名称英文】.txt
        
        if(cd.getProjectPaths()==null || cd.getProjectPaths().isEmpty()){
            LogUtil.severe("无可用项目!");
            System.exit(0);
        }
        
        int n = cd.getProjectPaths().size();
        if(cd.getProjectNames().size()<n){
            LogUtil.severe("项目中文名称和项目路径数目不匹配!");
            System.exit(0);
        }
        
        List<String> commands = new ArrayList<String>();
        for(int i = 0; i < n; i++){
            String path = cd.getProjectPaths().get(i);
            String name = cd.getProjectNames().get(i);
            LogUtil.info("开始创建项目"+name+"的 GIT 命令...");
            File f = new File(path);
            if(f.exists() && f.isDirectory()){
                //        盘符:[linux不用写这个]
                commands.add(path.split(":")[0]+":");
                //        cd 【项目路径】
                commands.add("cd "+path);
                //        for /F %%i in ('git config --get user.name') do ( set name=%%i)
                commands.add("for /F %%i in ('git config --get user.name') do ( set name=%%i)");
                //        git log --author=%name% --since ==【开始时间】 --until=【结束时间】 > D:programeclipseworkDESTconfig【项目名称英文】.txt
                
                File targetFilePath = FileUtil.reCreateFile(FileUtil.getTmpFilePath(cd.getOutputPath(),f.getName()+".txt"));
                //注意:不包含第一天,需要向前挪动1天
                commands.add("git log --author=%name% --since =="+DateUtil.getPreDayStr(cd.getStartDate())+" --until="+DateUtil.toString(cd.getEndDate())+" > "+
                        FileUtil.getShortPath(targetFilePath));
                LogUtil.info("创建项目"+name+"的 GIT 命令成功!");
            }else{
                LogUtil.info("创建项目"+name+"的 GIT 命令失败,找不到文件夹!");
            }
        }
        
        for(String command:commands){
            System.out.println(command);
        }
        
        if(!commands.isEmpty()){
            String commandPath = FileUtil.getTmpFilePath(cd.getOutputPath(),"cmd.bat");
            File commandFilePath = FileUtil.reCreateFile(commandPath);
            FileUtil.storeGitCommands(commands,FileUtil.getShortPath(commandFilePath));
            return commandPath;
        }
        return "";
        
    }
}

❤????????????????????????????❤????????????????????????????❤????????????????????????????

最后

以上就是单薄蛋挞为你收集整理的小项目 GIT生成公司EXCEL周报(5)EXCEL创建项目任务5 创建excel表格(1)的全部内容,希望文章能够帮你解决小项目 GIT生成公司EXCEL周报(5)EXCEL创建项目任务5 创建excel表格(1)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部