Hi,各位同学好!我是吴明课堂的答疑老师之一陈婉。祝大家一切顺利,平安快乐!

工作场景描述:

前几天有位同学说,他们公司需要分析系统产生的日志文件(.LOG格式,Ps. TXT格式文档解决方式与log格式一致),文件非常多,需要能批量选择待处理文件,将数据导入Excel并归置到不同列中,以便后续统计分析。

  • 日志文件如下图:

  • 日志文件格式内容如下图:

目标表格内容见下图:

VBA编码要实现的步骤解析:

1.  支持用户自主选择文件路径,支持批量选择和处理多个文件;

2. 将每个LOG日志文件的数据导入到Excel工作簿中,新建一个跟日志文件同名的工作表,用来存放同名LOG文件中的数据;

3. 删除头部多余的说明文字,处理;

4. 将导入工作表的数据进行拆分,使其放置到对应的列中;

5. 调整工作表的列宽以完整展示所有数据;

6. 在导入数据前先清除以前的旧数据;

7. 在第一个工作表上创建一个按钮用来触发程序。

详细代码展示:

​Option Explicit'主程序入口Sub MainFunc()    '删除除了程序入口(第一个工作表以外的其它所有工作表)    Call deleteDataSheets    '选择文件    Dim txtFullName As Variant, varType As String    txtFullName = Application.GetOpenFilename("请选择LOG文件,*.LOG", , "请选择待导入的日志文件", , True)    varType = TypeName(txtFullName)    If (varType = "Boolean") Then        Exit Sub    End If    Dim path As String, i As Integer    '循环处理所有选择的日志文件    For i = LBound(txtFullName) To UBound(txtFullName)        path = txtFullName(i)        Dim newSh As Worksheet        '新建工作表        Set newSh = newWorksheet(path)        newSh.Activate        '导入数据到工作表        Call ImportTxtData(path)        '处理当前激活工作表        Call DealWorkSheet(ActiveSheet)    Next i    End Sub'删除已有数据工作表Sub deleteDataSheets()    If (ThisWorkbook.Worksheets.Count > 1) Then        Dim i As Integer        Application.DisplayAlerts = False        For i = 1 To ThisWorkbook.Worksheets.Count - 1           ThisWorkbook.Worksheets(2).Delete        Next i        Application.DisplayAlerts = True    End IfEnd Sub'创建新工作表Function newWorksheet(pathName As String) As Worksheet    Set newWorksheet = ThisWorkbook.Sheets.Add(after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))    Dim sheetNames() As String    sheetNames = VBA.Split(pathName, "\")    newWorksheet.Name = sheetNames(UBound(sheetNames))End Function'导入日志文件中的数据Function ImportTxtData(pathName As String)    Dim str_txt() As String, line As Integer, i As Integer, txt As String    line = 1    Open pathName For Input As #1    Do While Not EOF(1)        Line Input #1, txt        Cells(line, 1).Value = txt        line = line + 1     Loop    Close #1End Function'处理工作表Function DealWorkSheet(sheet As Worksheet)    '删除指定行和列    Call deleteRowsAndCols(sheet)    '删除空行    Call deleteBlankRows(sheet)    '删除第一列中内容为END的行    Call deleteEndRow(sheet)    '处理表头,为分列做准备    Call dealFirstRow(sheet)    '分列,拆分每列数据到对应的单元格    Call splitColumns(sheet)    '宽度自适应    Call colAutoFit(sheet)End Function'删除第一列中内容为END的行Function deleteEndRow(sheet As Worksheet)    Dim endRng As Range    Set endRng = sheet.UsedRange.Columns(1).Find("END")    If (Not endRng Is Nothing) Then        endRng.EntireRow.Delete Shift:=xlUp    End IfEnd Function'删除空行Function deleteBlankRows(sheet As Worksheet)    sheet.Cells.SpecialCells(xlCellTypeBlanks).Select    Selection.Delete Shift:=xlUpEnd Function'分列Function splitColumns(sheet As Worksheet)    Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _        Semicolon:=False, Comma:=False, Space:=True, Other:=False, TrailingMinusNumbers:=TrueEnd Function'处理表头数据Function dealFirstRow(sheet As Worksheet)    Dim val As String    val = Range("A1").Value    val = VBA.Replace(val, "STATE  BLSTATE", "STATE_BLSTATE")    Range("A1") = VBA.Replace(val, "LMO    BTS", "LMO_BTS")End Function'宽度自适应Function colAutoFit(sheet As Worksheet)    sheet.Columns.AutoFitEnd Function'删除不需要的行和列Function deleteRowsAndCols(sheet As Worksheet)    '删除前8行    sheet.Rows("1:8").DeleteEnd Function

执行宏动态效果图:

编程方案点评:

编程的目的是为了实现自定义功能,需要先把业务逻辑每一步安排得清清楚楚,再通过所学语法和技巧使用代码去实现每一步。本质很简单。

编程基本技能:

  • Excel软件功能要熟悉,了解Excel软件有哪些功能,能完成哪些工作;

  • 基础语法要熟悉;

  • 学会通过API了解对象属性和方法,这个技能对利用好录制宏生成的代码至关重要;

  • 学会调试程序的方法,这个技能贯穿整个编程生涯,必须熟练掌握;

  • 对问题的了解和解决方案的步骤是基础要求,逻辑线要十分清晰,每个细节都要想明白。

