VBA+批处理实现WORD转EXCEL数据分析开发日志

  • WORD程序转EXCEL并处理数据
    • 项目目的
    • 开发日志2020-09-01(批处理)
    • 开发日志V1.2.1 2020-09-05
      • 业务流程分以下几步:
      • 当前版主要的问题
      • 当前版次要的问题
    • 技术小结2020-09-05

WORD程序转EXCEL并处理数据

项目意义,通过将WORD中的信息处理为有序的EXCEL信息,进而与其他数据进行比对,实现大数据对比功能

项目目的

  • WORD信息有序提取到EXCEL;
  • 通过数据处理后的EXCEL与其他EXCEL信息进行交叉比对

开发日志2020-09-01(批处理)

WORD先另存为TXT,然后用批处理来处理TXT文本数据

  • 发现问题,WORD转成TXT后,换行符无法在DOS中识别,造成读取异常。
  • 用find或findstr只能显示找到的字符串及行号
  • 语法错误记录
    • 在循环中变量刷新要用感叹号而不是百分号:!var!
      且要设置setlocal enabledelayedexpansion
    • 变量赋值要使用SET VAR=XXX,而不是VAR=XXX
    • 字符串联合应用 SET str3=!str1!!str2!,而不是&

坑1:变量%VAR%在翻译的时候,如果有空格,会自带"",所以不用另外加,否则会出现两个""
坑2:FOR 中,需要加上usebackq 指令,以防止%filename%文件名中有空格,导致翻译时自带引号后,误将文件名称当成字符串。(如"12 3.txt",若不加usebackq,会被当成字符串处理)
主要代码:


FOR /F "usebackq eol=  tokens=1* delims=。" %%i in (%filename%) do (rem echo %%i>>%filename%.yset str_temp=%%iecho 当前指令:!str_temp!for /f "tokens=1" %%j in ("!str_temp!") do (rem echo %%jif !str1!=="" (if %%j==?  (set str1= !str_temp!rem call :debug))else (rem echo **********str1==!str1!rem call :debugif %%j==? (rem call :debugecho !str1!>>%filename%.yset str1= !str_temp!)else (set str1=!str1! !str_temp!)))
)

开发日志V1.2.1 2020-09-05

业务流程分以下几步:

  1. 将WORD程序导出为TXT文件(相对路径为WORDPATH\TXT) 2. TXT文件转换为EXECL文件
    1. 将TXT文件按指令行提取生成新文件(相对路径为WORDPATH\TXT\TXT2)
    2. 将TXT2中的文本导入EXCEL文件,并自动分离出ECS码和位置信息(相对路径为WORDPATH\导出EXCEL文件)
  2. 向EXCEL文件中添加SAP数据比对功能,生成自动对比后的EXCEL文件(相对路径为WORDPATH\导出EXCEL文件\自动比对后)

用户仅需顺次点击每个步骤对应的按钮,即可完成相应功能

当前版主要的问题

  • 第三步时,由于SAP数据量大,容易造成假死,进度条无法正常显示
  • 第三步,好像无法通过下列命令关闭 VBA输入Vlookup公式后的自动计算,导致卡
    Application.Calculation = xlCalculationManual
    Application.CalculateBeforeSave = False

当前版次要的问题

  • 没有做一键三联功能(好实现,如果启动一键,设置全局参数OneKeyStart as Boolean,在弹出MSGBOX前加判断,如果OneKeyStart =true, 则调用下一个功能,不弹对话框)
  • 步骤2,3是对指定文件夹下所有文件进行处理,反复运行时,或用户部分选择WORD程序更新时,原有文件会重复处理,或造成保存时提示冲突。可增加清理对应文件夹文件的按钮。后续可实现通过记录步骤1中的选择文件名称进行步骤2,3的继续处理,而不是通过文件系统遍历实现
  • 第3步添加公式用的是formula,不够简洁,可改用formuR1C1格式

