2017-08-08 224 views
0

我在此看到一些問題(如this one),詢問如果Excel中的單元格可以按照NPOI/POI格式化,就好像formatted by Excel。和大多數人一樣,我必須處理貨幣和日期時間問題。在這裏,讓我問一下如何通過Excel格式化來實現格式化? (我會回答這個問題,我自己來演示如何做到這一點。)NPOI:實現貨幣格式,就好像格式化爲Excel

設置:視窗10,英語,地區:臺灣 Excel格式:XLSX(2007版及更高版本)

(抱歉各種編輯。這個問題我已經按了「確認」按鈕,在意想不到的時間)

回答

2

如果格式化單元作爲貨幣的,您有4種選擇:Excel Currency Format

每個款式的內部格式如下:

  1. -NT $ 1,234.10
    < numFmt formatCode = 「」 NT $ 「#,## 0.00」 numFmtId = 「164」/>

  2. [RED] NT $ 1,234.10
    < numFmt formatCode = 「」 NT $ 「#,## 0.00; [紅色]」 NT $ 「#,## 0.00」 numFmtId = 「164」/>

  3. -NT $ 1,234.10
    < numFmt formatCode = 「」 NT $「#, ## 0.00 _);(「NT $」#,## 0.00)「numFmtId =」「/>

  4. [RED] -NT $ 1,234.10
    < numFmt formatCode = 「」 NT $ 「#,## 0.00 _); [紅色](」 NT $ 「#,## 0.00)」 numFmtId =」 「/>

注意:在NT $之前和之後有一對雙引號(」)。

(要獲得XLSX的內部格式,只需將其解壓縮形式信息是可用<解壓目錄> \ XL \ Styles.xml看看這個answer如果您需要了解更多信息。)

(供參考:在formatCode中,'0'代表一個數字,'#'代表一個數字,但如果數字不夠大,則不會出現,所以任何少於1000的數字都不會有逗號。'_'在格式3中,'1.75'顯示爲'NT $ 1.75',最後一個是空格。)

(供參考:在numFmtId中,對於案例1和案例2,編號164是fo r用戶定義的。對於情況3和4,7號和8是build-in style。)

對於使用POI/NPOI開發者,你可能會發現,如果格式化使用0x7的或0x8中使用Build In Format您的貨幣列,你只能得到第三或第四選擇。你無法獲得第一或第二選擇。

要獲得第一個選擇,您可以建立在樣式0x7 "$#,##0.00);($#,##0.00)"上。您需要在其前面添加貨幣符號和雙引號

styleCurrency.DataFormat = workbook.CreateDataFormat().GetFormat("\"NT$\"#,##0.00"); 

將此格式應用於帶編號的單元格。一旦你打開Excel結果文件,右鍵點擊檢查格式,你會看到第一個選擇。

請隨時評論這篇文章。