设置范围的值时不评估Excel命令

时间:2012-11-02 16:32:26

标签: vb.net excel

我正在尝试使用多维字符串数组来填充excel表,并在插入公式时遇到麻烦。以下小案例说明了问题:

Dim tA(3, 3) As String
tA(1, 1) = "=HYPERLINK(""www.stackoverflow.com"")"
tA(1, 2) = "=HYPERLINK(""www.stackexchange.com"")"
tA(2, 1) = "=2+5"
tA(2, 2) = "Normal Text"
worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).Value = tA

评估此代码时,Excel工作表不会自动转换超链接或评估公式。也就是说,当我查看Excel时,(2,1)处的单元格将根据需要显示“= 2 + 5”而不是“7”。有没有办法强制excel评估所有单元格以查看命令是否存在?

我应该注意,如果我将一个命令插入到单个单元格中,那么它就会被正确评估,但这不是一个选项,因为我有数千个单元格并且每次填充一个单元格要慢几个数量级。

2 个答案:

答案 0 :(得分:4)

你得到了,因为公式作为值传输,在代码中添加以下行,你应该好好去:

worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).formular1c1= worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).formular1c1

完整代码将是

Dim tA(3, 3) As String
tA(1, 1) = "=HYPERLINK(""www.stackoverflow.com"")"
tA(1, 2) = "=HYPERLINK(""www.stackexchange.com"")"
tA(2, 1) = "=2+5"
tA(2, 2) = "Normal Text"
worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).Value = tA
worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).formular1c1= worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).formular1c1

答案 1 :(得分:1)

...这有点像黑客,但我过去成功使用过它......

将公式中的“=”替换为您不会使用的其他字符(我通常使用“#”,但您可以使用任何东西)然后使用替换。

您的代码如下所示:

Dim tA(3, 3) As String
tA(1, 1) = "#HYPERLINK(""www.stackoverflow.com"")"
tA(1, 2) = "#HYPERLINK(""www.stackexchange.com"")"
tA(2, 1) = "#2+5"
tA(2, 2) = "Normal Text"
Sheets(1).Range(Sheets(1).Cells(1, 1), Sheets(1).Cells(4, 4)).Value= tA
Sheets(1).Range(Sheets(1).Cells(1, 1), Sheets(1).Cells(4, 4)).Replace "#", "="

希望这有帮助