我有一個簡單的功能:{=B2*C2 \# "-#.##0,00"}
在Word 的表格中。但是,結果為2.345,67
,因為我住在荷蘭。現在我需要與英語同事共享此文檔,並希望此類公式的格式(我有很多)顯示為2,345.67
,即英國或美國語言環境。我可以使用 來做到這一點{=B2*C2 \# "-#.##0,00"}
,但隨後我需要維護文件的兩個版本並更新每個欄位。
我更喜歡能夠以某種集中方式設置區域設置,但是設置文件的區域設置或通過校對工具沒有幫助,並且這個建議,即像\l 2057
英語一樣使用語言環境,會出現文法錯誤。
儘管我更喜歡使用語言設置,但我可以清楚地手動更改格式字串。同樣不適用於正在讀取的欄位:如果我將欄位變更B2
為使用點而不是逗號表示小數,則無法正確計算。
更改整個電腦的區域設定會有所幫助,但這不是一個長期的解決方案。
答案1
這個領域存在著許多問題,但沒有一個是特別容易解決的。
在某些方面,主要問題不是您實際描述的問題,即格式不起作用,而是當使用者在表中鍵入數字時,它是“固定的”問題,即在您鍵入之後
1234,56
Word 中沒有完全可靠的機制可以將其變更為
1234.56
Word 會根據 Windows 控制台是否將小數點字元設定為「.」來不同地識別數字。或 ”,”。
如果您建立的文件沒有此類值(只有空白儲存格)和您要將「表單」傳送給美國/英國用戶,由其輸入值和只有這樣,英國/美國用戶才會使用它,您可以執行以下操作。
否則,據我所知,您要么必須強迫人們以非常不自然的方式輸入數據,要么在用戶輸入 1234.56 後就必須這樣做,或者您必須輕鬆地將所有數字轉換為其他文化的格式。最簡單的是,您可以使用通配符來尋找/替換來取代類似的內容
([0-9]),([0-9])
到
\1.\2
(或反之亦然),假設這不會修改任何其他看起來像數字的東西。您可能需要將其包裝在 VBA 巨集中。
至於格式開關,唯一真正可靠的處理方法是不使用它們,而完全依賴 Word 預設數字格式的方式。 (FWIW,當人們在 Word 數位格式中放置「#」佔位符時,有時是因為他們來自 Excel 背景,並且沒有意識到他們只是不需要它們)。
但是,如果您必須使用數字格式,那麼您要做的就是將正確的“小數點”和“千位分隔符號”字元添加到格式中。我指的是與正在編輯文件的電腦上的 Windows 控制面板中使用的字元相同的字元。
沒有完全可靠的內建方法可以使用欄位來執行此操作。您可以使用 VBA 從 Windows 取得相關字元。或者,您可以嘗試使用一些嵌套字段來“偽造它”,如下所示:
{ IF 1/2 = 0,5 "{ SET POINT "," }{ SET GROUP "." }" "{ SET POINT "." }{ SET GROUP "," }" }
(記住全部{ } 必須是特殊的欄位程式碼大括號對,您可以在 Windows 桌面 Word 上使用 ctrl-F9 插入)
那麼,而不是
{=B2*C2 \# "-#.##0,00"}
你用
{=B2*C2 \# "-#{ GROUP }##0{ POINT }00"}
或者,您可以在文件的開頭定義格式,例如
{ SET FORMAT1 "-#{ GROUP }##0{ POINT }00" }
然後使用
{=B2*C2 \# "{ FORMAT1 }"}
顯然,這種方法不會處理任意區域設置(例如,某些區域設置使用不間斷空格字元作為千位分隔符號)或控制面板中的異常設置,但它們對於荷蘭/美國/英國來說可能就足夠了。
不幸的是,這是一個「容易」解決的問題。如果您真正想要的是修復所有內容,以便所有用戶(荷蘭/英國/美國)輸入並看到相同的格式,無論他們的 Windows 設定如何,這實際上是一個更難解決的問題。假設您決定每個人都應該輸入並看到美國格式,例如1,234,567.89
那麼問題是,在使用典型 NL 設定設定的系統上,Word 將無法正確識別「1234.56」。你唯一可以做的(IMO)來處理這個問題是...
A。避免任何使用者輸入的數據,或限制使用者僅輸入整數數據
b.暫時修改使用者係統上的相關 Windows 設置,如果安全限制不排除這種情況,也許可以使用 VBA。
我不確定是否值得嘗試為這兩個選項中的任何一個提供解決方案。
然而,也許值得列出該問題的通用解決方案可能必須考慮的一些事項,如下所示:
基本問題是Word的數位格式主要依賴Windows設定/控制面板中的設定。事實上,Word 的實作太舊了,它只支援其中的一些設定。例如,無論您在控制面板中設定什麼,它都會以三個為一組進行數字分組。正如您已經發現的,您無法使用區域設定開關(例如
\l 2057
或透過應用校對語言)來影響數字顯示(這實際上在一定程度上適用於日期。即使您可以應用校對語言,您仍然需要計算如何改變它。桌面版和線上版 Word 的行為有所不同。目前,無論任何區域設定如何,AFAICS 的 Word 網路版都會保留欄位結果原樣。當然,這種情況可能會隨著時間的推移而改變,而 Word 的「裝置」版本的行為可能會有所不同。 Mac 桌面版本的行為方式與 Windows 版本大致相同,但修改 Mac 設定需要與 Windows 版本不同的程式碼。
這不僅僅是“格式”問題。還有一個“如何輸入數字”問題和一個“識別”問題。
數字格式字串中沒有約定可以讓您覆蓋Windows 控制台中的值,甚至指定您要使用 Windows 控制台中指定的值。
我的意思是覆蓋是你不能做類似的事情
{ DECIMAL "." }{ =10000/3 \# "###0<decimal>00" }
所以Word會總是使用 ”。”作為小數點,無論 Windows 設定如何。
我所說的「使用 Windows 控制面板中指定的值」的意思是:當您鍵入以下格式時
#,##0.00
那麼如果“,”實際上是 Windows 設定中的小數點字符,則整個格式字串將無法按您希望的方式運行。
你可能真的會想使用類似的東西
#<thousands>##0<decimal>00
其中 Word 實際上從 Windows 控制面板取得 和 的值。
除了求助於 VBA 之外,Word 中沒有任何方法可以讓您可靠地發現千位分隔符號、小數點字元(或貨幣字串)的當前值
(可能與您的情況無關,但為了完整性值得一提)如果您使用 SharePoint 元資料透過內容控制項插入數值,則最終必須使用「.」。小數點約定,因為這是 XML 使用的約定,而 Word 無法幫助您克服它。
在數字格式字串中,「千位分隔符號」不是位置性的。例如,在美國/英國慣例中,格式化
1000000
為\#",0"
您提供1,000,000
,而不是100000,0
如果您還需要輸入/格式化貨幣數據,則套用附加設定。如果您的文件包含兩種或多種不同貨幣的數據,則您必須接受 Word 只會將其中一種識別為貨幣。
Word 從 Windows 控制台取得另一個特殊字元的值 - 清單分隔符號。通常是“,”或“;”。如果您的公式使用帶有參數的函數,則需要使用正確的分隔符號。 (您可能還需要在其他欄位類型(例如 TOC 和 EQ)中使用正確的分隔符號)。
我懷疑,在一般情況下,嘗試使用欄位編碼來偵測或評估三個可變字元(小數點、數字分組分隔符號、清單分隔符號)的值實際上是不可能的。即使我上面建議的方法也可能會導致語法錯誤,特別是當您正在進行郵件合併時,Word 可能會標記一個在正常文件中不會導致問題的語法錯誤。