从txt文件逐行读取数据到excel文件(包含POI的简单使用和excel文件的数据分列,出现次数统计)

xiaoxiao2021-02-28  79

公司需要一个统计一下一个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文件中的factory public 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个字符宽 //把读取到的每行数据写入sheet while((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关键字

@Test public 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

转载请注明原文地址: https://www.6miu.com/read-75749.html

最新回复(0)