感谢写代码的时候遇到的所有大恩人!磕头了磕头了!

咚!咚!咚!

昨天晚上接了个活。

每个月的月初需要把上个月的物流提单大包数和对应的ID上传到特定的表格中...

做法是先在在线表格取得提单号,根据提单号从邮件里找到对应提单的预报邮件,下载一个压缩包,压缩包里有一个Excel表格,表格里有几万个大包号,需要手动把大包号去重,把大包数量和大包ID提取出来塞到在线表格里。

这是其中一个表格,一共150个

一个不熟练的人估计需要做一上午。

想了下,之前弄过POI,可以用POI把表格数据提出来,去重,最后输出出来,再往在线表格里塞,这样能节省几个小时。

嘿嘿....开动

首先:从邮件里搜索到下载这一步只能手工搞,我可以把压缩包重命名成提单号,解压缩出来带有提单号的目录,目录里只有一个Excel文件,用Java把Excel文件名改成提单号。遍历每个Excel文件,用POI把数据去重输出,输出数据数量和数据内容。

说干就干。

首先获取整个文件夹的文件名称并赋给文件夹内的文件,我参考了虫卅blog中的一部分代码

【java】如何获取整个文件夹的文件名称_java获取文件名称_虫卅的博客-CSDN博客

package com;import java.io.File;public class FileDemo {private static String filepath="D:\\test\\2023-05-10";public static void getfileName(String filepath) {//获取目录下所有文件的名字(不包括文件夹)File f3 = new File(filepath);File[] files = f3.listFiles();for (File fi : files){if (fi.isFile()){System.out.println(fi.getName());}}}
}

遍历出来xslx文件之后,使用file.renameTo(new File(filename));方法重命名,但是失败了,翻了不少博客又看了不少文章也找不出个所以然,倒是删除文件没问题。后来看了另外一位朋友的博客决定曲线救国,复制文件改名。

巧妙地解决Java文件重命名失败的问题-蒲公英云

大概意思就是引用一个FileUtils类,通过这个类去把文件复制。我找了几个博客看了下

感谢出处不详,经久不息

Java常用类(三):FileUtils类_出处不详,经久不息的博客-CSDN博客

public class FileDemo {private static String filepath="D:\\test\\2023-05-10";private static String xlsxdirName;private static String xlsxpath;....public static void getfileName(String filepath) throws IOException {//获取目录下所有文件的名字(不包括文件夹)File f3 = new File(filepath);File[] files = f3.listFiles();for (File fi : files){if (fi.isFile()){System.out.println(fi.getName());//fi.renameTo(new File(xlsxdirName+".xlsx"));FileUtils.copyFile(fi,new File(xlsxdirName + ".xlsx"));//FileUtils.delete(fi);}}}
}

运行了下,没反应...找了半天才发现,文件复制+重命名成功了,但是复制到了项目目录下...

行吧...

下面搞遍历,遍历所有目录。

    public static void readfile_(String filepath) throws FileNotFoundException, IOException {File file = new File(filepath);String[] list=file.list();for(int i=0;i<list.length;i++){if(file.isDirectory()){System.out.println(list[i]);xlsxdirName=list[i];xlsxpath=filepath + "\\" + xlsxdirName;getfileName(xlsxpath);}}}

很轻松。写个main函数。

整个目录中所有的表格名都被改成提单号了

package com.cecz;import org.apache.commons.io.FileUtils;import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;/*** 目的:输入目录,将目录中所有的文件复制到另外一个目录并将其重命名为目录名* filepath:目录路径* xlsxdirName:目录里所有目录名称* xlsxpath:表格路径* */public class FileDemo {private static String filepath="D:\\test\\2023-05-10";private static String xlsxdirName;private static String xlsxpath;public static void main(String[] args) throws IOException {readfile_(filepath);}public static void readfile_(String filepath) throws FileNotFoundException, IOException {File file = new File(filepath);String[] list=file.list();for(int i=0;i<list.length;i++){if(file.isDirectory()){System.out.println(list[i]);xlsxdirName=list[i];xlsxpath=filepath + "\\" + xlsxdirName;getfileName(xlsxpath);}}}//get目录下的name并将其重命名→输出文件夹:D:\dev-project\IdeaProjects\cecz-excelpublic static void getfileName(String filepath) throws IOException {//获取目录下所有文件的名字(不包括文件夹)File f3 = new File(filepath);File[] files = f3.listFiles();for (File fi : files){if (fi.isFile()){System.out.println(fi.getName());//fi.renameTo(new File(xlsxdirName+".xlsx"));FileUtils.copyFile(fi,new File(xlsxdirName + ".xlsx"));//FileUtils.delete(fi);}}}
}

下面开始搞POI

POI比较轻松,不过长时间不做这个有点记不清了,就去狂神那里看了一i眼。

4、Excel基本读取及注意_哔哩哔哩_bilibili

通过FirstTalent的博客知道了如何获取表格里的总行数

利用poi获取导入的Excel表格一共有多少行数据!!!_poi获取excel行数_FirstTalent的博客-CSDN博客

需要把每行的大包数找出来进行,删除重复的数据

思路是先初始化一个静态数组和一个int类型的count,每遍历一行数据就和数组里的数据进行比对,如果数组里没有的话就直接add进并且count++。遍历完所有行之后遍历数组并取得数组长度

想了一下这有没有什么类库能实现...一拍脑瓜

ArrayList搞得定啊!

找了一篇博客

如何在Java中将String值与String类型的ArrayList进行比较? | 码农家园

list.contains()方法,舒服了!

package com.cpp;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.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.jupiter.api.Test;import java.io.*;
import java.util.ArrayList;public class ExcelReadTest {public static int count=0;public static ArrayList<String> list=new ArrayList<>();public static String path="D:\\dev-project\\IdeaProjects\\cecz-excel";public ExcelReadTest() throws FileNotFoundException {}//public static void main(String[] args) throws IOException {//将Java程序的输出结果写到txt文件PrintStream ps = new PrintStream("D:\\log.txt");System.setOut(ps);//sout出的都进log.txt中//遍历所有文件执行testRead07File allFiles = new File(path);String[] list=allFiles.list();for(int i=0;i<list.length;i++){if(allFiles.isDirectory()){if(list[i].endsWith(".xlsx")){System.out.println("================"+list[i]+"=====================");testRead07(list[i]);}}}}public static void testRead07(String fileName) throws IOException {//读取excel文件FileInputStream fileInputStream = new FileInputStream(path+"\\"+fileName);Workbook workbook = new XSSFWorkbook(fileInputStream);Sheet sheet = workbook.getSheetAt(0);
//        Row row = sheet.getRow(1);
//        Cell cell = row.getCell(1);//获取行数int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();//输出行数到*********控制台System.out.println("行数="+physicalNumberOfRows);//遍历行,做对比for(int i=1;i<physicalNumberOfRows;i++){Row row = sheet.getRow(i);Cell cell = row.getCell(1);
//            System.out.println(cell.getStringCellValue());compare(cell.getStringCellValue());}//完成之后返回行数和list中的数据System.out.println("行数:"+list.size());for (String str:list) {//输出比对好的list数据到*******控制台System.out.println(str);}//清除list并count归零list.clear();count=0;}/*** 对比num和数组中的数据,* 如果数组里没有num,则放入,count+1。* 如果有,则不防暑* */public static void compare(String num){if(!list.contains(num)){list.add(num);count++;}}
}

接着遍历目录里所有的文件,并把数据打印在txt文档里。

感谢太閤秀吉的文章

java输出结果到txt_将Java程序的输出结果写到txt文件中的方法_太閤秀吉的博客-CSDN博客

齐活,一个月干一天的工作俩小时搞定了...

下面开始考虑怎么把list里的数据塞进在线表格里的Cell里....

有点麻烦似乎...

使用POI完成Excel数据处理相关推荐

  1. Java POI 对Excel合并单元格的数据处理

    Java POI 对Excel合并单元格的数据处理 最近在项目开发过程中,有个一个导入Excel文件处理合并单元格数据的需求,就自己在网上找了一个模板,自己进行二次开发来开发需求. Excel工具类 ...

  2. POI进行Excel的合并单元格数据处理

    POI进行Excel的合并单元格数据处理 近日接到一个要处理合并Excel单元格的上料表的需求,就到网上找了一些模板,发现有的技术大牛还是挺厉害的,对他们致以敬意. 合并单元格工具类 在这个类中将传入 ...

  3. POI对Excel自定义日期格式的读取

    用POI读取Excel数据:(版本号:POI3.7) 1.读取Excel Java代码   private List<String[]> rosolveFile(InputStream i ...

  4. java通过poi读取excel中的日期类型数据或自定义类型日期

    java通过poi读取excel中的日期类型数据或自定义类型日期 Java 读取Excel表格日期类型数据的时候,读出来的是这样的  12-十月-2019,而Excel中输入的是 2019/10/12 ...

  5. java利用poi导出excel功能-附带图片导出

    java利用poi导出excel功能-附带图片导出 写在前面 最近刚离职,闲来无事,于是把上两家公司都有碰到过的需求但都没有去研究实现:即导出带图片的excel报表.于是就折腾了一下这个功能,研究出来 ...

  6. POI处理Excel,条形图,散点图,折线图

    POI处理Excel,条形图,散点图,折线图 一.引入Maven依赖 二.条形图实现 2.1实现效果展示 2.2 代码实现如下: 三.散点图实现-----对应Excel中的XY散点图 3.1初始数据准 ...

  7. java通过poi读取excel中的日期类型

    1.问题分析 Java 读取Excel表格日期类型数据的时候,读出来的是这样的 12-十月-2020,而Excel中输入的是 2020/10/12 或 2020-10-12 poi处理excel时,当 ...

  8. POI导出Excel (满满的干货啊)

    已经实现的POI导出Excel 步骤一:导入依赖 <dependency><groupId>org.apache.poi</groupId><artifact ...

  9. POI处理Excel中的日期数据类型

    在POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理. 正确的处理方法是先判断单元格 的类型是否则NUMERIC类型, 然后再判断单元格是 ...

最新文章

  1. 关于问题的讨论不应停留在人的维度上
  2. 【源代码】基于Android和蓝牙的单片机温度採集系统
  3. portal for arcgis 10.4的安装和配置及遇到的问题
  4. VS CRT C标准库函数strrev解析
  5. php mysql 表关联,mysql的多表关联_MySQL
  6. Snipaste截图
  7. java 异步调用方法_乐字节Java编程之方法、调用、重载、递归
  8. 瑞幸咖啡公布对董事长兼CEO郭谨一调查结果:未发现不当行为
  9. sqlbulkcopy能用于mysql吗_混凝土自动上料搅拌车能用于农村盖房吗?
  10. mysql高级用法(函数)
  11. [转]Why Not Paxos
  12. 数据蜂巢架构演讲之路读后感
  13. IOS 开发学习29 Socket框架 AsynSocket的使用
  14. 数据库系统概论 (王珊.第五版)第七章数据库设计习题答案
  15. 国密算法简介及电子印章相关标准
  16. [湖南大学程序设计实训训练作业一]9.二叉树遍历,从前序、中序到后序(二叉树呀,面试必考哦!)
  17. 百度网盘PC端扫描二维码登录时无法加载二维码问题解决方法
  18. Andriod Studio 线性布局(LinearLayout)
  19. 电脑桌面加html格式壁纸,巧妙使用IDM获取精美电脑桌面壁纸
  20. 在mac上安装md5命令

热门文章

  1. 解决您的连接不是私密的问题
  2. 使用Selenium慢慢向下滚动页面
  3. 杭电acm 1880魔咒词典(水题)
  4. opencv监测微信发送通知
  5. 九、Git tag 和 GitHub releases
  6. 路由器显示无法连接到服务器是什么意思,路由器设置后显示未连接到服务器
  7. 编码如作文:写出高可读 JS 的 7 条原则
  8. 研发效能系列 - 质量与速度能否兼得?
  9. 20N60-ASEMI高压N沟道MOS管20N60
  10. Java中权限修饰符