java 之 Excel操作

需求如下: excel表格中的信息有姓名和身份证号,同时也有对应的时间戳,对应每个人的简历原文件名。现在要求将简历重命名为"姓名_身份证.pdf"的形式,将文件的名字写入表格的第5列中。要求用Java来实现。

 

前期准备,需要下载jxl.jar包,添加入文件工程,添加以及配置方法为:https://blog.csdn.net/Golden_soft/article/details/80952243

实现思路:

1. 遍历表格,建立person类,存放个人姓名,id,行号(为之后添加第5列信息作准备,这是最后实现添加需求时补充的)

2. 建立person 和 原文件名的映射

3. 遍历集合,找到原文件,对其进行改名

4. 在遍历集合的循环内同时对表格元素进行修改

 

 

需要注意的:

1. 读取表格的流程 

结构的关系为  工作簿 workbook- 工作表 sheet  -  单元格 cell

单元格 cell.getContents()  获取单元格的内容

File files = new File(pathName);
InputStream inputStream = new FileInputStream(files);

 // 新建并获取工作簿
Workbook workbook = Workbook.getWorkbook(inputStream);

// 读取工作表
Sheet sheet = workbook.getSheet(0);

// 按照行数进行读取
int rows = sheet.getRows();
        
         for(int i = 1;i<rows;i++)
        {
            // Cell代表单元格 分别是读名字,读id,读时间
            Cell cell_name = sheet.getCell(1,i);
            Cell cell_id = sheet.getCell(3,i);
            Cell cell_stamp = sheet.getCell(4,i);

            // System.out.println(cell_name.getContents()+" "+cell_id.getContents()+" "+cell_stamp.getContents());
            // 建立Person
            Person person = new Person(cell_name.getContents(),cell_id.getContents(),i);
            String time_stamp = cell_stamp.getContents();

            // 建立map
            map.put(person,time_stamp);
        }

 

2. 文件改名 先找到文件,利用file.renameto(new File(new_name)); 

File file_trans = new File(pathName);

// 改名
file_trans.renameTo(new File(newName));

3. 表格中插入新内容

1) 创建读入的工作簿 workbook_r

2) 由于是追加而非覆盖重写,创建写的工作簿对象 workbook_w

3) 创建工作表 sheet

4) 插入的内容 l ,用sheet.addcell(l)

5)   关闭流

 

改名和插入表格

public static void ChangeName(File files,HashMap<Person, String> map) throws IOException, BiffException, WriteException {

        // 工作簿
        Workbook workbook_r = Workbook.getWorkbook(files);
        // 工作簿对象
        WritableWorkbook workbook_w = Workbook.createWorkbook(files,workbook_r);
         // 工作表
        WritableSheet sheet_w = workbook_w.getSheet(0);
        //  对文件进行改名,同时也更新表格
        for(Person key:map.keySet())
        {
            String value = map.get(key);
            // 所有pdf的路径
            String pathName = "";

            String newName = pathName;
            String tmp_name = "";
            newName = addName(newName,key);
            tmp_name = addName(tmp_name,key);
            // System.out.println(newName);

            // 找到文件
            pathName+=value;
            File file_trans = new File(pathName);

            // 改名
            file_trans.renameTo(new File(newName));

            //  文件名写到表格的第5列中
            //  先获得单元格对象,而后修改内容
            //  System.out.println(key.name+" "+key.id+" "+key.row+" "+value);

            Label l = new Label(5,key.row,tmp_name);
            sheet_w.addCell(l);
        }
        // 关闭流
        workbook_w.write();
        workbook_w.close();
        workbook_r.close();
    }

完整代码:

import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.*;

import java.io.*;
import java.sql.SQLOutput;
import java.util.HashMap;
import java.util.Map;

public class Main {
    public static Map<Person,String> map = new HashMap<Person,String>();
    public static void main(String[] args) throws IOException, BiffException, WriteException {
        // 先读取文件
        File files = new File("");
        ReadColumn(files,1,3,4, (HashMap<Person, String>) map);
        ChangeName(files, (HashMap<Person, String>) map);
    }

    //  建立姓名,身份证号和文件名的映射
    public static HashMap ReadColumn(File files,int index1,int index2,int index3,HashMap<Person,String> map) throws IOException, BiffException {
        InputStream inputStream = new FileInputStream(files);

        // 新建并获取工作簿
        Workbook workbook = Workbook.getWorkbook(inputStream);

        // 读取工作表
        Sheet sheet = workbook.getSheet(0);

        // 按照行数进行读取
        int rows = sheet.getRows();
        //System.out.println(rows),行下标从0开始;
        for(int i = 1;i<rows;i++)
        {
            // Cell代表单元格 分别是读名字,读id,读时间
            Cell cell_name = sheet.getCell(1,i);
            Cell cell_id = sheet.getCell(3,i);
            Cell cell_stamp = sheet.getCell(4,i);

            // System.out.println(cell_name.getContents()+" "+cell_id.getContents()+" "+cell_stamp.getContents());
            // 建立Person
            Person person = new Person(cell_name.getContents(),cell_id.getContents(),i);
            String time_stamp = cell_stamp.getContents();

            // 建立map
            map.put(person,time_stamp);
        }
        // 验证下集合
        for(Person key:map.keySet())
        {
            String value = map.get(key);
            System.out.println(key.name+" "+key.id+" "+key.row+" "+value);
        }

        return map;
    }

    //  找到对应的文件,改名,写入表格的第5列
    public static void ChangeName(File files,HashMap<Person, String> map) throws IOException, BiffException, WriteException {

        // 工作簿
        Workbook workbook_r = Workbook.getWorkbook(files);
        // 工作簿对象
        WritableWorkbook workbook_w = Workbook.createWorkbook(files,workbook_r);
         // 工作表
        WritableSheet sheet_w = workbook_w.getSheet(0);
        //  对文件进行改名,同时也更新表格
        for(Person key:map.keySet())
        {
            String value = map.get(key);
            // 所有pdf的路径
            String pathName = "";

            String newName = pathName;
            String tmp_name = "";
            newName = addName(newName,key);
            tmp_name = addName(tmp_name,key);
            // System.out.println(newName);

            // 找到文件
            pathName+=value;
            File file_trans = new File(pathName);

            // 改名
            file_trans.renameTo(new File(newName));

            //  文件名写到表格的第5列中
            //  先获得单元格对象,而后修改内容
            //  System.out.println(key.name+" "+key.id+" "+key.row+" "+value);

            Label l = new Label(5,key.row,tmp_name);
            sheet_w.addCell(l);
        }
        // 关闭流
        workbook_w.write();
        workbook_w.close();
        workbook_r.close();
    }

    //  封装增加路径
    public static String addName(String name_primit,Person person)
    {
        String name_final = name_primit;
        name_final+=person.name;
        name_final+="_";
        name_final+=person.id;
        name_final+=".pdf";
        return name_final;
    }
}

class Person{
    String name;
    String id;
    int row;
    public Person(String name,String id,int row){
        this.name = name;
        this.id = id;
        this.row = row;
    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值