2015-09-30 2 views
1

Я использую следующий код командной строки для поиска документа excel для строки и возврата true или false в зависимости от того, найден ли его.Powershell find excel cell reference

if (test-path $filePath) { 
$wb = $xl.Workbooks.Open($filePath) 
if ([bool]$xl.cells.find("German")) {$found = 1} 
} 

Я хочу, чтобы иметь возможность получить ссылку на ячейку строки, если его нашли, но я не могу понять это или найти ответ на Google. Вы можете помочь?

ответ

3

Хотя существует метод поиска по всей книге для значения, обычно на рабочем листе выполняется Range.Find method. Вы устанавливаете var в рабочую книгу, но при этом используете приложение в качестве поиска. Вы должны получить рабочий лист для поиска из рабочей книги и использовать это как цель операции поиска.

Ниже приведены некоторые предлагаемые изменения для вашего PS1.

$filePath = "T:\TMP\findit.xlsx" 
$xl = New-Object -ComObject Excel.Application 
$xl.Visible = $true 
if (test-path $filePath) { 
$wb = $xl.Workbooks.Open($filePath) 
$ws = $xl.WorkSheets.item("sheet1") 
if ([bool]$ws.cells.find("German")) 
    { 
    $found = 1 
    write-host $found 
    write-host $ws.cells.find("German").address(0, 0, 1, 1) 
    } 
} 

Чтобы продолжить поиск всех вхождений не используйте Range.FindNext method пока вы не петлю обратно на исходный адрес ячейки.

$filePath = "T:\TMP\findit.xlsx" 
$xl = New-Object -ComObject Excel.Application 
$xl.Visible = $true 
if (test-path $filePath) { 
$wb = $xl.Workbooks.Open($filePath) 
$ws = $wb.WorkSheets.item("sheet1") 

$rc1 = $ws.cells.find("German") 
if ($rc1) 
    { 
    $found = 1 
    $addr = $rc1.address(0, 0, 1, 0) 
    do 
     { 
     $rc1 = $ws.cells.findnext($rc1) 
     write-host $rc1.address(0, 0, 1, 0) 
     } until ($addr -eq $rc1.address(0, 0, 1, 0)) 
    } 
} 

Трудно предоставить гораздо больше, чем общие сведения, поскольку столько вашего кода отсутствует. Я заполнил недостающую информацию своей собственной тестовой средой.

+0

Из вашего кода выше я не уверен, как это скажет мне ссылку на ячейку? – Silentbob

+0

Потребовалось некоторое время, чтобы найти правильные числовые параметры для свойства [Range.Address] (https://msdn.microsoft.com/en-us/library/office/ff837625.aspx). Я привык использовать его в VBA. – Jeeped

+0

Есть ли способ улучшить его, чтобы он каждый раз обнаруживал слово German? – Silentbob