sig*_*gil 1 c# excel excel-formula
我有一个工作表的Excel工作簿Sheet1和Sheet2,其中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!.
删除行后,有没有办法保留公式中的现有引用?我想我可以将所有公式复制到一个数组中,然后将它们重新复制到工作表中,但我最好还是希望它们不会在第一时间消失.
你想要做的是使用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