如何使用“,”以外的分隔符将分隔文件加载到excel特定工作表中

时间:2017-03-14 22:54:05

标签: excel powershell

在PowerShell中,如何使用,之外的分隔符将分隔文件加载到Excel特定工作表中(例如,文件以;分隔)。

我知道如何使用以下方法将CSV文件加载到工作表中

$processes = Import-Csv -Path $csvFile 
$Excel = New-Object -ComObject Excel.Application
...

但是,这假定:

  1. 数据转到sheet1(我需要指定目标工作表名称,如果不存在则创建它)。

  2. 输入文件是CSV,在我的情况下,分隔符可能不是“,”。

  3. 我考虑在加载之前用,替换分隔符,但不知何故它看起来不整洁,因为逗号可能存在​​于文字内(例如c1;“two; strings”; c3)。

    我不是要求完整的代码,只是指针或引用会很好地为我服务。

2 个答案:

答案 0 :(得分:2)

使用Open()方法:

$file  = 'C:\path\to\file'
$undef = [Type]::Missing
$wb = $excel.Workbooks.Open($file, $undef, $undef, 6, $undef, $undef, $undef, $undef, ';')

OpenText()方法:

$file  = 'C:\path\to\file'
$undef = [Type]::Missing
$excel.Workbooks.OpenText($file, $undef, $undef, 1, $undef, $undef, $undef, $undef, $undef, $undef, $true, ';')
$wb = $excel.Workbooks.Item(1)

请注意,OpenText()方法不会返回工作簿对象,因此您必须在打开文件后自己将工作簿分配给变量。

另请注意,如果分隔符字符与系统区域设置中定义的分隔符不同,则文件的扩展名不得为.csv,否则分隔符将被忽略。

答案 1 :(得分:2)

您有两个问题,请让我们按顺序解决。

  

数据转到sheet1(我需要指定目标表名称和   如果没有那就创造它。)

然后指定表格,没有什么可以阻止你这样做。

$XL = New-Object -ComObject Excel.Application
$WB = $XL.Open("$env:USERPROFILE\Documents\SuperImportant.xlsx")
$WS = $WB.Worksheets.Items("MySheet")
$WS.Select()

如果不存在,需要制作吗?好的,先做个检查。

$XL = New-Object -ComObject Excel.Application
$WB = $XL.Open("$env:USERPROFILE\Documents\SuperImportant.xlsx")
If(!"MySheet" -in $WB.Worksheets.Name){
    $WB.Worksheets.Add("MySheet")
}
$WS = $WB.Worksheets.Items("MySheet")
$WS.Select()

好的,这个问题已经解决了。

  

输入文件是CSV,在我的情况下,分隔符可能不是","。

Ansgar Wiechers已经向您展示了如何将文件直接导入Excel,因此我将PowerShell作为代理方法。您可以使用Import-Csv将其导入PowerShell时指定。

$MyData = Import-Csv C:\Path\To\MyFile.csv -Delimiter ';'

然后您只需将其复制到剪贴板(作为制表符分隔的CSV)并将其粘贴到Excel中。

$MyData | ConvertTo-CSV -Del "`t" -NoType | Clip
$XL.ActiveCell.PasteSpecial()