删除行时,防止Excel删除公式中的引用

sig*_*gil 1 c# excel excel-formula

我有一个工作表的Excel工作簿Sheet1Sheet2,其中Sheet2有一个是指在价值公式Sheet1如下:

+-----------+------------+
|  address  |   value    |
+-----------+------------+
| Sheet1!A1 | 1          |
| Sheet1!B1 | 3          |
| Sheet1!C1 | 5          |
| Sheet2!A1 | =Sheet1!A1 |
| Sheet2!B1 | =Sheet1!B1 |
| Sheet2!C1 | =Sheet1!C1 |
+-----------+------------+
Run Code Online (Sandbox Code Playgroud)

如果我删除第1行Sheet1,使用以下C#interop:

thisRange["a1"].EntireRow.Delete()
Run Code Online (Sandbox Code Playgroud)

然后所有公式都设置为错误,例如=Sheet1!#REF!.

删除行后,有没有办法保留公式中的现有引用?我想我可以将所有公式复制到一个数组中,然后将它们重新复制到工作表中,但我最好还是希望它们不会在第一时间消失.

Bra*_*d M 6

你想要做的是使用Sheet2中的INDIRECT引用.这些保持不变并且不会抱怨如果移动或删除单元格或行,它们将可靠地保持指向相同的引用.

因此,在您的示例中,Sheet2值变为:

+-----------+------------------------+
|  address  |          value         |
+-----------+------------------------+
| Sheet2!A1 | =INDIRECT("Sheet1!A1") |
| Sheet2!B1 | =INDIRECT("Sheet1!B1") |
| Sheet2!C1 | =INDIRECT("Sheet1!C1") |
+-----------+------------------------+
Run Code Online (Sandbox Code Playgroud)

我将把它留给读者来使参考文本更具动态性(例如"Sheet1!A"和ROW()).请参阅https://superuser.com/questions/316239/how-to-get-the-current-column-name-in-excel