Я пытаюсь использовать 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)
`
Большое спасибо за любую помощь г
Проблема, похоже, в том, что 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)