共用方式為


HOW TO:在 Excel 中使用反映將字串常值設定為區域安全

更新:2007 年 11 月

適用於

本主題中的資訊僅適用於指定的 Visual Studio Tools for Office 專案和 Microsoft Office 版本。

專案類型

  • 文件層級專案

Microsoft Office 版本

  • Excel 2003

  • Excel 2007

如需詳細資訊,請參閱依應用程式和專案類型提供的功能

當您使用預設的 Visual Studio Tools for Office 設定時,請務必將區分地區設定的資料字串格式化為英文 (美國),這樣 Excel 才能自動顯示正確格式化的資料。如果您將 ExcelLocale1033Attribute 設定為 false 以變更預設值,並將字串常值傳遞至 Excel,就會自動使用執行緒目前的 LCID 而且資料格式可能會錯誤。如需詳細資訊,請參閱使用各種地區設定,在 Excel 中格式化資料

如果您將 ExcelLocale1033Attribute 設定為 false,就可以使用反映來設定或取得屬性,或叫用目標範圍中的方法,並傳入英文 (美國) 的 CultureInfo,以便您可以使用任何字串的英文名稱,而且它可在所有地區設定中正確運作。

若要使用反映設定 Excel 範圍中的屬性

  1. 建立名為 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));
    }
    
  2. 在儲存格 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");
    
  3. 呼叫 SetPropertyInternational 函式並傳入 NamedRange、屬性名稱和值,而不是直接設定 NamedRange1 的 Formula 屬性。

    注意事項:

    無法直接傳入 NamedRange 控制項,您必須呼叫 InnerObject 方法,以傳遞基礎 Range 物件。如需詳細資訊,請參閱主項目和主控制項的程式設計限制

    SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)")
    
    SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)");
    

若要使用反映擷取 Excel 範圍中的屬性值

  1. 建立名為 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));
    }
    
  2. 呼叫 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);
    

請參閱

工作

HOW TO:以 Office 多語系使用者介面為目標

概念

使用各種地區設定,在 Excel 中格式化資料

Office 方案的全球化與當地語系化

在 Visual Studio 中建立 Office 方案

其他資源

部署 Office 方案