案例文档下载链接:

链接:https://pan.baidu.com/s/1S8u9McbhIMzeo131dQlvgA

提取码:wmkt

准时下班系列_Excel合集之第9集—VBA导入文本文档数据相关推荐

  1. 准时下班系列_Excel合集之第6集—如何拆分和统计单据金额

    Hi,各位同学好!我是吴明课堂的答疑老师之一陈婉.祝大家一切顺利,平安快乐! 上周有个Excel学员给我截了如下一张图: 老板要求她把公司收到的所有单据录入到Excel中整理好,并核对金额准确性. 她 ...

  2. 准时下班系列_Access合集之第6集—多个项目窗体实现全选和反选功能

    Hi,各位同学好!我是吴明课堂的答疑老师之一陈婉. 当我们使用access默认生成的列表格式的窗体时,如何添加自定义的全选和反选功能呢? 本文将通过演示全选和反选功能的实现,教会大家如何在软件预设窗体 ...

  3. 准时下班系列_Access合集之第2集—三种方案批量上传图片到数据库,你会几种?

    Hi,各位同学好!我是吴明课堂的答疑老师之一陈婉.2022年到来了,祝大家一切安好! 今天是新年的第一天,在本期的职场应用案例分享之前,我想分享一个真实发生过的故事.(不感兴趣的同学可以直接跳到分隔线 ...

  4. @autowired注解_品Spring:对@Autowired和@Value注解的处理方法(文末附spring系列资源合集)...

    作者:编程新说李新杰 出自:微信公众号"编程新说" 原文:品Spring:对@Autowired和@Value注解的处理方法 在Spring中能够完成依赖注入的注解有JavaSE提 ...

  5. MyBatis 源码分析系列文章合集

    1.简介 我从七月份开始阅读MyBatis源码,并在随后的40天内陆续更新了7篇文章.起初,我只是打算通过博客的形式进行分享.但在写作的过程中,发现要分析的代码太多,以至于文章篇幅特别大.在这7篇文章 ...

  6. Arturia V Collection 9 for mac - Arturia系列合成器合集

    Arturia V Collection 9为大家收录了33种完美的音频合成器,在原先的系列合集的基础之上新增了KORG MS-20 V,SQ80 V,Augmented STRINGS,Augmen ...

  7. 统计案例 | 系列文章合集

    统计案例 | 系列文章合集 1 背景 2 统计案例系列文章合集(持续更新中) 1 背景 [统计案例] 系列文章,目的是通过一系列的实际案例(经典统计案例+小编实际参与的数据分析项目)来洞悉这些案例背后 ...

  8. 孤岛危机简体中文版 机器人_孤岛危机系列1-3合集|孤岛危机游戏全系列1-3合集简体中文版_ - 极光下载站...

    孤岛危机游戏全系列1-3合集中文版下载."孤岛危机"是一款科幻第一人称射击类的游戏.相信不少朋友都在玩这款"孤岛危机"的游戏.以下,小编为大家收集整理了&quo ...

  9. Audition 入门系列(合集)_MediaTea的博客-CSDN博客

    Audition 入门系列(合集)_MediaTea的博客-CSDN博客 https://photoshoptea.blog.csdn.net/article/details/108211969?sp ...

最新文章

  1. 如何用 Python 分析 14 亿条数据?
  2. static slice是什么呢?
  3. 自然语言处理ACL2020论文列表
  4. Mybatis使用时因jdbcType类型大小写书写不规范导致的异常
  5. 出现“Could not resolve host: www.github.com; Unknown error”错误解决
  6. GRPC java实现demo
  7. 【渗透技术】一个渗透测试工具人是怎样操作的
  8. oracle case when exists()
  9. Nginx支持比Apache高并发的原因
  10. IDEA导入Maven项目,pom.xml文件中 有inspects a maven model for resolution problems报错 !!!!!!!!!!有用
  11. 嵌入式Linux驱动笔记--转自风筝丶
  12. 从语言模型看Bert的善变与GPT的坚守
  13. Linux 上关于iptables
  14. 计算机命令提示符的使用,命令提示符(电脑系统命令提示符的打开方法)
  15. 下载导出自定义格式Excel文件
  16. 计算机网络学习-应用层笔记
  17. matlab自带的音乐,MATLAB乐器(如何用matlab演奏音乐)
  18. linux触摸板设置密码程序6,Touchegg:Linux上触摸板/屏的多指手势
  19. 全球便携式彩色超声设备行业收入预计2028年达到12.755亿美元
  20. 科技周刊第三期:人脸识别技术给我们带来的便利和风险

热门文章

  1. Ubuntu linux和android上安装使用obfsproxy给ssh加速
  2. smalldatetime
  3. 代购网站,京东哪些电商API比较火呢?
  4. STM32 DFU模式烧录代码
  5. 人工智能的未来:”脑机接口“
  6. html引入html
  7. 2019年小学计算机教室,2019-2020年小学信息技术第一册 认识新朋友教案 清华版.doc...
  8. 第九章、图形绘制——图形控件和图形方法的应用
  9. 【Python从零到壹】Python条件语句详解
  10. 更快更高更强——西数推出高品质存储解决方案闪迪大师品牌