[原创] [置顶] Windows 打印日志数据提取(Excel VBA 数据提取)
阿炳哥 2022.6.29 11:55 浏览(版权声明:本文为博主原创文章,未经博主允许不得转载。
公司用一台windows server服务器作为打印服务器,开启打印日志记录之后,客户端打印操作都会在服务器上有记录。为了统计每个人每个月打印量(用纸量)需要将windows的日志提取出来汇总。具体的日志开启方式及导出方法这里就不赘述了,有需要的可以上网搜寻。
将日志导出为XML文档,用EXCEL打开之后是这个样子,圈出来的部份就是待会要提取的内容
要用VBA来提取数据,解决思路也很简单,将所有单元格从上到下循环一遍取出想要的内容即可。
点工具栏上的“开发工具“,点”visusl Basic“.
如果“工具栏“上没有“开发工具“这一项。在” 工具栏“空白处点右键,选”自定义功能区,“
将”开发工具”勾选上,工具栏上就会显示
打开”visusl Basic“之后点当时工作簿,点”右键““插入“”模块“
将以下代码复制黏贴到“模块“中
Option Explicit
Public Sub 打印记录数据提取()
Dim ScoreSheet As Worksheet
Dim n As Long
Dim sheetName As String
Dim Sht As Worksheet
Dim newrow As Long
newrow = 0
Dim PrintDate, str As String
Dim 打印时间 As Date
Dim 姓名 As String
Dim 电脑名称 As String
Dim 打印数量 As String
sheetName = InputBox("请输入工作表名称")
If Len(sheetName) <> 0 Then
Set ScoreSheet = Sheets("Sheet1")
Dim i, k, SystemTimeColumnNo, UserNameColumnNo, ComputerNameColumnNo, PrintCountColumnNo, KeywordColumnNo As Integer
Dim Keyword As String
i = 1
k = 1
Do
Keyword = ScoreSheet.Cells(1, i).Value
KeywordColumnNo = i
i = i + 1
Loop While Keyword <> "ns1:Keyword" '找出ns1:Keyword所在的列数
For n = 1 To KeywordColumnNo
If ScoreSheet.Cells(1, n).Value = "SystemTime" Then
SystemTimeColumnNo = n '找出打印时间所在的列数
End If
If ScoreSheet.Cells(1, n).Value = "ns2:Param3" Then
UserNameColumnNo = n '找出姓名所在的列数
End If
If ScoreSheet.Cells(1, n).Value = "ns2:Param4" Then
ComputerNameColumnNo = n '找出电脑名称所在的列数
End If
If ScoreSheet.Cells(1, n).Value = "ns2:Param8" Then
PrintCountColumnNo = n '找出打印数量所在的列数
End If
Next n
Set Sht = Worksheets.Add(after:=Worksheets(Worksheets.Count)) '新增一个工作表
Sht.Name = sheetName
'定义工作表的列名
Sht.Cells(1, 1).Value = "打印时间"
Sht.Cells(1, 2).Value = "姓名"
Sht.Cells(1, 3).Value = "电脑名称"
Sht.Cells(1, 4).Value = "打印数量"
Do
str = ScoreSheet.Cells(k, KeywordColumnNo).Value
If (str = "文档打印作业") Then
PrintDate = ScoreSheet.Cells(k, 9).Value
PrintDate = Format(Left(PrintDate, 10) + " " + Mid(PrintDate, 12, 8), "dd/mm/yy hh:mm:ss") '提取时间
打印时间 = CDate(PrintDate) + TimeValue("08:00:00") '将格林威治时间改变成北京时间
姓名 = ScoreSheet.Cells(k, UserNameColumnNo).Value
电脑名称 = ScoreSheet.Cells(k, ComputerNameColumnNo).Value
打印数量 = ScoreSheet.Cells(k, PrintCountColumnNo).Value
Sht.Range("A2").Offset(newrow, 0).Value = 打印时间
Sht.Range("A2").Offset(newrow, 1).Value = 姓名
Sht.Range("A2").Offset(newrow, 2).Value = 电脑名称
Sht.Range("A2").Offset(newrow, 3).Value = 打印数量
newrow = newrow + 1
End If
k = k + 1
Loop While Len(ScoreSheet.Cells(k, 1).Value) <> 0
End If
End Sub
运行VBA程序
输入工作表名称点“确定“
Excel 生成一个新的工作表,结果正是我们想要的。
本文链接 https://www.mangoxo.com/blog/8o12YlxK 版权所有,转载请保留地址链接,感谢!
☺
加载评论中