技术小结2020-09-05

  1. 窗体操作

    1. 自定义进度条
      添加用户窗体,用累加器记录文件处理的进度,以百分数方式展示;
      进度条窗体模式必须是非独占的
    2. 窗体的显示模式
      UserForm1.Show(0) 非独占模式,允许后台代码自动运行
      UserForm1.Show(1) 独占模式,必须等窗体关闭或隐藏后才执行后续代码
      在设计窗体时,也可手动更改ShowModal属性实现
  2. 文件操作
    1. 手动获取文件列表
    FileSets = Application.GetOpenFilename _
    (filefilter:="Doc文件,*.doc", Title:="选择Doc文件", MultiSelect:=True)
    
    1. For EACH 循环实现文件遍历操作
    For Each FileName In FileSetscode
    Next FileName
    
  1. 用VBA打开WORD,并保存
    首先要在引用中选择Microsoft Word XX Object Library
Dim WordApp As Word.Application
Set WordApp = New Word.Application
Dim WordD As Word.Document
'Set WordD = WordApp.Documents.Add
Set WordD = WordApp.Documents.Open(FileName)
'另存后关闭文档,退出WORD应用
WordD.SaveAs2 FileName:=需要的文件名称 ‘其他参数略
WordD.Close
WordApp.Quit
  1. 用VBA打开EXCEL,并保存
Workbooks.Add ‘新建工作簿
ActiveWorkbook.Worksheets.Add ‘新建工作表
Workbooks.Open
ActiveWorkbook.SaveAs FileName:=”name”, FileFormat:= xlOpenXMLWorkbook
ActiveWorkbook.Close
  1. 文件遍历
'======获取EXCEL文件列表=======
Dim FileSets() As String  ‘动态数组用于包含查找到的文件名
arr = Dir(Range("EXCELPATH").Value & "*.xlsx") 'Dir()找到的第一个文件给arr
ReDim Preserve FileSets(1)  '动态数组非清空preserve,改变长度
If arr<>"" then FileSets(0) = arr '找到的第一个文件名称赋值给FileSets()第一个元素
i = 1
Do Until arr = ""arr = Dir  '重复执行该命令会顺序将DIR的结果输出到arrIf arr = "" Then Exit Do 'arr为空时说明dir输出结束ReDim Preserve FileSets(i) 'arr非空时FileSets()个数更新FileSets(i) = arri = i + 1
Loop
  1. 判断文件是否存在 (Err.Number = 9 表示文件已存在)
ChDir ThisWorkbook.Path
On Error Resume Next
Set WB1 = Workbooks(DATABASE)
If Err.Number = 9 Then  '如果DATABSE文件已经打开,则不二次打开Workbooks.Open DATABASE
End If
  1. EXCEL VBA交互
  1. 判断某列的最后一行
Dim EndR1, EndR2 As Integer
EndR1 = Range("A1048576").End(xlUp).Row
EndR2 = Range("A1").End(xlDown).Row
'2003版本最大行是65536,2007版本是1048576

可以看出EndR1和EndR2的区别,当列中有空格时,EndR1只能判断第一个空格以上的行数,EndR2可以判断整列最后一个非空单元格的行号

  1. 向单元格写入公式
    例如,向当前工作簿的C列写如VlookUP查找DataBase.xlsx中data页面A:H列
For i=1 to 100Range(“C1”).offset(i-1,0).FormulaR1C1 = _
"=VLOOKUP(RC[1],[DataBase]data!C[-2]:C[5],2,FALSE)"
Next i
  1. 停止页面刷新和自动计算
Application.ScreenUpdating = False  ‘停止页面刷新
Application.Calculation = xlCalculationManual  ‘手动计算
Application.CalculateBeforeSave = False ‘保存时更新计算,即使关闭,再打开时仍会计算刷新
  1. 多文件操作时,路径设置问题
Chdir(“D:\1\”)

