2017-03-14 72 views
2

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

我知道如何加载一个CSV文件导入到一个表中使用:

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

然而,这种假设:

  1. 的数据将进入到工作表Sheet1(我需要指定的靶纸名称并创建它,如果不存在的话)。

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

我认为与负载之前,更换分隔符,但不知何故,它看起来并不整齐,因为逗号可能里面的文字存在(例如C1;“两;字符串”; C3)。

我不是要求完整的代码,只是一个指针或引用将为我服务。

回答

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,否则分隔符将被忽略。

+0

我不知道'$ undef'这样的用法。对于任何使用任何Office interop的人来说,这都是非常棒的信息。 – TheMadTechnician

+0

谢谢你的明确示例。几年前,当我必须从VB6调用Excel时,我使用了类似的代码......至少有些东西没有改变! – NoChance

2

你有两个问题,所以让我们按顺序解决它们。

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

因此,然后指定工作表,没有什么阻止你这样做。

$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() 
+0

谢谢你的清晰解释。我喜欢你清晰的编码方式。我发现将数据复制到剪贴板使代码更容易,但我不确定这是否会在我得到大文件的情况下工作。再次非常感谢你。 – NoChance

相关问题