2017-12-18 20 views
1

何らかの理由により、Powershellスクリプトを使用して数式をExcelテーブルに挿入しています。数式を手動で入力すると正常に動作します。私は=('Sheet2'!D:D)、および他の2スロー0x800A03EC例外を取得まずセルが正しい値を取得しますが、式の名前など(不足している代わりに=COUNT('Sheet2'!D:D)のシート:Powershellを使用して別のワークシートを参照する数式を挿入できません

$excel = New-Object -ComObject excel.application 
$excel.visible = $true 
$workbook = $excel.Workbooks.Add() 

$names = @() 
foreach ($i in 1,2,3) { 
    $ws = $workbook.Worksheets.Add() 
    $names += $ws.Name 
} 

$i = 1 
foreach ($sheet in $names) { 
    $formula = "=COUNT('$sheet'!D:D)" 
    write-host $formula 
    $excel.cells.item($i, 1).Formula = $formula 
    $i++ 
} 

何が起こること:私は$names配列の3つの要素があるとします。私は、私はコピー&ペーストの値は手動でwrite-host $formulaによって印刷場合に予想されるとして、それが動作するためdefinetely、存在参照。

また、私は別のシートを参照しない場合は正常に動作するようです。以下のコードは、例外をスローしません。 :

$formula = "=COUNT(D:D)" 
$excel.cells.item($i, 1).Formula = $formula 

UPDATE:

はエクセル2016でエクセル2010に固有の問題のように思える、同じコードが正常に動作します。

+0

そのコードは私のためにうまく動作します、あなたのOfficeバージョンで何かでなければなりません。 – wp78de

答えて

0

私はあなたのアプローチを模擬しようとしたし、次の作業のコードを思い付いています

foreach($ws in $b.Sheets) { 
    $ws.Cells.Item(1,1).Formula = "=COUNT($($ws.Name)!D:D)" 
} 
+0

注:このコードでは、COMオブジェクトを正しく削除するよう注意してください。https://stackoverflow.com/a/46269778/8291949 – wp78de

+0

このコードでは、別のシートを参照していません。数式にシート参照が含まれている場合にのみ問題に遭遇します。また、1番目と2番目の式の挿入が異なる結果を持つ可能性があることに注意してください。これがループを使用した理由です。 – Thunderbeef

+0

私はあなたのコードを試して、私が直面していたのとまったく同じ問題を抱えていました。最初の挿入は、 '= COUNT(Sheet1!D:D)'の代わりに関数名( '=(Sheet1!D:D)関数が正しいように見えても、2番目と3番目の挿入は '#NAME? 'エラーとなります。 – Thunderbeef

0

私はそれがFormulaLocal代わりのFormulaを使用して動作させることができました。 Excel2006でFormulaが完璧に正常に動作するため、Excel 2010のバグだと思っています。ExcelからExcel 2010でシート参照を含む配列式を挿入することはできません。FormulaLocalを割り当ててから doesn仕事はありません。

関連する問題