excel - 在 powershell 中使用 excel com 对象提取单元格值的问题
问题描述
我正在编写一个脚本,用于扫描 Excel 文件中的每个单元格以查找 PII。我已经完成了大部分工作,但我遇到了两个可能相关的问题。
首先,我不相信“Do”循环按预期执行。这里的目标是,如果单元格中的文本与正则表达式字符串匹配,则使用位置信息创建一个 PSCustomObject,然后使用该对象向 csv 文件添加一行。
似乎循环正在为每个文件运行,无论它是否实际找到匹配项。
另一个问题是我似乎无法真正提取匹配单元格的单元格值。我尝试了几种不同的变量和方法,最近的尝试是“$target.text”,但变量的值始终为空。
这几天我一直在绞尽脑汁,但我相信一旦我看到它就会很明显。
这里的任何帮助将不胜感激。
谢谢。
$searchtext = "\b(?!0{3}|6{3})([0-6]\d{2}|7([0-6]\d|7[012]))([ -]?)(?!00)\d\d\3(?!0000)\d{4}\b"
$xlsFiles = Get-ChildItem $searchpath -recurse -include *.xlsx, *.xls, *.xlxm | Select-object -Expand FullName
$Excel = New-Object -ComObject Excel.Application
$excel.DisplayAlerts = $false;
$excel.AskToUpdateLinks = $false;
foreach ($xlsfile in $xlsfiles) {
Write-host (Get-Date -f yyyymmdd:hhmm) $xlsfile
try{
$Workbook = $Excel.Workbooks.Open($xlsFile, 0, 0, 5, "password")
}
Catch {
Write-host $xlsfile 'is password protected. Skipping...' -ForegroundColor Yellow
continue
}
ForEach ($Sheet in $($Workbook.Sheets)) {
$i = $sheet.Index
$Range = $Workbook.Sheets.Item($i).UsedRange
$Target = $Sheet.UsedRange.Find($Searchtext)
$First = $Target
Do {
$Target = $Range.Find($Target)
$Violation = [PSCustomObject]@{
Path = $xlsfile
Line = "SSN Found" + $target.text
LineNumber = "Sheet: " + $i
}
$Violation | Select-Object Path, Line, LineNumber | export-csv $outputpath\$PIIFile -append -NoTypeInformation
}
While ($NULL -ne $Target -and $Target.AddressLocal() -ne $First.AddressLocal())
}
$Excel.Quit()
}
解决方案
弄清楚了。只是循环中逻辑错误的一个简单案例。感谢所有看到这个的人。
推荐阅读
- dictionary - 删除 LinkedHashMap 中的前半部分条目而不是循环
- python - os.getenv 在 vs code + jupyter 下不起作用
- feature-selection - 使用 ANOVA 和 LASSO 进行特征选择
- python - 玩家不动,计时器不工作
- reactjs - Enzyme:如何测试容器组件的 props 变化?
- ansible - Ansible 2.9.21:在 shell 命令中添加了不需要的转义字符“\”
- android - Google App 从 apk 更改为 app-bundle 并在 Internal Test Track 上发布,但只能找到/下载最新的 apk 版本
- python - 如何使 asyncio cancel() 实际取消任务?
- c++ - TCP 客户端不会自动连接到服务器
- scala - Lagom - 在服务调用组合中添加响应头