VBA+批处理实现WORD转EXCEL数据分析开发日志相关推荐

  1. 【VBA】提取 Word|PPT|Excel 批注实例(Excel一键导入办公文档中的批注)

    VBAEXCEL多表合并批注整理 源文件,下载后可直接体验

  2. 在word、excel中如果运用VBA进行编程?

    VBA简介 VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言.主要能用来扩展Wi ...

  3. office文档管理服务器编辑,_卓正软件 - PageOffice官方网站 - 在线编辑Word、Excel的Office文档控件...

    Office 组件 在线显示.编辑.保存Word文档 √ √ √ 在线显示.编辑.保存Excel文档 √ √ √ 在线显示.编辑.保存PowerPoint文档 √ √ √ 在线播放PowerPoint ...

  4. Office(Excel、Word)二次开发——VSTO

    Office(Excel.Word)二次开发--VSTO Office(Excel.Word)二次开发--VSTO Office二次开发模式: 1) VBA(visual studio for app ...

  5. 点聚WebOffice在线编辑word、excel开发指南

    http://www.dianju.cn/forum/viewtopic.php?t=9249 WebOffice开发系列指南 WebOffice文档控件技术交流和版本发布 发表回复 17 篇帖子 • ...

  6. 《崔庆才Python3网络爬虫开发实战教程》学习笔记(5):将爬虫爬取到的数据存储到TXT,Word,Excel,Json等文件中

    本篇博文是自己在学习崔庆才的<Python3网络爬虫开发实战教程>的学习笔记系列,此套教程共5章,加起来共有34节课,内容非常详细丰富!如果你也要这套视频教程的话,关注我公众号[小众技术] ...

  7. 前端页面预览word_详解html实现在线预览word、excel、pdf等文件的功能(附代码)_WEB前端开发...

    JavaScript判断"字典"为空的方法_WEB前端开发 字典是一种存储键值对的数据结构,Javascript中的Object类内部即实现为一个字典,本文就来为大家介绍一下判断字 ...

  8. excel 调用barTender打印条码 VBA 调用BarTender打印标签BarTender二次开发 VBA 条码打印 VBA二维码打印 Excel条码打印 Excel二维码打印

    制造业使用二维码标签的原因有很多,以下是一些主要的原因: 1. 商品跟踪:二维码标签可让制造商和供应商跟踪货物的生产和出货情况.二维码中可以包含有关商品的所有必要信息,如生产日期.批次号.产品型号等. ...

  9. 开发技巧-使用SQL与Navicat快速导出一个自定义的MYSQL数据库字段表格(数据字典)为Word或Excel

    1.基于MYSQL快速形成数据字典表格(数据库字段表格元信息)的需求 在书写数据库开发文档或相关文章时,总是可能应用到所设计的数据库元信息,形成一个科学的数据字典表格,相比传统的在Word.Excel ...

最新文章

  1. 研究人员使用脑机接口从神经信号中重建单词
  2. c++向量和数组的区别_向量,矩阵和张量的导数 | 简单的数学
  3. !何为脏读、不可重复读、幻读
  4. 世界上任何一件事的五个模块
  5. IAR for AVR delay函数
  6. Python-Pandas
  7. library的英语怎么读音_如何让你的英语口音无限接近母语者?英语语音语调的独家训练方法...
  8. android用usb无法连接ubuntu13.10(vmware中安装ubuntu) lsusb找不到手机
  9. ubuntu 1804.1 升级失败:Hash Sum mismatch
  10. echart 地图 某个地区_「省份」Echart系列 | 绘制世界地图含中国各个省份(地图篇)(一) - seo实验室...
  11. 中国行政区域边界坐标(google)
  12. 大数据使用的5种主要数据挖掘技术
  13. 在使用QueryRunner时候的异常问题Wrong number of parameters:excepted 0,was given 10 Query
  14. 皮尔逊相关系数(Pearson Correlation)
  15. 【iOS取证篇】iOS设备进入DFU模式方法汇总
  16. 电脑桌面变窄屏,两端为黑色
  17. JSF Chapter11
  18. 如何使用HomePod和Apple TV 4K设置家庭影院音频?
  19. java如何保证mq一定被消费,RabbitMQ如何保证队列里的消息99.99%被消费?
  20. Metaverse 元宇宙入门-09-不断发展的用户 + 商业行为和元界

热门文章

  1. pythonturtle画小白兔_竟用Python画一只兔子?——turtle库circle()画圆函数的详细用法介绍...
  2. sklearn专题二:随机森林
  3. 三次蓝屏对内核崩溃日志的分析记录
  4. web全屏_当前的Web设计趋势:全屏全屏主页
  5. java定义一个类_Java类的定义格式:Java如何定义一个类
  6. 电脑调分辨率黑屏了怎么办_电脑分辨率调错了黑屏怎么调回来
  7. Linux中的地址空间以及I/O地址空间
  8. 喜报|探码科技荣获2022年度四川省“专精特新”中小企业认定
  9. 电镀蚀刻后线间余铜短路改善研究
  10. 四川农信分布式核心设计及验证项目成果专家评审会召开