Powershell: как получить формулу, не просматривая все строки и столбцы? - PullRequest
1 голос
/ 12 марта 2012

Вот мой пример кода:

$wb = $excel.ActiveWorkbook

ForEach ($ws in $wb.Worksheets) {
    "Working on {0}" -f $ws.Name
    forEach ($row in $ws.Rows) {
        forEach($cell in $row.Cells) {
            if ($cell.HasFormula) {
                $formula = $cell.Formula
                if ( ($formula -match "foobar") {                
                    "{0} R{1}C{2}:{3}" -f $ws.Name, $row.Row, $cell.Column, $formula
                }
            }
        }
    }
}

Производительность не очень хорошая, потому что таблица слишком большая. Я хочу

1) можно ли получить все формулы одним вызовом функции? Excel поддерживает это?

2) Если формула назначена массиву ячеек, как я могу извлечь формулу?

1 Ответ

2 голосов
/ 12 марта 2012

Может быть, эта ссылка может дать вам несколько советов, чтобы получить список формул на листе.

$excel = New-Object -com Excel.Application
$excel.Workbooks.Open( "C:\cartel1.xls" )
$sheet = $excel.Sheets.item(1) # select the sheet to looking for formulas
$cellsWithFormula = $sheet.Cells.SpecialCells( -4123 , 23) # (XlCellType constant, XlSpecialCellsValue constant) - Return a Range of cell with formula
$cellsWithFormula |  select row, column, formula, formulaArray | ft -autosize # get a list of cell and formula and formulaArray

примечание: тип константы xlCell

...