Making Excel functions affect 'other' cells

前端 未结 6 1207
没有蜡笔的小新
没有蜡笔的小新 2020-12-03 13:07

Let\'s say that I create a Sub (not a function) whose mission in life is to take the active cell (i.e. Selection) and set an adjacent cell to some value. This works fine.

6条回答
  •  南方客
    南方客 (楼主)
    2020-12-03 13:47

    While you can't do this in Excel, it's possible in Resolver One (although it's still a pretty odd thing to do).

    It's a spreadsheet that allows you to define custom functions in Python that you can then call from a cell formula in the grid.

    As an example of what you're asking, you might want to define a safeDivide function that (instead of raising a ZeroDivisionError) told you about the problem by colouring the denominator cell, and putting an error message beside it. You can define it like this:

    def safeDivide(numerator, cellRange):
        if not isinstance(cellRange, CellRange):
            raise ValueError('denominator must be a cell range')
        denominator = cellRange.Value
        if denominator == 0:
            cell = cellRange.TopLeft
            cell.BackColor = Color.Red
            cell.Offset(1, 0).Value = 'Tried to divide by zero'
            return 0
        return numerator / denominator
    

    There's an extra wrinkle: functions that get passed cells just get passed the cell value, so to work around that we insist on being passed a one-cell cellrange for the denominator.

    If you're trying to do unusual things with spreadsheets which don't quite fit into Excel, or you're interested in using the power of Python to work with your spreadsheet data, it's worth having a look at Resolver One.

提交回复
热议问题