2017-12-18 22 views
1

Powershell 스크립트를 사용하여 수식을 Excel 테이블에 삽입합니다. 수식을 수동으로 입력하면 올바르게 작동합니다. 내가 $names 배열의 3 개 요소가 있다고 가정 :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++ 
} 

:. 첫 번째 셀은 정확한 값을 얻을 수 있지만, 공식 이름 (예 : 대신 =COUNT('Sheet2'!D:D)의 내가 =('Sheet2'!D:D)를 얻을, 다른 2 던져 0x800A03EC 예외없는 시트 나는 복사하여 붙여 넣기 값을 수동으로 인쇄하면 write-host $formula 수동으로, 그것은 예상대로 작동합니다.

또한 다른 시트를 참조하지 않는 경우 어떤 예외도 throw하지 않습니다. :

,423,210

UPDATE :

엑셀 2016에서 엑셀 2010과 관련된 문제처럼 보인다, 같은 코드는 잘 작동합니다.

+0

그 코드는 저에게 잘 작동합니다. 오피스 버전이 있어야합니다. – wp78de

답변

0

나는 당신의 접근 방식을 조롱하려고 다음과 같은 작업 코드를 내놓았다 한 : 나는 FormulaLocal 대신 Formula의를 사용하여 작동하도록 관리했습니다

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

이 코드에서는 다른 수식을 참조하지 않아도됩니다. 수식에 시트 참조가 포함되어있을 때만 문제가 발생합니다. 또한 첫 번째와 두 번째 수식 삽입이 다른 결과를 가질 수 있으므로 루프를 사용하는 이유입니다. – Thunderbeef

+0

나는 당신의 코드를 시도했고, 내가 직면했던 것과 똑같은 문제점을 가지고있다 : 첫번째 삽입은'= COUNT (Sheet1! D : D)'대신에 함수 이름 ('= (Sheet1! D : D) 함수가 올바르다 고해도 2 번째와 3 번째 삽입은'#NAME? '오류가 발생합니다. – Thunderbeef

0

. 여전히 Excel 2010의 버그라고 생각합니다. Formula은 Excel 2016에서 완벽하게 작동합니다. Excel에서 Excel 2010의 시트 참조를 포함하는 배열 수식을 삽입 할 수도 없습니다. FormulaLocal을 할당 한 다음 FormulaArray에 값을 할당하지 않습니다. 일하지 마라.