Azure Data Studio 生成的 Excel 电子表格将单元格值显示为文本(不是公式执行的结果)
Azure Data Studio produced Excel spreadsheet displays cell values as text (not the result of the formula's execution)
原题:
在 Azure Data Studio 中,我已将 SQL 查询的结果保存到 Excel 电子表格中。当我调出电子表格时,包含公式(URL hyperlink)的单元格显示为要显示的文本,而不是执行公式的结果(命名为可见的可点击 hyperlink).
这是电子表格的前三行原始数据:
sourceTableNameA
sourceTableComposedKeyA
sourceTableComposedKeyA2
sourceTableNameB
sourceTableComposedKeyB
FCC_ASR_LI_20210202
=Hyperlink("https://maps.google.com/maps?q=28.537266254426,-97.794735431672","C.2655506")
https://maps.google.com/maps?q=28.537266254426,-97.794735431672
F3GIS_20210209
=Hyperlink("https://maps.google.com/maps?q=28.537266254426,-97.794735431672","{F4C8C17C-0702-4B08-ABC5-7ABF0BD76BAA}")
FCC_ASR_LI_20210202
=Hyperlink("https://maps.google.com/maps?q=29.709928035737,-96.912009716035","C.616145")
https://maps.google.com/maps?q=29.709928035737,-96.912009716035
F3GIS_20210209
=Hyperlink("https://maps.google.com/maps?q=29.709928035737,-96.912009716035","{7F77EAB2-3588-4023-921F-4C009FC91BDC}")
方案一:
点击单元格(例如:上面的 B2),然后按 Return,单元格就会变成公式的结果。
新问题:
我有 +20K 个单元格需要执行“解决方案 A”。并且手动执行“解决方案 A”+20K 次不是一种选择。
方案B(勉强够用):
在投入大量时间尝试解决此问题后,我发现了一个边际解决方案。它是 select 包含公式文本的列的内容,然后是 search/replace “=” 字符。虽然这确实将文本转换为每个单元格的实际公式,但它使每个单元格看起来像普通文本,而不是使其具有可点击 link 的默认外观。这导致我不得不手动为所有这些单元格添加下划线和 select 不同的颜色。
方案C(可能?):
我的第一个想法是这是 VBA 中 Excel 宏的工作。这是我所能得到的最接近的结果:
Public Sub Convert_To_Hyperlinks()
Dim Cell As Range
For Each Cell In Intersect(Selection, ActiveSheet.UsedRange)
If Cell <> "" Then
If Left(Cell, 1) = "=" Then
Evaluate (Cell)
Else
ActiveSheet.Hyperlinks.Add Cell, Cell.Value
End If
End If
Next
End Sub
对于包含原始 URL(即单元格不以“=”字符开头)调用 ActiveSheet.Hyperlinks.Add Cell, Cell.Value
的单元格(例如:上面的 C2),此函数完全符合我的需要对于每个单元格给出所需的结果。但是,检测单元格(例如:上面的 B2)是否以“=”开头的代码调用 Evaluate (Cell)
不适用于 selected 单元格。
我可以使用什么 VBA 代码来替换 Evaluate (Cell)
,如果有的话,它会产生与解决方案 A 相同的效果?
在我从事的项目中,我发现以下内容通常就足够了:
Cell.Value = Cell.Value
美妙之处在于您可以在一行中应用范围。
通过循环应用到您的代码:
Public Sub Convert_To_Hyperlinks()
Dim Cell As Range
For Each Cell In Intersect(Selection, ActiveSheet.UsedRange)
If Cell <> vbNullString Then
If Left$(Cell, 1) = "=" Then
Cell.Value = Cell.Value
Else
ActiveSheet.Hyperlinks.Add Cell, Cell.Value
End If
End If
Next
End Sub
原题:
在 Azure Data Studio 中,我已将 SQL 查询的结果保存到 Excel 电子表格中。当我调出电子表格时,包含公式(URL hyperlink)的单元格显示为要显示的文本,而不是执行公式的结果(命名为可见的可点击 hyperlink).
这是电子表格的前三行原始数据:
sourceTableNameA | sourceTableComposedKeyA | sourceTableComposedKeyA2 | sourceTableNameB | sourceTableComposedKeyB |
---|---|---|---|---|
FCC_ASR_LI_20210202 | =Hyperlink("https://maps.google.com/maps?q=28.537266254426,-97.794735431672","C.2655506") | https://maps.google.com/maps?q=28.537266254426,-97.794735431672 | F3GIS_20210209 | =Hyperlink("https://maps.google.com/maps?q=28.537266254426,-97.794735431672","{F4C8C17C-0702-4B08-ABC5-7ABF0BD76BAA}") |
FCC_ASR_LI_20210202 | =Hyperlink("https://maps.google.com/maps?q=29.709928035737,-96.912009716035","C.616145") | https://maps.google.com/maps?q=29.709928035737,-96.912009716035 | F3GIS_20210209 | =Hyperlink("https://maps.google.com/maps?q=29.709928035737,-96.912009716035","{7F77EAB2-3588-4023-921F-4C009FC91BDC}") |
方案一:
点击单元格(例如:上面的 B2),然后按 Return,单元格就会变成公式的结果。
新问题:
我有 +20K 个单元格需要执行“解决方案 A”。并且手动执行“解决方案 A”+20K 次不是一种选择。
方案B(勉强够用):
在投入大量时间尝试解决此问题后,我发现了一个边际解决方案。它是 select 包含公式文本的列的内容,然后是 search/replace “=” 字符。虽然这确实将文本转换为每个单元格的实际公式,但它使每个单元格看起来像普通文本,而不是使其具有可点击 link 的默认外观。这导致我不得不手动为所有这些单元格添加下划线和 select 不同的颜色。
方案C(可能?):
我的第一个想法是这是 VBA 中 Excel 宏的工作。这是我所能得到的最接近的结果:
Public Sub Convert_To_Hyperlinks()
Dim Cell As Range
For Each Cell In Intersect(Selection, ActiveSheet.UsedRange)
If Cell <> "" Then
If Left(Cell, 1) = "=" Then
Evaluate (Cell)
Else
ActiveSheet.Hyperlinks.Add Cell, Cell.Value
End If
End If
Next
End Sub
对于包含原始 URL(即单元格不以“=”字符开头)调用 ActiveSheet.Hyperlinks.Add Cell, Cell.Value
的单元格(例如:上面的 C2),此函数完全符合我的需要对于每个单元格给出所需的结果。但是,检测单元格(例如:上面的 B2)是否以“=”开头的代码调用 Evaluate (Cell)
不适用于 selected 单元格。
我可以使用什么 VBA 代码来替换 Evaluate (Cell)
,如果有的话,它会产生与解决方案 A 相同的效果?
在我从事的项目中,我发现以下内容通常就足够了:
Cell.Value = Cell.Value
美妙之处在于您可以在一行中应用范围。
通过循环应用到您的代码:
Public Sub Convert_To_Hyperlinks()
Dim Cell As Range
For Each Cell In Intersect(Selection, ActiveSheet.UsedRange)
If Cell <> vbNullString Then
If Left$(Cell, 1) = "=" Then
Cell.Value = Cell.Value
Else
ActiveSheet.Hyperlinks.Add Cell, Cell.Value
End If
End If
Next
End Sub