使用各種地區設定,在 Excel 中格式化資料
您必須先使用英文 (美國) 資料格式 (地區設定 ID 1033) 來格式化含有區分地區設定之格式的所有資料 (例如,日期和貨幣),然後再將它傳遞至 Microsoft Office Excel 或從 Office 專案程式碼讀取資料。
**適用於:**本主題中的資訊適用於 Excel 2007 和 Excel 2010 的文件層級專案和應用程式層級專案。如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能。
當您在 Visual Studio 中開發 Office 方案時,Excel 物件模型預設必須使用地區設定 ID 1033 資料格式 (這即是所謂將物件模型鎖定於地區設定 ID 1033)。 這個行為與 Visual Basic for Applications 的運作方式相符。 不過,您可以在 Office 方案中修改這個行為。
了解 Excel 物件模型如何一律使用地區設定 ID 1033
使用 Visual Studio 所建立的 Office 方案預設不會受到使用者的地區設定所影響,而且一律會以英文 (美國) 地區設定運作。 例如,如果在 Excel 中取得或設定 Value2 屬性,資料就一定會依照地區設定 ID 1033 方式完成格式化。 如果您使用不同的資料格式,可能會產生無法預期的結果。
即使您對 Managed 程式碼所傳遞或管理的資料使用英文 (美國) 格式,Excel 還是會根據使用者的地區設定來正確解譯及顯示資料。 Excel 可以正確地格式化資料,是因為 Managed 程式碼會將地區設定 ID 1033 與資料一併傳遞,這表示資料使用的是英文 (美國) 格式,因此必須重新格式化以符合使用者的地區設定。
例如,如果使用者的地區選項設為德文 (德國) 地區設定,則他們會想要將 June 29, 2005 日期的格式設定為:29.06.2005。 不過,如果您的方案將該日期以字串形式傳遞給 Excel,則必須根據英文 (美國) 格式來設定日期的格式:6/29/2005。 如果儲存格的格式設定為日期儲存格,則 Excel 會以德文 (德國) 格式顯示日期。
將其他地區設定 ID 傳遞給 Excel 物件模型
在目標是 .NET Framework 4 的專案中,Common Language Runtime (CLR) 會自動將地區設定 ID 1033 傳遞給 Excel 物件模型中接受區分地區設定資料的所有方法和屬性。 針對所有進入物件模型的呼叫,並沒有方法可以自動變更這項行為。 不過,您可以使用 InvokeMember 呼叫特定方法,以及將地區設定 ID 傳遞給該方法的 culture 參數,以將不同的地區設定 ID 傳遞給該方法。
在目標是 .NET Framework 3.5 的專案中,Visual Studio Tools for Office Runtime 預設會將地區設定 ID 1033 傳遞給 Excel 物件模型。 不過,您可以使用 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute 來修改這項行為。
將 .NET Framework 3.5 專案修改為使用使用者電腦的地區設定
在目標是 .NET Framework 3.5 的 Office 專案中,您可以解除鎖定整個 Excel 物件模型的地區設定 ID 行為。 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute 會控制這些專案中的 Excel 物件模型行為。 根據預設,這個屬性 (Attribute) 設定為 true,而此設定會鎖定 Excel 物件模型必須使用地區設定 ID 1033 的格式。 當這個屬性為 true 時,Visual Studio 會將每一個由方案具現化的 Excel 物件包裝在一律會將地區設定 ID 1033 傳遞給 Excel 的 Proxy 物件中。 將屬性設定為 false 時,就不使用這些 Proxy 物件,而且 Excel 物件模型會使用使用者的地區設定。
如果您選擇將屬性 (Attribute) 設為 false,則還是可以使用反映將 Excel 屬性 (Property) 和方法的特定呼叫強制為使用英文 (美國) 資料格式 (地區設定 ID 1033)。 如需詳細資訊,請參閱 HOW TO:在 Excel 中使用反映將字串常值設定為區域安全。
注意事項 |
---|
如果您將此屬性設定為 false,而有任何使用者使用英文 (美國) 以外的地區設定時,他們可能就會在方案中看見無法預期的行為。 |
若要解除鎖定物件模型,請將專案內 AssemblyInfo.vb 或 AssemblyInfo.cs 檔案的 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute 設定為 false。
<Assembly: ExcelLocale1033(False)>
[assembly: ExcelLocale1033(false)]
注意事項 |
---|
當 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute 為 true 時,Visual Studio Tools for Office Runtime 會將所有原生 Excel 物件包裝在 Proxy 物件中,因此您可能發現某些與原生 Excel 物件相關之作業的速度會變慢。 在這種情況下,您可以使用 Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap(System.Object) 方法,不需 Proxy 即可取得 Excel 物件,然後使用此物件執行作業以提高效能。 如果您選擇這麼做,請注意由 Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap(System.Object) 傳回的物件會使用目前執行緒的地區設定 ID,並不是地區設定 ID 1033。 |
請參閱
工作
HOW TO:在 Excel 中使用反映將字串常值設定為區域安全
概念
Visual Studio Tools for Office Runtime 概觀