我正在尝试让Powershell查看某个单元格中是否有数据,因为如果为空,则无需采取任何措施。
这是我到目前为止的内容:
$Excel = New-Object -ComObject Excel.Application
$Workbook = $Excel.Workbooks.Open('MySheet.xlsx')
$workSheet = $Workbook.Sheets.Item(1)
$WorkSheet.Name
$column = 1
$row = 2
$info = $workSheet.cells.Item($row, $column).text
#$excel.Quit()
echo $info
$ info当然没有任何内容。
基本上,如果单元格A2为空,我将退出,否则我将发送电子邮件,等等。我想我想问我是否将$ info转换为字符串?
我试过了
If($info = "")
和
If($info -eq null)
但我想我现在要去哪里了。我如何告诉计算机“嘿,如果单元格A2中有东西,请执行此操作”
在此先感谢你的帮助。
该.text
检索小区的值的字符串。如果这不是你想要的,请使用.Value2
来获取单元格的基础值(可以是字符串,双精度数等)。
要解决你尝试过的问题If($info = "")
:
=
是一个赋值,而不是一个比较运算符,因此在这种情况下,你最好使用-eq
甚至更好If([string]::IsNullOrWhiteSpace($info))
此外,请记住,完成后需要从内存中删除使用的COM对象,否则最终这些对象将吞噬你的计算机内存。
你的代码已全部重写:
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false
$workbook = $excel.Workbooks.Open("D:\Test\MySheet.xlsx")
$workSheet = $Workbook.Sheets.Item(1)
$column = 1
$row = 3
$info = $workSheet.Cells.Item($row, $column).Text
if (-not [string]::IsNullOrWhiteSpace($info)) {
# cell was not empty, so do what you need to do with $info
write-host $info
}
# we're done, so quit Excel and clean-up the COM objects used
$workbook.Close()
$excel.Quit()
# cleanup COM objects
$null = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workSheet)
$null = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook)
$null = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
非常感谢。西奥!