Возврат ссылки на лист Excel из функции PowerShell - PullRequest
1 голос
/ 14 января 2020

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

Function Create-Excel-Spreadsheet() {
    # open excel
    $excel = New-Object -ComObject excel.application
    $excel.visible = $True

    # add a worksheet
    $workbook = $excel.Workbooks.Add()
    $xl_wksht= $workbook.Worksheets.Item(1)
    $xl_wksht.Name = 'Cut-off'   #give the worksheet a name

    #Create a Title for the first worksheet and adjust the font
    $title_row = 1
    $xl_wksht.Cells.Item($title_row, 1)= 'Cut-off Processing Ran ' + $startday + ' at ' + $starttime_str

    #merging a few cells on the top row to make the title look nicer
    $MergeCells = $xl_wksht.Range("A1:Q1")
    $MergeCells.Select() 
    $MergeCells.MergeCells = $true

    #formatting the title and giving it a font & color
    $xl_wksht.cells($title_row, 1).HorizontalAlignment = -4108   # center the title
    $xl_wksht.cells.Item($title_row,1).Font.Size = 18
    $xl_wksht.cells.Item($title_row,1).Font.Bold = $True
    $xl_wksht.cells.Item($title_row,1).Font.Name = "Cambria"
    $xl_wksht.cells.Item($title_row,1).Font.ThemeFont = 1
    $xl_wksht.cells.Item($title_row,1).Font.ThemeColor = 4
    $xl_wksht.cells.Item($title_row,1).Font.ColorIndex = 55
    $xl_wksht.cells.Item($title_row,1).Font.Color = 8210719
    $xl_wksht.cells.Item($title_row,1).Font.Color = 8210719
    $xl_wksht.Rows[$title_row].RowHeight = 39
    $xl_wksht.Rows[$title_row].VerticalAlignment = 2

    #create the column headers
    $header_row = 2
    $data_row_start = 3

    $xl_wksht.Rows[$header_row].WrapText = $True
    $xl_wksht.Rows[$header_row].Font.Bold = $True
    $xl_wksht.Rows[$header_row].columnWidth = 12.57
    $xl_wksht.Rows[$header_row].HorizontalAlignment = -4108

    $xl_wksht.cells.Item($header_row, 1).value2 = 'Current Load Date'
    $xl_wksht.Columns[1].HorizontalAlignment = -4108
    $xl_wksht.Columns[1].NumberFormat = "@"

    $xl_wksht.cells.Item($header_row, 2).value2 = 'Export File Type'
    $xl_wksht.Columns[2].columnWidth = 26

    $xl_wksht.cells.Item($header_row,3).value2 = 'File Name to Downloaded'
    $xl_wksht.Columns[3].columnWidth = 37

    $xl_wksht.cells.Item($header_row,4).value2 = 'Source Path'
    $xl_wksht.Columns[4].columnWidth = 23

    return $xl_wksht
}

1 Ответ

1 голос
/ 14 января 2020

Если вы хотите получить ссылку на рабочий лист, вы можете обновить свой код, чтобы ничего не печаталось / не возвращалось, кроме того, что вы ищете. В существующем состоянии вы возвращаете две переменные ..

$wksht = Create-Excel-Spreadsheet
  1. $wksht[0] -> Boolean (True)
  2. $wksht[1] -> ссылка на рабочий лист.

Второй индекс вашей возвращаемой переменной будет содержать ссылку на электронную таблицу, где first - просто логическое значение.

Это хорошее чтение от основателя powershell о том, почему это происходит .

Если вы возьмете свой код и выполните его, вы обнаружите, что перед печатью самого объекта $xl_wksht напечатан True. Вам нужно убедиться, что на экране больше ничего не печатается, кроме необходимой вам переменной / ссылки.

Измените эту строку в своем коде, и вы сможете получить ссылку.

    $MergeCells.Select() | Out-Null # line 17 of your code. Add | Out-Null. Or, Simply remove this line as it doesnt do anything.

после обновления кода вы можете использовать переменную для получения значения из вашего метода

    $wksht = Create-Excel-Spreadsheet
    $wksht.Cells(5, 1) = "Test"       // Writes Test on Row 5, Col 1.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...