2016-03-24 14 views
1

Excelファイルにいくつかの機能を追加しています。 Excelファイルのリストは、$excelFilesという配列として関数に渡されます。以下に示すコードは進行中です(まだ実行していることはありません)。ここで配列から来た変数に二重引用符を追加する

Function CovertExcelFileToTextFiles ($excelFiles) 
{ 

    # create an Excel application object (fire off Excel in the background) 
    $excelApp = New-Object -ComObject Excel.Application 
    $excelApp.Visible = $false 
    $excelApp.DisplayAlerts = $false 

    # get first 3 letters of each file's name 
    foreach ($excelFile in $excelFiles) 
    { 
     $name = Split-Path $excelFile.FullName -Leaf #get filename only from full path 
     $prefix = $name.Substring(0,3) #get first 3 letters of filename 

     #look at contents of this variable 
     $excelFile 

     $wb = $excelApp.Workbooks.Open($excelFile)   
     foreach ($ws in $wb.Worksheets) 
     { 
      $n = $prefix + "_"+ $ws.Name 
      $n 
     } 
    } 
    $excelApp.Quit() 
} 

に表示されるエラーされています。これまでに書かれた(右のネストされたforeach前)$wb変数を設定します$excelFileで開催された文字列の前後に引用符が存在しないため、このコードは、失敗しているように見えますコンソール:$wbは、ハードコードさファイルパスに設定されている場合、コードは動作しますので、私は問題は引用符の欠如である疑いがある enter image description here

理由があります。

$wbを設定する行に入力する変数を二重引用符で囲む方法がわかりません。私は"$excelFile"を試してみました。エディタはその下に赤い波打ち線を置いていますので、それは許されません。私はまた、新しい変数を作成し、"$excelFile"でそれを設定し、それを$wb行のかっこに差し込みました。そのため、コンソールにもエラーが発生します。二重引用符はどのようにして$excelFileに置くことができますか?

答えて

0

引用符がないことは問題ではありません。ファイルをハードコーディングして引用符を使用すると、引用符はパーサに文字列であることを伝えます。文字列値の一部ではありません。

あなたは(つまり、$excelFilesの配列です?)データ型$excelFileが何であるかを知っておく必要があります。

$excelFile.FullNameの使用が正しい場合は、オブジェクトを扱っているようです。その場合

.Open()方法がありそう[String]を期待しているし、あなたがそれを渡しているオブジェクトを理解し、そうしようとはしません。

$wb = $excelApp.Workbooks.Open($excelFile.FullName) 

のこの種のトラブルシューティングを行うための良い方法PowerShell ISEを使用してブレークポイントを設定することです。

あなたの場合は、$wb = ...行にブレークポイントを設定して実行し、ブレークポイントがヒットしたら、その行で(実行前に)実行を停止します。

この時点で、コンソールを使用して実行中のコードのコンテキストで実行されるステートメントを実行できます。

$excelFile.GetType() 

または

$excelFile | Get-Member 

を、あなたが扱っているオブジェクトに関するいくつかのことを学ぶ:だから例えば、あなたは実行することができます。そのプロパティなどを見ることができます。:

あなたが呼び出しているメソッドのオーバーロードを見ることができます
$excelFile.FullName 

$excelApp.Workbooks.Open # <-- note no parentheses 
+0

はい、それはオブジェクトです。 '$ excelFile.FullName'はそれを修正しました! – knot22

+0

インラインコードスニペットはどのようにして作成しますか? – knot22

+0

@ knot22他の状況でこの問題を解決するのに役立つトラブルシューティングのヒントについては、私の編集を参照してください。 – briantist

関連する問題