Share via


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

在 Office 專案中,如果您在專案中將字串格式設定為英文 (美國),則 Excel 會正確地顯示區分地區設定的資料字串。 將 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute 設為 false,就可以在目標為 .NET Framework 3.5 的 Office 專案中變更這項行為。 不過,如果您在變更這個屬性之後將字串常值傳遞給 Excel,就會自動使用執行緒目前的 LCID 而且資料格式可能會錯誤。 如需詳細資訊,請參閱 使用各種地區設定,在 Excel 中格式化資料

**適用於:**本主題中的資訊適用於 Excel 2007 和 Excel 2010 的文件層級專案和應用程式層級專案。如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能

如果您在目標為 .NET Framework 3.5 的 Office 專案中將 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute 設為 false,則還是可以使用反映將 Excel 物件之屬性和方法的特定呼叫強制為使用英文 (美國) 資料格式 (地區設定 ID 1033)。 如果您這麼做,則可以在傳遞給屬性或方法的所有字串中都使用英文 (美國) 格式,而程式碼在所有地區設定中都會正確地運作。

下列範例示範如何在 Excel 文件層級專案中設定或取得 NamedRange 控制項的屬性,而相同的概念也適用於應用程式層級專案中的 Excel 物件。

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

  1. 建立 Helper 方法,以使用 InvokeMember 方法來設定 Excel 物件的屬性值。 請包括 Excel 物件的屬性、屬性名稱和屬性的參數。 在 Helper 方法中,使用具有 CultureInfo 參數的 InvokeMember 多載,以及將英文 (美國) 的地區設定 ID 傳遞給這個參數。

    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 Helper 方法,並傳入 NamedRange 控制項的基礎 Range 物件 (屬性名稱和值),而不是直接設定 NamedRange1 的 Formula 屬性。

    注意事項注意事項

    您無法直接傳入 NamedRange 控制項。 但您必須使用 InnerObject 屬性取得基礎 Excel Range 物件,然後將這個物件傳遞給方法。 如需詳細資訊,請參閱主項目和主控制項的程式設計限制

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

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

  1. 建立 Helper 函式,以使用 InvokeMember 方法來取得 Excel 物件的屬性值。 物件、屬性名稱和屬性的參數會傳入 Helper 方法。

    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 方案的全球化與當地語系化

其他資源

Deploying Office Solutions

設計和建立 Office 方案