java 实现 excel 去重_用java对大量Excel表处理(去重,生成新属性,统计数量)
近期帮老师的一位朋友做了数据处理,表格为1985-2014年的电子信息产业、汽车产业和装备制造产业的所有专利(申请号,分类号,申请人等等),其中申请号和分类号需要处理,通过处理生成其是否为融合性专利以及时间。然后统计为每年融合性专利的数量。
第一步,对Excel表名字及页面进行处理,方便循环迭代。我是尽量把每个表切成2MB大小,大概5W条数据左右吧,因为太大了会跑的很慢,一个3MB的表格处理需要16分钟,但是2MB的仅需4分左右。
第二步,在eclipse中导入poi包,因为表格是2007版的,一个poi包是不能对excel表处理的,需要导入四个包。
第三步,编写程序,实现算法,处理完的数据放入txt文件中,用逗号作为分隔符。
第四步,从mysql workbench中导入txt文件到表中
第五步,通过SQL语句去重,并统计所需要的数据
第三步:
主要用到了正则表达式pattern的基本用法,通过Pattern.complie.matcher()的find(start)方法,挑出所需要的数据
package 三大产业数据;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xssf.eventusermodel.XSSFReader;
import org.apache.poi.xssf.model.SharedStringsTable;
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 org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
public class test1 {
//得到专利的年份
public static int getYear(String s1) {
int a=((int)(s1.charAt(2))-(int)'0')*10+((int)(s1.charAt(3))-(int)'0');
if(a>=85 && a<=99)
a=a+1900;
else if(a>=0&& a<=3)
a=a+2000;
else if(a==20)
a=((int)(s1.charAt(2))-(int)'0')*1000+((int)(s1.charAt(3))-(int)'0')*100+((int)(s1.charAt(4))-(int)'0')*10+((int)(s1.charAt(5))-(int)'0');
return a;
}
public static String patternString(String s) {
String pattern = "[A-Z]\\d\\d[A-Z]";
String s1="";
int i=0;
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(s);
while (m.find(i)) {
s1=s1+m.group()+";";
i=m.end()+1;
if(i>s.length())
break;
}
if(s1!="")
s1=s1.substring(0, s1.length()-1);
else
s1="";
return s1;
}
//判断是否为融合专利
private static int isBlend(String a) {
String d=patternString(a);
String []s = d.split("\\;");
int index=0;
int j;
//查看是否有不同专利
for(j=0;j
第四步第五步,SQL代码如下
Load Data InFile 'E:/Data/38.txt' Into Table `equipment` fields terminated by ',' lines terminated by '\r\n';
insert into bus select applyID,classifyID,realDate,blendIndex from temp8 group by applyID;
select realDate,count(blendIndex) from bus where blendIndex=1 group by realDate;
我后来做了大量的数据处理工作,强烈大家用python去做,因为真的很方便,numpy,pandas等模块真的很强大。能用库函数的尽量不要自己去写,因为库函数都是做过优化的。
关于同一段代码处理2MB和3MB的excel表的时间差问题的话,是因为我在代码中频繁使用了加法连接字符串,效率底下,因为会频繁的拷贝字符串和分配内存,比较耗时。大家可以考虑用别的方法去做。例如python中,先把字符串存为列表,然后用''.join(list)的方法,速度会快很多。
java 实现 excel 去重_用java对大量Excel表处理(去重,生成新属性,统计数量)相关推荐
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java中读取excel数据类型_在Java中读取Excel文件的内容
利用JExcelApi来动态生成excel文档 首先,请到http://www.andykhan.com/jexcelapi/index.html下载java excel api,主页上同时有比较详细 ...
- java是什么格式_是java格式
错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...
- java ee开发环境_设置Java EE 6开发环境
java ee开发环境 本教程简要说明了如何设置典型的环境来开发基于Java EE 6的应用程序. 除了可以正常工作的Windows XP客户端具有足够的CPU能力和内存外,本教程没有其他先决条件. ...
- java集合类详解_【Java入门提高篇】Day20 Java集合类详解(三)List接口
今天要说的是Collection族长下的三名大将之一,List,Set,Queue中的List,它们都继承自Collection接口,所以Collection接口的所有操作,它们自然也是有的. Lis ...
- JAVA redis缓存过期_失效java服务器
Java 并发/多线程教程--4并发模型 本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平 ...
- java中 jacob作用_【JAVA】JACOB使用简介
它允许在java中调用com接口自动组件,它使用JNI(本地调用程序)来进行本地调用COM库.它可运行在x86和支持32位和64位Java虚拟机 X64的环境. 测试源码包: 密码: ej9u JAC ...
- java 爬虫 请求头_得到java头
Linux下JNI调用简单实例操作全过程 开发环境:Linux(Ubuntu 11.04) + JDK 7 实例说明:利用JNI调用本地代码的方法来实现一个计算Int数组总和的功能 使用JNI调用本地 ...
- java注解的开发_使用Java注解开发自动生成SQL
使用注解开发的好处就是减少配置文件的使用.在实际过程中,随着项目越来越复杂,功能越来越多,会产生非常多的配置文件.但是,当配置文件过多,实际维护过程中产生的问题就不容易定位,这样就会徒劳的增加工作量. ...
- 广东java工资一般多少_广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少...
广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少 首页 > java > 广东java工资待遇 作者:镀金池 发布时间:2018-12-22 11:20 在 ...
最新文章
- Visual Studio 2015 Community连接到Mysql
- linux如何安装eclipse
- (1)kendo UI使用基础介绍与问题整理——简单说明
- spring mvc学习(10):eclipse的环境前maven配置
- BAT老程序员分享:Linux C/C++ 开发程序员的黄金方向和学习路线!
- S5PV210的内存映射
- Python批量检查docx文档中文本框的内容是否正确
- EOS小白学习(四)使用http请求EOS节点
- php是日元吗,PHP to JPY
- CPU指令系统寻址方式
- 漫威超级英雄大全(一)
- 信息安全风险评估学习笔记
- YOLO V5 实现课堂行为检测
- Cint() , int(),round() , fix() 的区别与联系
- Coprime Triples——CodeChef - COPRIME3
- 华为P30震撼来袭!刘海屏+麒麟980+3650mAh,网友直呼:年度机皇呀
- upx壳的一些简单脱壳,望大牛勿喷。
- 安卓app之按键美化
- linux环境下ps命令行,Linux系统ps命令详解:查看正在运行的进程
- java创建对象的过程详解
热门文章
- Tensorrt7踩坑记录
- lintcode算法-3 983 · 棒球游戏
- 每日英语--Week10
- css 设置冻结表格头,固定/冻结行表头、列表头的做法
- UDA/语义分割-ColorMapGAN: Unsupervised Domain Adaptation for Semantic Segmentation Using Color Mapping G
- Excel表格中无法中间插入新行列! 提示:在当前工作表的最后一行或列中,存在非空单元格,解决方案
- CQF笔记Primer金融基础
- 把你的 Mac 从 Catalina 降级回 Mojave 系统的避坑指南
- 断网重启路由器就好_电脑断网重启路由器就好了怎么回事
- [FROM WOJ]#4479 长跑