提问人:Matt Helgeson 提问时间:10/7/2023 最后编辑:mklement0Matt Helgeson 更新时间:10/8/2023 访问量:49
PowerShell 测试特定的 excel 单元格(如果其中包含文本“条目号”)
PowerShell test a specific excel cell if it contains the text "entry number"
问:
我正在测试一个 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"
}
我尝试检查单元格的长度和值,但没有运气。我对任何最有效的方法都持开放态度。谢谢!!
答:
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 属性。C2
C
2
- 相比之下,如果使用
.Cells
属性具有相同的语法,其参数化为 .使用 Item
属性,该属性仅接受(从 1 开始)行号和列号,因此等效表达式将是(请注意,与 A1 格式不同,排号在前)。.Cells(2, 3)
- 相比之下,如果使用
在这两种情况下,地址/行号和列号都是相对于输入对象(即给定的工作表或范围)的。
请注意 的用法 而不是 :
(...)
[...]
- 不幸的是,文档显示后者,因为它们默认显示 C# 语法;通过主窗格顶部的下拉列表切换到 VB 显示了 的用法。
(...)
- 不幸的是,文档显示后者,因为它们默认显示 C# 语法;通过主窗格顶部的下拉列表切换到 VB 显示了 的用法。
.Value(10)
需要返回具有最大类型保真度的单元格值,使用参数化.Value
属性
一个完整的例子:
# 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()
}
评论