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

公司需要一个统计一下一个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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LUNG108

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值