Практическое руководство. Создание региональных строковых литералов в Excel с помощью отражения
Обновлен: Ноябрь 2007
Применимость |
---|
Сведения в данном разделе относятся только к указанным проектам Visual Studio Tools for Office и версиям приложений Microsoft Office. Тип проекта
Версия Microsoft Office
Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов. |
При использовании параметров Visual Studio Tools for Office по умолчанию, всегда следует форматировать чувствительные к языку строки данных на английском, и Excel выведет правильно отформатированные данные. Если умолчания изменяются установкой ExcelLocale1033Attribute значения false и строковые литералы передаются в Excel, то автоматически используется код языка текущего потока, и данные могут быть неправильно отформатированы. Дополнительные сведения см. в разделе Форматирование данных в Excel при помощи различных региональных параметров.
Если для ExcelLocale1033Attribute установлено значение false, можно использовать отражение, чтобы задать или возвратить свойство или вызвать метод в целевом диапазоне, передавая в CultureInfo английское значение, таким образом можно использовать английские имена любых строк, и это будет правильно работать во всех языках.
Установка свойства в диапазоне Excel с помощью отражения
Создайте вспомогательную функцию с именем SetPropertyInternational для передачи кода языка для английского (США), всякий раз, когда устанавливаются значения свойств в диапазонах Excel посредством передачи строкового литерала.
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)); }
Создайте элемент управления NamedRange на ячейку А5 и назовите его 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");
Вместо того, чтобы прямо устанавливать свойство Formula диапазона NamedRange1, вызовите функцию SetPropertyInternational и передайте NamedRange, имя и значение свойства.
Примечание. Нельзя прямо передавать элемент управления NamedRange, нужно передавать базовый объект Range, вызывая метод InnerObject. Дополнительные сведения см. в разделе Программные ограничения ведущих элементов и элементов управления ведущего приложения.
SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)")
SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)");
Извлечение значения свойства из диапазона Excel с помощью отражения
Создайте функцию с именем GetPropertyInternational для установки кода языка, всякий раз при извлечении значений свойства из диапазона Excel.
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 и имя свойства.
Примечание. Следующий пример кода предполагает наличие на листе управляющего элемента NamedRange с именем NamedRange1.
Dim formula As String = CType( _ GetPropertyInternational(NamedRange1.InnerObject, "Formula"), String) MessageBox.Show(formula)
string formula = (string) GetPropertyInternational(NamedRange1.InnerObject, "Formula"); MessageBox.Show(formula);
См. также
Задачи
Практическое руководство. Назначение многоязыкового пользовательского интерфейса Office
Основные понятия
Форматирование данных в Excel при помощи различных региональных параметров
Глобализация и локализация решений Microsoft Office
Создание решений Office в Visual Studio