Powershell выбрать всю строку с уже открытой рабочей таблицей Excel - PullRequest
0 голосов
/ 18 марта 2019

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

Function open_bible_file
{


$Excel = New-Object -ComObject excel.application

$Excel.WindowState= "xlMaximized"

$Excel.visible = $true

$WorkBook = $Excel.Workbooks.Open($SCOMBibleFile)

$Worksheet = $Workbook.WorkSheets.item("(1) Alerts")

$worksheet.activate()

$Range = $Worksheet.Cells.Item($excelrow,1).EntireRow

[void]$Range.Select()
}

}

Открывает файл и выбирает строку как следует. Но когда я снова использую эту кнопку, она просто открывает Excel еще раз и снова выбирает другую строку. Когда я пытался сделать еще одну кнопку, чтобы просто выбрать строки, он ничего не знает о уже открытых рабочих листах. Как я могу обойти это?

1 Ответ

0 голосов
/ 19 марта 2019

Код должен проверять, запущен ли уже Excel и, если да, присутствует ли рабочая книга (файл $SCOMBibleFile). В этом случае повторно активируйте Excel, в противном случае запустите новый экземпляр.

Это должно работать:

function open_bible_file {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory = $true, Position = 0)]
        [string]$Path,

        [Parameter(Mandatory = $false, Position = 1)]
        [int]$RowToSelect = 1
    )

    $WorkBook = $null
    # check if Excel is already open
    try {
        # Note: this only gets the excel instances that were started 
        #       by the same user that runs this powershell function.
        $Excel = [Runtime.Interopservices.Marshal]::GetActiveObject('Excel.Application')
        # test if the $Path workbook is present in this Excel instance
        foreach ($wb in $Excel.Workbooks) {
            if ($wb.FullName -match [regex]::Escape($Path)) {
                $WorkBook = $wb
                break
             }
        }
    }
    catch {
        # Excel wasn't opened yet, create a new instance
        $Excel = New-Object -ComObject Excel.Application
    }

    if (!($Excel))    { Write-Error "Error opening Excel"; return }

    if (!($WorkBook)) { 
        $WorkBook = $Excel.Workbooks.Open($Path)
    }

    # see https://docs.microsoft.com/en-us/office/vba/api/excel.xlwindowstate
    $xlMaximized = -4137

    $Excel.Visible = $true
    $Excel.WindowState = $xlMaximized
    $Excel.ActiveWindow.Activate()

    $Worksheet = $Workbook.WorkSheets.item("(1) Alerts")
    $worksheet.activate()
    $Range = $Worksheet.Cells.Item($RowToSelect, 1).EntireRow
    [void]$Range.Select()
}


$SCOMBibleFile = '<PATH TO YOUR .xlsx FILE>'
open_bible_file -Path $SCOMBibleFile -RowToSelect 3

Как видите, я изменил функцию open_bible_file для получения параметров. Первый (-Path) - это то, где вы указываете имя файла для открытия. Второй (-RowToSelect) - номер строки, которую вы хотите выбрать.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...