Warm tip: This article is reproduced from serverfault.com, please click

excel-检查电子表格中的单元格是否为空值

(excel - Checking a cell in a spreadsheet for blank values)

发布于 2020-11-25 19:00:05

我正在尝试让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中有东西,请执行此操作”

在此先感谢你的帮助。

Questioner
tellurye
Viewed
22
Theo 2020-11-28 19:00:48

.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()