HOW TO:在 Excel 中使用反映將字串常值設定為區域安全
更新:2007 年 11 月
適用於 |
---|
本主題中的資訊僅適用於指定的 Visual Studio Tools for Office 專案和 Microsoft Office 版本。 專案類型
Microsoft Office 版本
如需詳細資訊,請參閱依應用程式和專案類型提供的功能。 |
當您使用預設的 Visual Studio Tools for Office 設定時,請務必將區分地區設定的資料字串格式化為英文 (美國),這樣 Excel 才能自動顯示正確格式化的資料。如果您將 ExcelLocale1033Attribute 設定為 false 以變更預設值,並將字串常值傳遞至 Excel,就會自動使用執行緒目前的 LCID 而且資料格式可能會錯誤。如需詳細資訊,請參閱使用各種地區設定,在 Excel 中格式化資料。
如果您將 ExcelLocale1033Attribute 設定為 false,就可以使用反映來設定或取得屬性,或叫用目標範圍中的方法,並傳入英文 (美國) 的 CultureInfo,以便您可以使用任何字串的英文名稱,而且它可在所有地區設定中正確運作。
若要使用反映設定 Excel 範圍中的屬性
建立名為 SetPropertyInternational 的 Helper 函式,以便藉由傳遞字串常值設定 Excel 範圍中的屬性值時,會傳遞英文 (美國) 的 LCID。
Shared Function SetPropertyInternational( _ ByVal target As Object, ByVal name As String, _ ByVal ParamArray parameters() As Object) As Object Return target.GetType.InvokeMember(name, _ Reflection.BindingFlags.Instance Or Reflection.BindingFlags.SetProperty, _ Nothing, target, parameters, _ System.Globalization.CultureInfo.GetCultureInfo(1033)) End Function
static object SetPropertyInternational(object target, string name, params object[] args) { return target.GetType().InvokeMember(name, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.SetProperty | System.Reflection.BindingFlags.Public, null, target, args, new System.Globalization.CultureInfo(1033)); }
在儲存格 A5 上建立 NamedRange 控制項,並將其命名為 NamedRange1。
Dim NamedRange1 As Microsoft.Office.Tools.Excel.NamedRange = _ Me.Controls.AddNamedRange(Me.Range("A5"), "NamedRange1")
Microsoft.Office.Tools.Excel.NamedRange NamedRange1 = this.Controls.AddNamedRange(this.Range["A5", missing], "NamedRange1");
呼叫 SetPropertyInternational 函式並傳入 NamedRange、屬性名稱和值,而不是直接設定 NamedRange1 的 Formula 屬性。
注意事項: 無法直接傳入 NamedRange 控制項,您必須呼叫 InnerObject 方法,以傳遞基礎 Range 物件。如需詳細資訊,請參閱主項目和主控制項的程式設計限制。
SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)")
SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)");
若要使用反映擷取 Excel 範圍中的屬性值
建立名為 GetPropertyInternational 的函式,以在擷取 Excel 範圍中的屬性值時設定 LCID。
Shared Function GetPropertyInternational( _ ByVal target As Object, ByVal name As String, _ ByVal ParamArray parameters() As Object) As Object Return target.GetType.InvokeMember(name, _ Reflection.BindingFlags.Instance Or Reflection.BindingFlags.GetProperty, _ Nothing, target, parameters, _ System.Globalization.CultureInfo.GetCultureInfo(1033)) End Function
static object GetPropertyInternational(object target, string name, params object[] args) { return target.GetType().InvokeMember(name, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.GetProperty | System.Reflection.BindingFlags.Public, null, target, args, new System.Globalization.CultureInfo(1033)); }
呼叫 GetPropertyInternational 函式,並傳入 NamedRange 和屬性名稱。
注意事項: 下列程式碼範例假設您在工作表上有名為 NamedRange1 的 NamedRange 控制項。
Dim formula As String = CType( _ GetPropertyInternational(NamedRange1.InnerObject, "Formula"), String) MessageBox.Show(formula)
string formula = (string) GetPropertyInternational(NamedRange1.InnerObject, "Formula"); MessageBox.Show(formula);