PowerShell测试特定Excel单元格是否包含文本“条目编号”

zyfwsgd6  于 2023-10-22  发布在  Shell
关注(0)|答案(2)|浏览(99)

我正在测试一个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"
    }

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

dxxyhpgq

dxxyhpgq1#

这应该工作,没有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"
}
vfhzx4xs

vfhzx4xs2#

替换:
$worksheet.Cells["C2"].Value

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

注意事项:

  • 为了指定所谓的A1格式地址,例如C2(它引用第三列(C)和第二行(2)),必须使用参数化的.Range属性。
  • 相比之下,如果您使用相同语法的.Cells属性,则使用其参数化.Item属性,该属性仅接受(从1开始)行和列 numbers,因此等效表达式为.Cells(2, 3)(请注意,与A1格式不同,它首先出现的是 row number)。
  • 在这两种情况下,地址/行号和列号都是相对于输入对象的(即,给定的工作表或范围)。
  • 注意使用(...)而不是[...]
  • 不幸的是,文档显示的是后者,因为它们默认显示 C# 语法;通过主窗格顶部的命令行列表切换到VB显示了(...)的使用。
  • .Value(10)需要使用参数化的.Value属性返回具有最 * 类型保真度 * 的单元格值
  • 如果您不关心返回的货币和日期值,可以使用.Value2(无括号)。
  • 如果你想要一个 string 表示-不管实际的数据类型-使用.Text
  • 请参阅this answer了解更多信息。

一个完整的例子:

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

}

相关问题