[英]Pretty Print Excel Formulas?
有誰知道可以漂亮地打印 Excel 公式的(免費)工具? 谷歌搜索沒有發現任何東西。
我有一些半復雜公式的工作表需要通過,所以這會讓我的生活更輕松一些。
我只是想把這樣的東西
AC6+AD6+(IF(H6="Yes",1,IF(J6="Yes",1,0)))+IF(X6="Yes",1,0)
無需在 Vim 或類似工具中手動執行即可轉換為更具可讀性的內容。 Excel 確實會在括號上進行顏色匹配,但它仍然在一行上混合在一起。
試試 Excel 公式美化器http://excelformulabeautifier.com/ 。 它漂亮地打印(又名美化)Excel 公式。
(我幫助維護這一點,一直在尋找反饋以使其更好。)
此 VBA 代碼不會贏得任何獎項,但可以快速查看典型公式。 它只是手動處理括號或分隔符。 將其粘貼到代碼模塊中並從 VBA 即時窗口命令行調用它。 (編輯:我最近不得不查看一些公式,並且我從原始答案中改進了這里的內容,所以我回來更改了它。)
Public Function ppf(f) As String
Dim formulaStr As String
If IsObject(f) Then
Debug.Assert TypeOf f Is Range
Dim rng As Range
Set rng = f
formulaStr = rng.Formula
Else
Debug.Assert VarType(f) = vbString
formulaStr = f
End If
Dim tabs(0 To 99) As Long
Dim tabNum As Long
tabNum = 1
Dim tabOffset As Long
Dim i As Long
Dim c As String
For i = 1 To Len(formulaStr)
c = Mid$(formulaStr, i, 1)
If InStr("({", c) > 0 Then
ppf = ppf & c
tabNum = tabNum + 1
tabs(tabNum) = tabs(tabNum - 1) + tabOffset + 1
tabOffset = 0
ppf = ppf & vbCrLf & Space(tabs(tabNum))
ElseIf InStr(")}", c) > 0 Then
tabNum = tabNum - 1
tabOffset = 0
ppf = ppf & c & vbCrLf & Space(tabs(tabNum))
ElseIf InStr("+-*/^,;", c) > 0 Then
tabOffset = 0
ppf = ppf & c & vbCrLf & Space(tabs(tabNum))
Else
ppf = ppf & c
tabOffset = tabOffset + 1
End If
Next i
End Function
如果你這樣稱呼它:
?ppf([q42])
您不必擔心轉義雙引號等。 您將獲得如下所示的輸出:
AC6+
AD6+
(
IF(
H6="Yes",
1,
IF(
J6="Yes",
1,
0)
)
)
+
IF(
X6="Yes",
1,
0)
您也可以使用普通字符串調用它。
上面代碼片段的這個版本現在也以不同的方式處理引用的字符,這意味着,如果它們在像這樣的字符串中,它不會讓它們影響縮進:
"This ({)},;+*-/ won't lead to a linebreak"
它由布爾變量 bInsideQuotes 控制。 它還使用
.FormulaLocal
使最終用戶能夠看到他們所知道的東西。
Public Function prettyPrintFormula(f As Variant) As String
Dim formulaStr As String
Dim ppf As String
If IsObject(f) Then
Debug.Assert TypeOf f Is Range
Dim rng As Range
Set rng = f
formulaStr = rng.FormulaLocal
Else
Debug.Assert VarType(f) = vbString
formulaStr = f
End If
Dim tabs(0 To 99) As Long
Dim tabNum As Long
tabNum = 1
Dim tabOffset As Long
Dim i As Long
Dim c As String
Dim bInsideQuotes As Boolean
bInsideQuotes = False
For i = 1 To Len(formulaStr)
c = Mid$(formulaStr, i, 1)
If InStr("""", c) > 0 Then
bInsideQuotes = Not bInsideQuotes
End If
If InStr("({", c) > 0 And Not bInsideQuotes Then
ppf = ppf & c
tabNum = tabNum + 1
tabs(tabNum) = tabs(tabNum - 1) + tabOffset + 1
tabOffset = 0
ppf = ppf & vbCrLf & Space(tabs(tabNum))
ElseIf InStr(")}", c) > 0 And Not bInsideQuotes Then
tabNum = tabNum - 1
tabOffset = 0
ppf = ppf & c & vbCrLf & Space(tabs(tabNum))
ElseIf InStr("+-*/^,;", c) > 0 And Not bInsideQuotes Then
tabOffset = 0
ppf = ppf & c & vbCrLf & Space(tabs(tabNum))
Else
ppf = ppf & c
tabOffset = tabOffset + 1
End If
Next i
prettyPrintFormula = ppf
End Function
我剛剛通過使用 VS Code sql-formatter擴展解決了這個問題。 我只是將我的公式粘貼到一個 sql 文件並使用 sql-formatter 進行格式化。
當我把它歸檔
{=IFERROR(INDEX(names,SMALL(IF(groups=$E5,ROW(names)-MIN(ROW(names))+1),COLUMNS($E$5:E5))),"")}
它是這樣出來的:
{ = IFERROR(
INDEX(
NAMES,
SMALL(
IF(groups = $ E5, ROW(NAMES) - MIN(ROW(NAMES)) + 1),
COLUMNS($ E $ 5 :E5)
)
),
""
) }
它並不完美,但符合我的口味。 這可以復制並使用回 Excel / 谷歌表格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.