问题描述
我在 csv 文件中有数据,如下所示:
到目前为止,这允许我在它上面添加行
Set-Content -LiteralPath some.csv -NoNewLine -Value (
@'
New line 1 above header
New line 2 above header
'@ + (Get-Content -Raw some.csv)
)
所以上面的第 1 行和第 2 行都在第一列 “标题上方的新行 1” 和 “标题上方的新行 1” 其余数据保持原样(这是我想要的)。 我需要知道的是如何像我一直在做的那样添加一个新行,但我也希望能够添加到它旁边的其他列中。
所以假设第一个单元格中的第一行如上所示。 但现在在第一行的第二列,我想添加文字“任何东西都可以放在这里”。
理想输出
标题 | ||
---|---|---|
公司 1 地址 | 公司二地址 | |
公司 1 邮编 | 公司 2 邮编 | |
--------------------- | ------------------- | ------------------- |
标题 1 | 标题 2 | 标题 N |
--------------------- | ------------------- | ------------------- |
12 | 34 | Val M |
99 | 42 | Val Z |
编辑 1:我不知道为什么会出现额外的破折号,但我不想要
Set-Content -LiteralPath sample.csv -NoNewLine -Value (
@'
Title
From/De:,To/A:
Name1,Name2
Add1,Add2
Zip1,Zip2
'@ + (Get-Content -Raw sample.csv)
)
如果任何姓名或地址中包含逗号,将它们放在双引号内将转义它们。
解决方法
与其尝试操作原始 csv 文件,您还可以从 csv 导入数据,对其进行修改,然后再将其导出回 csv。
这样的事情可能会奏效:
$csv = @"
Heading 1,Heading 2,Heading N
12,34,Val M
99,42,Val Z
"@;
# use Import-Csv to read from a csv file instead
$data = @( $csv | ConvertFrom-Csv );
# output the original data so we can see what it looks like
$data
#Heading 1 Heading 2 Heading N
#--------- --------- ---------
#12 34 Val M
#99 42 Val Z
# create the new rows
$newRows = @(
(new-object PSCustomObject -Property ([ordered] @{
"Heading 1" = "first new row column 1"
"Heading 2" = "first new row column 2"
"Heading N" = "first new row column N"
})),(new-object PSCustomObject -Property ([ordered] @{
"Heading 1" = "second new row column 1"
"Heading 2" = "second new row column 2"
"Heading N" = "second new row column N"
}))
);
# add the new rows to the start of the data
$data = $newRows + $data;
# output the updated data we can see what it looks like now
$data
#Heading 2 Heading 1 Heading N
#--------- --------- ---------
#first new row column 2 first new row column 1 first new row column N
#second new row column 2 second new row column 1 second new row column N
#34 12 Val M
#42 99 Val Z
# export the new data back to the csv file
$data | Export-Csv -Path "some.csv" -NoTypeInformation;
注意 - 尝试操作原始 csv 文本的问题是,如果您的数据包含 "
或 ,
等语法字符或换行符,您可能无法正确转义它们,并且可能会损坏您的 csv 文件。