从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

阅读全文
0 0
原创粉丝点击