2017-03-14 76 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

相關問題