PowerShell 测试特定的 excel 单元格(如果其中包含文本“条目号”)

PowerShell test a specific excel cell if it contains the text "entry number"

提问人:Matt Helgeson 提问时间:10/7/2023 最后编辑:mklement0Matt Helgeson 更新时间:10/8/2023 访问量:49

问:

我正在测试一个 Excel 文件,以查看单元格 C2 是否包含文本“条目号”。如果它确实执行了一个操作,则执行其他操作。

# $Invoice3 = $worksheet.Cells["C2"].Value
$test2 = "C:\Test\samplefile.xlsx"

$be = $test1[2].col2  

#$characterCount = $InvoiceC3.Length
# Check if cell C2 contains the text "Entry Number"
 if ($be -eq "Entry Number") {
    Write-Host "It does contain Entry Number"}
    else {
    Write-Host "It does not contain Entry Number"
    }

我尝试检查单元格的长度和值,但没有运气。我对任何最有效的方法都持开放态度。谢谢!!

Excel PowerShell IF- 条件语句

评论


答:

0赞 YourWishIsMine 10/7/2023 #1

这应该可以工作,不要安装 excel 进行测试。

$ExcelObj = New-Object -comobject Excel.Application # Register Excel Object
$ExcelWorkBook = $ExcelObj.Workbooks.Open(".\Book.xlsx") # Load a Workbook
$ExcelWorkSheet = $ExcelWorkBook.Sheets.Item("Sheet1") # Get a specific sheet
$cell = "B2" # Placeholder for what cell we want
$cellValue = $ExcelWorkSheet.cells.Item($cell).text # Get contents of that cell
if ($cellValue -eq "Entry Number") {
    Write-Host "It does contain Entry Number"}
else {
    Write-Host "Not there"
}
0赞 mklement0 10/7/2023 #2

取代:

$worksheet.Cells["C2"].Value

$worksheet.Range("C2").Value(10) # or .Text, to get a string value

注意:

  • 为了指定所谓的 A1 格式地址,例如(它指的是第三列 () 和第二列 () 行),参数化 .必须使用 Range 属性。C2C2

    • 相比之下,如果使用 .Cells 属性具有相同的语法,其参数化为 .使用 Item 属性,该属性仅接受(从 1 开始)行号和列,因此等效表达式将是(请注意,与 A1 格式不同,排号在前)。.Cells(2, 3)
  • 在这两种情况下,地址/行号和列号都是相对于输入对象(即给定的工作表或范围)的。

  • 请注意 的用法 而不是 :(...)[...]

    • 不幸的是,文档显示后者,因为它们默认显示 C# 语法;通过主窗格顶部的下拉列表切换到 VB 显示了 的用法。(...)
  • .Value(10)需要返回具有最大类型保真度的单元格值,使用参数化 .Value 属性

    • 如果您不关心要返回的货币和日期值,则可以使用 .Value2(无括号)。

    • 如果想要字符串表示形式 - 无论实际数据类型如何 - 请使用 .文本

    • 有关详细信息,请参阅此答案


一个完整的例子:

# Note: Be sure to specify a *full path*, because COM's working directory
#       usually differs from PowerShell's
#       To use a relative path, pass it to the Convert-Path cmdlet, e.g.:
#          Convert-Path .\samplefile.xlsx
$xlFile = 'C:\Test\samplefile.xlsx'

# Note: & { ... } executes the code in a *child scope*, which 
#       ensures that all COM object references are properly released
#       after calling $xl.Quit(), thereby causing the Excel process to exit.
& {

  # Create the Excel object (this starts a hidden excel.exe process)
  $xl = New-Object -ComObject Excel.Application

  # Get the first worksheet.
  $worksheet = $xl.Workbooks.Open($xlFile).Worksheets(1)

  # Test the value of cell C2 for containing the text 'Entry Number'
  if ($worksheet.Range('C2').Text -eq 'Entry Number') {
    'It does contain Entry Number'
  else {
    'It does not contain Entry Number'
  }

  # Tell the Excel process to quit.
  $xl.Quit()

}