从txt文件逐行读取数据到excel文件(包含POI的简单使用和excel文件的数据分列,出现次数统计)
来源:互联网 发布:淘宝良心装机店铺 编辑:程序博客网 时间:2024/05/17 23:36
公司需要一个统计一下一个txt文本中 黑体字部分不同数据出现的次数 ,把结果做成excel文件交上去。txt内容就像下面的:
想了一下大概涉及这几个方面:1.黑体字的提取 2.黑体字的去重 3.出现次数的统计
涌入脑中的方案有三个:
a.直接上java代码,用IO流处理文本,逐行获取后截取字符串,在进行重复的逻辑判断,同时记录下来出现了多少次------太麻烦
b.截取字符串后,存到数据库中,使用distinct和count函数处理-----也麻烦
c.直接逐行写入excel,再进行excel方面的处理-----这个还不错,因为a和b最后还是需要记录到excel中
决定后考虑了下总体的逻辑,如下:
第一部分:txt到xls
/* * 需求:把txt文件按照每行内容写入excel文件 * 步骤: * 1.读取txt文件----getTxt方法 * 2.创建excel文件,创建sheet----getFactory方法 * 3.创建row,循环创建cell,并把内容写入---writeTxtToExcel方法 */第二部分:xls操作
/* * 需求:统计不同数据的出现次数 * 步骤: * 1.分裂出黑体字部分 * 2.去除重复 * 3.统计出现次数 */
过程下来还是挺快的,就是有些小坑
第一部分详细:
获取txt方法
//读取txt文件public BufferedReader getTxt(String txtPath){try {File file = new File(txtPath);BufferedReader br = new BufferedReader(new FileReader(file));return br;} catch (Exception e) {System.out.println("解析txt文件有误");e.printStackTrace();}return null;}
创建xls中的factory方法-----引入的是poi-ooxml包,3.15版本。处理excel不止这一种包
//创建excel文件中的factorypublic Workbook getFactory(String excelPath){Workbook book = null;try {book = new HSSFWorkbook();} catch (Exception e) {System.out.println("创建excel文件失败");e.printStackTrace();}return book;}
内容写入writeTxtToExcel方法
//创建row,循环创建cell,并把内容写入public void writeTxtToExcel(String txtPath,String excelPath){try {BufferedReader br = getTxt(txtPath);String str = null;int index = 0;//标记excel文件写入时的换行Workbook factory = getFactory(excelPath);Sheet sheet = factory.createSheet();sheet.setColumnWidth(0,50*256);//设置列宽---50个字符宽//把读取到的每行数据写入sheetwhile((str = br.readLine()) != null){//逐行读取,判断的同时赋值Cell cell = sheet.createRow(index).createCell(0);//写入第一列的所有行if(StringUtils.isNotEmpty(str)){System.out.println(str);cell.setCellValue(str);}index++;}//把sheet写入excel文件OutputStream os = new FileOutputStream(excelPath);factory.write(os);os.close();} catch (Exception e) {System.out.println("内容写入失败");e.printStackTrace();}}
这个方法中有个问题还没搞明白:逐行读取的str值set进cell中之前有个判断,打印出来的str结果是不包含空行的,但是写入excel的数据死活都有空行,试了很多遍都不行
当然了,也可以再写一些方法,比如:给数据插入标题,单元格样式设置等等。上头等着要数据,我就没弄。
测试方法:我是使用的spring提供的测试。用main方法也行,但是方法注意static关键字
@Testpublic void test02(){String txtPath = "d:/lung/openID.txt";//已存在的txt文件路径String excelPath = "d:/lung/openID.xls";//要创建的excel文件路径writeTxtToExcel(txtPath, excelPath);System.out.println("写入完毕");}这里说明一下,我创建的格式是xls格式。如果是xlsx格式,offer打开报错,使用wps两种都可以打开,说是offer版本的问题
结果如图:
至此,从txt写数据到excel的功能实现了。
----------------------------------------------------------------------------------------------------------------------------------------
第二部分详细:
去除空行:
我使用的是比较笨的方法:找的excel中的“筛选”--->只选择 “空白”,如图:
空白行已经单独标出来了,选中这些行,删除行就行了
分裂出黑体部分:
选中A列,找到“数据”中的“分列”---->“分隔符号”--->”其他“,输入” . “。因为数据中的黑体部分正好有个” . “。然后删除A列就行了
去除重复:
复制这些数据到隔壁列B列,选中B列后,找到 “去除重复值”,确定即可
统计出现次数:
在C1格输入 “=countif(a1:a41,b1)”------说明:countif方法,两个参数:原始数据的开始和结束位置;要找出现次数的数据所在位置。回车
复制C1格后,选中C列,右键选中 粘贴中的 “选择性粘贴”--->“公式”即可
最后手动加个标题就好看些
至此,数据的统计工作也完成了
总结:
1.读取和写入文件时,最好路径名命名清楚,不然容易混淆
2.如果想再往已经有数据的excel中添加数据,只要稍加修改writeTxtToExcel方法即可
3.其他的好像没什么了
LG
- 从txt文件逐行读取数据到excel文件(包含POI的简单使用和excel文件的数据分列,出现次数统计)
- 使用Apache POI创建Excel,并从数据库中读取数据写入到Excel文件中
- 关于读取Excel文件数据到数据库,以及从数据库导出数据到Excel的例子
- 读取本地txt文件数据和excel文件数据
- java从Excel文件读取数据到数据库和从读取数据库数据写入Excel
- poi方式操作excel表格数据(数据库查询到的数据导入excel文件)
- JAVA使用POI读取EXCEL文件的简单model
- JAVA使用POI读取EXCEL文件的简单model
- JAVA使用POI读取EXCEL文件的简单model
- Java中读取Excel文件的内容和导出数据到Excel文件
- Python从txt文件中逐行读取数据
- Python从txt文件中逐行读取数据
- 使用Apache POI读取Excel文件,将读取的数据转换成json写入文本文件
- Matlab读取Excel、txt文件数据
- MATLAB读取Excel,Txt文件中的数据
- MFC逐行读取txt文件中的数据
- C#读取Excel和txt文件数据并把数据分别一次性添加到Mysql数据库
- java 读取键盘输入到txt文件,统计每个单词出现的次数并输出
- gradle多项目聚合的build.gradle
- [线段树][二分图 霍尔定理]LOJ#6062 && 2017 山东一轮集训 Day2. Pair
- C#使用拉依达准则(3σ准则)剔除异常数据(.Net剔除一组数据中的奇异值)
- 常用git 命令
- 虚拟机连不上网,无法ping主机的解决方案
- 从txt文件逐行读取数据到excel文件(包含POI的简单使用和excel文件的数据分列,出现次数统计)
- python matplotlib 画直方图报错
- Struts2-文件上传-<s:file>标签使用
- SVN (subversion) 的备份和还原
- 拍照上传图片
- 导入Maven Project项目获取jar包的流程 seeting配置
- LeetCode 108. Convert Sorted Array to Binary Search Tree
- java单例模式
- Markdown学习之(2)-绘制表格和流程图