2015-11-19 4 views
0

Я запускаю код ниже, чтобы конвертировать XLS в CSV, но получаю странную ошибку. Может ли кто-нибудь указать мне в правильном направлении, что может быть причиной этой проблемы? Я использую powershell v3.0. не знаю, чего я здесь не вижу.powershell XLS to CSV conversion issue

PARAM 
    (
     [parameter(Mandatory = $true)] 
     [string] 
     $excelFilePath = $(throw "Must give a valid Excel (*.xls) file path.") 
     , 

     [parameter(Mandatory = $true)] 
     [int] 
     $leadingRowsToDelete = $(throw "Must specify how many leading rows to delete.") 
     , 

     [parameter(Mandatory = $false)] 
     [string] 
     $csvFilePath = $null 
     , 

     [parameter(Mandatory = $false)] 
     [int] 
     $xlCSV = 6 
    ) 


    if(! $csvFilePath) 
    { 
     $csvFilePath = $excelFilePath -replace ".xls$", ".csv" 
    } 

    $Excel = New-Object -Com Excel.Application -Property @{Visible = $false} 
    $Excel.displayalerts=$False 

    $WorkBook = $Excel.Workbooks.Open($excelFilePath) # Open the file 
    $Sheet = $WorkBook.Sheets.Item(1) # Activate the first worksheet 

    # Delete the first $leadingRowsToDelete rows 
    for($i = 1; $i -le $leadingRowsToDelete; $i ++) 
    { 
     [void]$Sheet.Cells.Item(1, 1).EntireRow.Delete() # Delete the first row 
    } 

    $WorkBook.SaveAs($csvFilePath, $xlCSV) 

    $Excel.quit() 

тзд Ошибки, я получаю это:

Exception calling "Open" with "1" argument(s): "The server threw an exception. (Exception from HRESULT: 0x80010105 
(RPC_E_SERVERFAULT))" 
At \\multinasdub301\Software\SysAdmin\WebDownloads\XLS-To-CSV.ps1:74 char:1 
+ $WorkBook = $Excel.Workbooks.Open($excelFilePath) # Open the file 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : ComMethodTargetInvocation 

You cannot call a method on a null-valued expression. 
At \\multinasdub301\Software\SysAdmin\WebDownloads\XLS-To-CSV.ps1:75 char:1 
+ $Sheet = $WorkBook.Sheets.Item(1) # Activate the first worksheet 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

You cannot call a method on a null-valued expression. 
At \\multinasdub301\Software\SysAdmin\WebDownloads\XLS-To-CSV.ps1:80 char:2 
+  [void]$Sheet.Cells.Item(1, 1).EntireRow.Delete() # Delete the first row 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

You cannot call a method on a null-valued expression. 
At \\multinasdub301\Software\SysAdmin\WebDownloads\XLS-To-CSV.ps1:80 char:2 
+  [void]$Sheet.Cells.Item(1, 1).EntireRow.Delete() # Delete the first row 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

You cannot call a method on a null-valued expression. 
At \\multinasdub301\Software\SysAdmin\WebDownloads\XLS-To-CSV.ps1:80 char:2 
+  [void]$Sheet.Cells.Item(1, 1).EntireRow.Delete() # Delete the first row 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

You cannot call a method on a null-valued expression. 
At \\multinasdub301\Software\SysAdmin\WebDownloads\XLS-To-CSV.ps1:80 char:2 
+  [void]$Sheet.Cells.Item(1, 1).EntireRow.Delete() # Delete the first row 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

You cannot call a method on a null-valued expression. 
At \\multinasdub301\Software\SysAdmin\WebDownloads\XLS-To-CSV.ps1:80 char:2 
+  [void]$Sheet.Cells.Item(1, 1).EntireRow.Delete() # Delete the first row 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

You cannot call a method on a null-valued expression. 
At \\multinasdub301\Software\SysAdmin\WebDownloads\XLS-To-CSV.ps1:83 char:1 
+ $WorkBook.SaveAs($csvFilePath, $xlCSV) 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 
+0

Ваш код работает нормально с локальным файлом - я подозреваю, что проблема с правами на исходную папку или файл Excel. Как выглядит путь к исходному файлу? Это сетевой путь? – sodawillow

+0

Cheers @sodawillow да все отсортировано. Ты прав. Это проблема с пользователем. Я запускал скрипт на своей локальной машине. –

ответ

0

Согласно комментариям Op, в вопросе был вызван неисправными разрешениями на файл целевой Excel.

Скрипт отлично работает в локальном файле с полными разрешениями.