Powershell — Workbook.OpenText с параметром FieldInfo

Я пытаюсь использовать Workbook.OpenText, передавая параметр FieldInfo, но безуспешно.

Я хочу открыть недавно созданный файл csv (я также пробовал с расширением txt) с параметром fieldinfo, чтобы я мог поместить текстовый формат в некоторые столбцы, но он продолжает выдавать мне следующую ошибку:

Вы не можете вызвать метод для выражения с нулевым значением.

Код

` $массив = @(Массив(Массив(1,1),Массив(2,1),Массив(3,1),Массив(4,1),Массив(5,1),Массив(6,1),Массив (7, 1), Массив (8, 1), Массив (9, 1), Массив (10, 2), Массив (11, 1))

    $MyWorkbook = $Excel.workbooks.OpenText($file,2,1,1,1,$True,$True,$True,$False,$False,$False,$False,$array)
    
    $MyWorksheet = $MyWorkbook.WorkSheets.item(1)

`

Большое спасибо за любую помощь г

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
0
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема, похоже, в том, что Excel, даже если вы укажете запятую в качестве разделителя полей, ВСЕГДА смотрит на что установлено в качестве системного ListSeparator.. Даже если вы укажете параметры «Другое» и «ДругоеChar» для использования запятой, все равно произойдет сбой и ожидается точка с запятой..

На моей голландской машине, для которой установлена ​​точка с запятой ;, поэтому, даже если в моем CSV-файле используются запятые, И я установил для параметра ниже значение Comma, Excel «переводит» это как то, что установлено в [cultureinfo]::CurrentCulture.TextInfo.ListSeparator

Для меня это работает, когда я использую символ точки с запятой в качестве разделителя во входном CSV-файле, поэтому мне нужно сначала изменить формат csv:

$Delimiter = [cultureinfo]::CurrentCulture.TextInfo.ListSeparator
$file = 'D:\Test\comma.csv'  # the original comma delimited csv
(Import-Csv -Path $file) | Export-Csv -Path $file -Delimiter $Delimiter -NoTypeInformation

Следующая проблема заключается в том, что метод OpenText(), похоже, ничего не возвращает, что объясняет сообщение об ошибке You cannot call a method on a null-valued expression

# define an array of two-element arrays, in which the first element is the column number (1-based), 
# and the second element is one of the XlColumnDataType constants specifying how the column is parsed.
# see: https://learn.microsoft.com/en-us/office/vba/api/excel.xlcolumndatatype
$FieldInfo = @(1, 1), @(2, 1), @(3, 1), @(4, 1), @(5, 1), @(6, 1), @(7, 1), @(8, 1), @(9, 1), @(10, 2), @(11, 1)

$Excel = New-Object -ComObject Excel.application
$Excel.DisplayAlerts = $false
$Excel.Visible = $true

# there are many parameters to the OpenText() method, but as we cannot use these as Named parameters
# we will have to provide all up to and including the FieldInfo parameter.
# note that for any variant parameter you wish to omit, we use [type]::Missing
$Excel.WorkBooks.OpenText($file,                # The absolute full file path
                          2,                    # Origin: xlWindows
                          1,                    # StartRow (default 1)
                          1,                    # DataType: xlDelimited
                          1,                    # TextQualifier: xlTextQualifierDoubleQuote
                          [type]::Missing,      # ConsecutiveDelimiter
                          [type]::Missing,      # Tab ($true if the file is Tab delimited; default = $false)
                          [type]::Missing,      # Semicolon ($true if the file is Semicolon delimited; default = $false)
                          [type]::Missing,      # Comma  ($true if the file is comma delimited; default = $false)
                          [type]::Missing,      # Space ($true if the file is space delimited; default = $false)
                          $true,                # Other ($true if the file delimited by the OtherChar; default = $false)
                          $Delimiter,           # OtherChar (Required if Other is True; Specifies the delimiter character)
                          $FieldInfo)

# now get the workbook and worksheet in variables
$MyWorkbook  = $Excel.WorkBooks.Item(1)
$MyWorkSheet = $MyWorkBook.WorkSheets.Item(1)

Другие вопросы по теме