精华内容
下载资源
问答
  • 按行读取批量日志文件,并将一部分数据写入Excel表格 前言 第一次写博客,也是第一次写读取文件导出为Excel表格的案例,其中去重,我试过很多方法,包括list集合循环去重,双重map去重,数组等,租最后才想到将两个...

    按行读取批量日志文件,并将一部分数据写入Excel表格

    前言

    第一次写博客,也是第一次写读取文件导出为Excel表格的案例,其中去重,我试过很多方法,包括list集合循环去重,双重map去重,数组等,租最后才想到将两个判重的条件拼接作为key,最后导出表格时再遍历取出并截取。所以下面代码中许多注释的内容都是测试所使用的,有兴趣的可以看看,有好的建议可以提出来,一起学习!

    1.需求

    Java编写脚本,处理批量日志文件。可以读取某个文件夹下所有文件和子文件夹内的日志文件。以本次代码需求为例:需要读取日志文件中的IP、OID、oidsObj所对应的数据,并根据IP、OID两个元素组合判重,去掉重复的数据,在导入Excel表格。

    2.解决思路

    1、按行读取给定文件夹下所有文件;
    2、对每一行读取的数据经常处理,取包含三个字段对应的一行数据temp.contains(“peerAdd为=”)、temp.contains(“OID==”)、temp.contains(“oidsObj==”);
    3、对所需的每行数据进行截取,(String[] str = temp.split("=====================");
    str = str[1].split("/");)获得IP、OID、oidsObj;
    4、把截取的IP、OID、oidsObj分别存入三个集合中以便之后便利取出作为map集合的组合key;
    5、以一个文件为单位,将IP、OID拼接作为key,oidsObj作为value存入map集合;
    6、最后进行导入Excel表格。

    3.源代码

    package file;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    public class Test3 {
    	
    	/**
    	 * 循环取文件夹内需要读取的文件
    	 * @param path
    	 * @return
    	 */
    	private static List<File> getFiles(String path) {
    		File root = new File(path);
    		List<File> files = new ArrayList<File>();
    		if(!root.isDirectory()){
    			files.add(root);
    		}else{
    			File[] subFiles = root.listFiles();
    			for (File f : subFiles) {
    				files.addAll(getFiles(f.getAbsolutePath()));//getAbsolutePath()方法取文件的绝对路径
    			}
    		}
    		return files;
    	}
    
    	/**
    	 * @param args
    	 * @throws IOException 
    	 */
    	public static void main(String[] args) throws IOException {
    		//获取需要读取的文件夹下所有的文件
    		List<File> files = getFiles("F:\\read");
    		//创建一个Excel表格
    		HSSFWorkbook mwokrbook = new HSSFWorkbook();
    		//创建一个Excel表格的sheet
    		HSSFSheet msheet = mwokrbook.createSheet();
    		List lists = new ArrayList();
    		List<String> readList = new ArrayList<String>();
    		String temp = null;
    		
    		List peerAddstr = new ArrayList<>();
    		List oidsObjstr = new ArrayList<>();
    		List OIDstr = new ArrayList<>();
    		
    		String[] s = new  String[3];
    		List slist = new ArrayList<>();
    		Map<String,String> map = new HashMap<String,String>();
    		for (File f : files) {
    			String name = f.getName();
    			if(f.isFile() && name.endsWith(".log")){//判断是文件并且文件是以.log结尾的文件(根据需求添加,可以是TXT等)
    				InputStreamReader read = new InputStreamReader(new FileInputStream(f),"utf-8");
    				readList = new ArrayList<String>();
    				BufferedReader reader = new BufferedReader(read);
    				while((temp=reader.readLine())!=null && !"".equals(temp)){//按行读取文件
    					//取每行内容包含“peerAdd为=”,并截取其中的IP
    					if(temp.contains("peerAdd为=")){
    						String[] str = temp.split("=====================");
    						str = str[1].split("/");
    						peerAddstr.add(str[0]);//IP存入集合,以便之后便利取出作为map集合的组合key
    					}
    					if(temp.contains("OID==")){
    						String[] str = temp.split("================");
    						OIDstr.add(str[1]);
    					}
    					if(temp.contains("oidsObj==")){
    						String[] str = temp.split("================");
    						oidsObjstr.add(str[1]);
    					}
    				}
    				//以一个文件为单位存入map集合
    				for(int i =0;i<peerAddstr.size();i++){
    					String key = peerAddstr.get(i)+"==="+OIDstr.get(i);
    					map.put(key, (String) oidsObjstr.get(i));
    					//System.out.println(i+":"+map);
    				}
    				//System.out.println(map);
    				//lists.add(readList);
    			}else{
    				System.out.println("文件不存在");
    			}
    		}
    		/*for(int i=0;i<map.size();i++){
    		}*/
    		//遍历map集合
    		for (Map.Entry<String, String> m : map.entrySet()) {
    			//System.out.println(m.getKey());
    			//取出组合key,并截取对应的IP,oid
    			String[] IpandOid = m.getKey().split("===");
    			String ip = IpandOid[0];
    			String oid = IpandOid[1];
    			String oidsObj = m.getValue();
    			createCell(ip, oid, oidsObj, msheet);
    			System.out.println(ip+oid+oidsObj);
    			//System.out.println(m.getValue());
    		}
    		/*for(int a=0;a<peerAddstr.size();a++){
    			readList.add((String) peerAddstr.get(a));
    			readList.add((String) OIDstr.get(a));
    			readList.add((String) oidsObjstr.get(a));
    			lists.add(readList);
    		}
    		System.out.println(readList.size());
    		System.out.println("readList"+readList);
    		System.out.println("lists"+lists);*/
    		
    		/*System.out.println("==="+peerAddstr.toString());
    		System.out.println(peerAddstr);
    		System.out.println(peerAddstr.size());
    		*/
    		
    		
    		/*for(int i =0 ;i<lists.size();i++){
    			for(int j = lists.size()-1;j>i;j--){
    				if(lists.get(j).get(0)){
    					
    				}
    			}
    		}*/
    		/*Map<String,String> map = new HashMap<String,String>();
    		for(int a = 0;a<OIDstr.size();a++){
    			map.put((String)OIDstr.get(a), (String) oidsObjstr.get(a));
    		}
    		for (Map.Entry<String, String> m : map.entrySet()) {
    			//createCell1(m.getKey(), m.getValue(), msheet);
    			//System.out.println(m.getKey()+"----"+m.getValue());
    		}*/
    		
    		//创建excel标题行,第一行
    		HSSFRow headrow = msheet.createRow(0);
    		headrow.createCell(0).setCellValue("ip");
    		headrow.createCell(1).setCellValue("OID");
    		headrow.createCell(2).setCellValue("oidsObj");
    		
    		//createCell("192.30.251.166","1.3.6.1.4.1.2011.5.25.41.4.7","oidsObj",msheet);
    		//写入路径
    		File file1=new File("F:\\writer\\2.xls");  
            OutputStream out=new FileOutputStream(file1);
    		mwokrbook.write(out);
    		out.close();
    	}
    	/**
    	 * 对Excel表格写入内容
    	 * @param ip
    	 * @param oid
    	 * @param oidsobj
    	 * @param sheet
    	 * HSSF类,只支持2007以前的excel(文件扩展名为xls),而XSSH支持07以后的(xlsx),所在导入之前要把excel文件降到07
    	 */
    	private static void createCell(String ip, String oid,
    			String oidsobj, HSSFSheet sheet) {
    		HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum()+1);
    		dataRow.createCell(0).setCellValue(ip);
    		dataRow.createCell(1).setCellValue(oid);
    		dataRow.createCell(2).setCellValue(oidsobj);
    	}
    	/**
    	 * 对Excel表格写入内容(不包括IP)测试所用
    	 * @param oid
    	 * @param oidsobj
    	 * @param sheet
    	 */
    	private static void createCell1( String oid,
    			String oidsobj, HSSFSheet sheet) {
    		HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum()+1);
    		dataRow.createCell(1).setCellValue(oid);
    		dataRow.createCell(2).setCellValue(oidsobj);
    	}
    }
    
    

    4.截图展示

    最终导出的表格效果展示
    在这里插入图片描述

    5.所需jar包

    poi所需的jar包

    展开全文
  • 目录 ...split()截取部分的字符串 读取文件夹下的所有Excel 模糊匹配符合条件的Excel split()截取部分的字符串 str = 'https://www.baidu.com/pdf/abcdefg.pdf' # 输出字符串,>>>...

    目录

    split()截取一部分的字符串

    读取文件夹下的所有Excel

    模糊匹配符合条件的Excel


    split()截取一部分的字符串

    str = 'https://www.baidu.com/pdf/abcdefg.pdf'
    
    # 输出字符串,>>>https://www.baidu.com/pdf/abcdefg.pdf
    print(str)
    
    
    # 做为一个整体截取,>>>['https://www.baidu.com/pdf/abcdefg.pdf']
    print(str.split())
    
    
    # 把字符串分割,>>>['https:', '', 'www.baidu.com', 'pdf', 'abcdefg.pdf']
    print(str.split('/'))
    
    
    # 输出第一段字符串,>>>https:
    print(str.split('/')[0])
    
    
    # 输出最后一段字符串,>>>abcdefg.pdf
    print(str.split('/')[-1])
    
    
    # 把最后一段字符串再次分割,>>>['abcdefg', 'pdf']
    print(str.split('/')[-1].split('.'))
    
    # 输出>>>abcdef
    print(str.split('/')[-1].split('.')[0])
    
    #python中的split方法只能通过指定的某一个字符分割字符串,因此要实现实现多符号分割的话,就要调用#re模块中的split()函数
    import re
    words = 'a b c.d?e!f'
    >>>re.split(' |!|\?|\.', words)
    ['a', 'b', 'c', 'd', 'e', 'f']

    读取文件夹下的所有Excel

    # 结果文件
    result = pd.ExcelWriter(SETUP_DIR+r'\xlsx\高频数据.xls')
        
    # 获取表格列表
    origin_file_list = os.listdir(r'H:\HighBroAlarm\xlsx')   
    print(origin_file_list)  
    # 循环遍历表格
    for i in origin_file_list:
        #获取文件夹下的文件名
        print(i)
        excel_file_name = i
        #拼接每个文件的路径
        file_path =r'H:\HighBroAlarm\xlsx\%s' % i
        print(file_path)
        # 读取文件内容
        # 跳过0行
        content = pd.read_excel(file_path, skiprows=[0])
        # 有缺陷,会扩展列名
        # content = pd.read_excel(file_path)
        # 重新定义sheet名字
        sheet_name = i[:len(i) - 4]
        # 转换为同一个表多个sheet
        content.to_excel(result, sheet_name, index=False)
        # content.to_excel()
     
    result.save()

    模糊匹配符合条件的Excel

    # 结果文件
    result = pd.ExcelWriter(SETUP_DIR+r'\xlsx\高频数据.xls')
    ##固定路径下的模糊匹配
    for name in glob.glob(r'H:\HighBroAlarm\xlsx\*20191230.xlsx'):
        print (name) 
    ##相对路径下的模糊匹配
    for name in glob.glob(SETUP_DIR+r'\xlsx\*20191230.xlsx'):
        #路径名
        print (name) 
        #模糊匹配到的文件名
        excel_file_name = str(name).split('\\')[-1]
        print(excel_file_name)
        #拼接每个文件的路径
        file_path =SETUP_DIR+r'\xlsx\%s' % excel_file_name
        print(file_path)
        # 读取文件内容
        # 跳过0行
        content = pd.read_excel(file_path, skiprows=[0])
    
        # 重新定义sheet名字
        sheet_name = excel_file_name[:len(excel_file_name) - 4]
        # 转换为同一个表多个sheet
        content.to_excel(result, sheet_name, index=False)
        # content.to_excel()
    result.save()  

     

    展开全文
  • 最近有一个excel表格,其中一列列举了一些函数名,另一列需要填入的内容除了函数名,其他都一致。大概不到一百行,恰好是一个手动有点烦,但忍忍也能做的长度。本菜鸟决定维护程序员的尊严,能用代码解决的尽量不...

    最近有一个excel表格,其中一列列举了一些函数名,另一列需要填入的内容除了函数名,其他都一致。大概不到一百行,恰好是一个手动有点烦,但忍忍也能做的长度。本菜鸟决定维护程序员的尊严,能用代码解决的尽量不动手。于是去google了一下,方法列出来。

    1. EXCEL截取前、中、后几个字符串的方法

    涉及到三个函数:

    LEFT();
    RIGHT();
    MID();
    

    从名字就可以看出其用途,下面举例说明:

    LEFT(A2,4);       // 取出A2单元格中字符串的前四位;
    RIGHT(B3,5);    //  取出B3单元格中字符串的后五位;
    MID(D6,5,4);     //  取出D6单元格中字符串从第五个字符开始的四位(从1开始计数);
    

    2. 不确定要截取的子字符串的长度时

    比如我要取函数名,但函数名长短并不固定,这时候就要用到FIND()函数。
    举个栗子,有一列内容是这样的:

    max函数
    min函数
    sqrt函数
    ···
    

    那么就可以使用FIND("函数",A2)-1这样的语句来找到函数名的末尾。

    3. 替换字符串的部分内容

    这次就直接上函数吧:

    SUBSTITUTE(要替换的文本,旧文本,新文本,[替换第几个])
    

    前两节中的函数其实就是为了得到SUBSTITUTE()函数的参数,作用就是定位+确定子字符串。而本节就要实现替换操作了。

    第一个参数可以放要修改的单元格编号,比如A2;
    第二个参数定位到需要修改的字符串中要被替换掉的子字符串;
    第三个参数定位到源单元格中需要用到的子字符串;
    第四个参数可选,我这次没用到,就先不填了;

    最后实现我的需求的语句如下:

    =SUBSITIUTE(F2,LEFT(F2,FIND("函数",F2)-1),LEFT(B2,FIND("函数",B2)-1))
    

    最后用填充柄向下拉一下就搞定了。
    over~

    展开全文
  • 这是基于vue开发的功能,选择区间组件,从而截取开始部分和结束部分的数据 再附加List页面里有表格导出成Excel表格功能,实现思路就不写了,有需要的可以去看看 链接: 功能预览 Project setup npm install Compiles...
  • 点击我做的网站某一页面的一个按钮,可以从固定的网页中截取部分数据(表格形式的)存入数据库中。我的想法是通过excel的自网站的方式从页面上把表格提取下来,然后再存入数据库中,如果有更好的方式求指点。求...
  •   在使用Visual Studio MFC等程序时,常把所需变量数据保存为txt文件,但为了数据处理的便捷,需要把txt的数据复制到excel表格中去,会碰到一系列的问题。   下面举个我自己使用的例子来记录一下如何处理最便捷...

      在使用Visual Studio MFC等程序时,常把所需变量数据保存为txt文件,但为了数据处理的便捷,需要把txt的数据复制到excel表格中去,会碰到一系列的问题。
    老规矩,感谢下面两个参考教程:
    http://ask.zol.com.cn/x/6300428.html
    https://jingyan.baidu.com/article/09ea3ede445029c0aede39b8.html

      下面举个我自己使用的例子来记录一下如何处理最便捷。
    1、我先把txt当中的数据全选复制,然后粘贴到excel单元格中。
    在这里插入图片描述
    2、现在我只需要x的数值,也就是得去掉多余的部分,手动肯定得累死个人啊!介绍excel中3个处理函数left,mid,right。

    =left(A1,6)  //获取A1单元格左边6个字符
    
    =mid(A1,3,5) //获取A1单元格中第3个到第5个字符
    
    =right(A1,6) //获取A1单元格右边6个字符
    

    3、得到的数值将要放到B列。先选中B1,然后按 Ctrl+Shift+向下的箭头键即可选中整个C列。
    在这里插入图片描述
    在这里插入图片描述
    4、因为我只需要x的值,例如A1中的-2.20,我使用mid函数,如果不知道起始字符和结束字符,可以先数一下大概确定,看到结果后微调,我的是第3到第5个字符。
    在这里插入图片描述
    5、注意此时不能直接按回车,而是按住 Ctrl+回车,即可全部生成,完美!!!
    在这里插入图片描述

    展开全文
  • 先将所要生成的表格excel做出来,然后将其另存为xml形式(注意是xml格式),然后将其用记事本打开,截取表头(将表头文件中的行替换为*号或者某个特定符合,以备以后替换)和表尾的代码另存为.txt文件备用,中间...
  • 最近工作中碰到了需要将web页面的表格内容导出到excel表格并下载到本地的需求。以下是在利用网上资源、与同事探讨下,完成的代码。 首先我们需要有定义好的实体类。以下是截取了项目中用到的部分代码。 ...
  • 这周遇到一点小情况,同事需要将一份excel表格里的身份证和手机号隐去部分。 例如: [root@localhost ~]# cat ./id 张三 120108199001010023 13466666666 李四 120109189901010034 13800000000 需要做到如下效果: ...
  • python处理excel文件

    千次阅读 2017-12-28 18:45:09
    电子表格求和问题描述对如图中所示数据(截取部分,真实数据达100万行),对每一个timeid=xxxx,统计其对应记录第四列之和 最后输出如 timeid=xxxx sum这样的形式 分析 数据量非常大,不适合手动用excel自带的...
  • 但是这种方法只能截取有限的部分,如果数据的行数和列数都很多的话,就要把表格缩小,但是缩小再截图的话文字又看不清,怎么办呢? 下面教大家一个既简单又准确的方法从Excel表里截图,你除了需要在电脑上登录...
  • 最近有小伙伴有这样的需求,有一个excel表格,其中需要按照某一列中的数据,筛选出某一类相同的数据,然后将该类数据放到一起,还需要将该类数据数量进行统计。说起来有点抽象。我们来看一下具体数据。其中左侧的框...
  • 废话不多说,直接进入正题。 编写一个word模板 ... 使用notepad++打开,格式化下,这里只截取其中的一部分 找到需要替换的词,替换如下 替换如下 如果是表格,需要用到freemarke...
  • 10”,截取部分代码如下:StringBuilder outTable = new StringBuilder();...outTable.Append(@" <10 ");...string strHtml = HttpUtility.HtmlDecode(outTable.ToString());//Html解码byte...
  • Postman运行时批量导入测试...仅截取部分数据 正常不需要将常量写到excel文件中 使用转换工具将excel数据转换成json格式 postman只支持导入csv、json格式的数据,所以必须做转换 注意:只有一个变量时不适用该工具!最
  • 全书压缩打包成3部分,这是第2部分。 注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《Java Web开发实战1200例...
  • 全书压缩打包成3部分,这是第3部分。 注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《Java Web开发实战1200例...
  • (平均分1、平均分2就是部分实验班和普通班,全部按照实际人数统计的查询) (1)普通班: 去除末2人:语文1:(去除语文缺考,即0分名单,如需参与统计,可以再语文平均分、数学平均分...各科查询中查询条件做修改)...
  • 修改高级表格支持库在表格空白处(所有单元格之外)单击鼠标导致当前光标处单元格自动进入编辑状态的BUG。 14. 修改扩展界面支持库一,为“超级列表框”增加“检查框状态被改变”事件。 15. 修改扩展界面支持库一...
  • 13.采用前后分离技术,页面UI风格精美,针对常用组件做了封装:时间、行表格控件、截取显示控件、报表组件,编辑器等等 14.查询过滤器:查询功能自动生成,后台动态拼SQL追加查询条件;支持多种匹配方式(全匹配/...
  • 10.采用前后分离技术,页面UI风格精美,针对常用组件做了封装:时间、行表格控件、截取显示控件、报表组件,编辑器等等 11.查询过滤器:查询功能自动生成,后台动态拼SQL追加查询条件;支持多种匹配方式(全匹配/...
  • 全书压缩打包成2部分,这是第1部分。 注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《PHP开发实战1200例》分为...
  • 全书压缩打包成2部分,这是第2部分。 注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《PHP开发实战1200例》分为...
  • 实例057 设置表格的样式 84 实例058 模拟的进度条 86 3.3 超链接样式 87 实例059 鼠标单击文字超链接样式 87 实例060 鼠标滑过图片超链接样式 88 实例061 鼠标单击文字获得帮助效果 89 3.4 页面样式 ...
  • 实例057 设置表格的样式 84 实例058 模拟的进度条 86 3.3 超链接样式 87 实例059 鼠标单击文字超链接样式 87 实例060 鼠标滑过图片超链接样式 88 实例061 鼠标单击文字获得帮助效果 89 3.4 页面样式 ...
  • delphi 开发经验技巧宝典源码

    热门讨论 2010-08-12 16:47:23
    0118 使用Int函数返回实数的整数部分 80 0119 使用IntToStr函数将整数转换为字符串类型 80 0120 使用StrToInt函数将字符串转换成整数 81 0121 使用StrToBool函数将字符串转换为布尔类型 81 4.6 对话框函数...
  • 0118 使用Int函数返回实数的整数部分 80 0119 使用IntToStr函数将整数转换为字符串类型 80 0120 使用StrToInt函数将字符串转换成整数 81 0121 使用StrToBool函数将字符串转换为布尔类型 81 4.6 对话框函数...
  • 0118 使用Int函数返回实数的整数部分 80 0119 使用IntToStr函数将整数转换为字符串类型 80 0120 使用StrToInt函数将字符串转换成整数 81 0121 使用StrToBool函数将字符串转换为布尔类型 81 4.6 对话框函数...
  • 0118 使用Int函数返回实数的整数部分 80 0119 使用IntToStr函数将整数转换为字符串类型 80 0120 使用StrToInt函数将字符串转换成整数 81 0121 使用StrToBool函数将字符串转换为布尔类型 81 4.6 对话框函数...

空空如也

空空如也

1 2
收藏数 36
精华内容 14
关键字:

截取excel部分表格