Новый объект возвращает пустой объект

Я пытаюсь расширить этот пример, используя модуль extarnal для вызова общих методов. Моя цель – создать новый файл xls и написать ему.

[Reflection.Assembly]::LoadWithPartialName("DocumentFormat.OpenXml") | Out-Null [Reflection.Assembly]::LoadWithPartialName("DocumentFormat.OpenXml.Packaging") [Reflection.Assembly]::LoadWithPartialName("DocumentFormat.OpenXml.Spreadsheet") [Reflection.Assembly]::LoadWithPartialName("OpenXmlPowerTools") Import-Module (join-path (Split-Path $MyInvocation.MyCommand.Path) "GenericMethods.psm1") $document = [DocumentFormat.OpenXml.Packaging.SpreadsheetDocument]::Create("C:\Temp\text.xlsx", [DocumentFormat.OpenXml.SpreadsheetDocumentType]::Workbook) $workbookPart = $document.AddWorkbookPart(); $workbookPart.Workbook = New-Object -TypeName DocumentFormat.OpenXml.Spreadsheet.Workbook $worksheetPart = Invoke-GenericMethod -InputObject $workbookPart -MethodName AddNewPart -GenericType DocumentFormat.OpenXml.Packaging.WorksheetPart $sheetData = New-Object -TypeName DocumentFormat.OpenXml.Spreadsheet.SheetData $worksheetPart.Worksheet = New-Object -TypeName DocumentFormat.OpenXml.Spreadsheet.Worksheet -ArgumentList $sheetData [DocumentFormat.OpenXml.Spreadsheet.Sheets]$foo = New-Object -TypeName DocumentFormat.OpenXml.Spreadsheet.Sheets Invoke-GenericMethod -InputObject $document.WorkbookPart.Workbook -MethodName AppendChild -GenericType DocumentFormat.OpenXml.Spreadsheet.Sheets -ArgumentList $foo $document.Close() 

Проблема в том, что этот фрагмент кода

 [DocumentFormat.OpenXml.Spreadsheet.Sheets]$foo = New-Object -TypeName DocumentFormat.OpenXml.Spreadsheet.Sheets Invoke-GenericMethod -InputObject $document.WorkbookPart.Workbook -MethodName AppendChild -GenericType DocumentFormat.OpenXml.Spreadsheet.Sheets -ArgumentList $foo 

throws error Invoke-GenericMethod : No matching method was found . Выдает, потому что New-Object создает что-то, что рассматривается как пустой массив функцией Invoke-GenericMethod . Таким образом, модуль ищет общие методы без параметров. Обратите внимание, что первый вызов Invoke-GenericMethod работает нормально.

Как мне вызвать Invoke-GenericMethod с параметром -ArgumentList ?

Проблема с вашим кодом заключается в том, что класс DocumentFormat.OpenXml.OpenXmlElement (базовый класс для DocumentFormat.OpenXml.Spreadsheet.Sheets ) реализует интерфейс IEnumerable . Это делает PowerShell интерпретировать любой экземпляр DocumentFormat.OpenXml.Spreadsheet.Sheets как сбор, а не особый объект.

Когда вы пишете только

 $foo 

PowerShell будет перечислять коллекции и отображать дочерние элементы (точнее, вы увидите дочерний элемент дочернего элемента, потому что командлеты форматирования обычно выполняют еще одно перечисление коллекций). И так как вы только что создали этот объект, он будет пустым и ничего не будет отображаться.

Чтобы фактически отобразить объект $foo , вам нужно написать его следующим образом:

 ,$foo | Format-Table -Expand CoreOnly 

или

 ,,$foo 

Тот факт, что PowerShell интерпретирует экземпляр DocumentFormat.OpenXml.Spreadsheet.Sheets как коллекции, также влияет на преобразование в [Object[]] (тип параметра -ArgumentList ). Вместо того, чтобы обертывать массив одиночных элементов (как вы хотите вызвать метод с единственным аргументом), как это происходит для особых объектов, PowerShell создает массив из элементов коллекции.

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

 -ArgumentList (,$foo) 
  • PowerShell: удалите модуль VBA из файла excel
  • Как скопировать ряд строк из файла excel в txt
  • Windows Powershell 2.0 - Как я могу прочитать ODBC из системного DSN в рабочий лист Excel 2007
  • Сценарий Powershell не продолжается, откуда он якобы остановился
  • Стоп для цикла перед пустой ячейкой
  • Создать / изменить таблицу Excel без использования объекта Com в PowerShell?
  • Как выполнить скрипт powershell из Excel?
  • Вставьте флажок и код VBA в Excel с помощью Powershell
  • Как преобразовать общее значение в формат даты
  • Вставка текста из текстового файла в существующий рабочий лист Excel с помощью PowerShell
  • Почему быстро записываются значения ячейки Excel в VBScript, но медленнее в PowerShell?
  • Interesting Posts

    Утверждение IF не оценивается правильно excel 2010 vba

    Множество аргументов Excel для функции AND

    Экземпляр сообщения сообщения об ошибке Excel выводит на ячейку

    Применение квадратичной привязки к неизвестным

    vlookup проблемы с копированием / вставкой

    Запись активного адреса ячейки в новом листе при нажатии кнопки

    Автоматический цветной цветной код

    Элементы управления ActiveX Excel не работают, «Не удается выйти из режима разработки», «Библиотека объектов недействительна»,

    заполнение данных из флажков пользовательской формы и дополнительных кнопок

    Как получить дату из ячейки в excel

    Макрос Excel для подсчета элементов в Outlook Общий почтовый ящик по дате

    Маркировка повторяющихся значений на основе дополнительной ячейки.

    Excel VBA: кнопки Toggle работают только по правому клику

    Virtuemart и автоматический импорт файла в моей базе данных

    Использование одного слайсера для управления двумя сводными таблицами с различным источником данных в Excel

    Давайте будем гением компьютера.