Поделиться через


Форматирование данных в Excel при помощи различных региональных параметров

Все данные, для которых существуют настройки, зависящие от языковых стандартов (например, даты и денежные единицы), перед передачей в Microsoft Office Excel или чтением данных из кода в проекте Office необходимо форматировать с помощью формата данных "Английский (США)" (код языка 1033).

Применение. Сведения этого раздела применяются к проектам уровня документа и уровня приложения для Excel 2007 и Excel 2010. Дополнительные сведения см. в разделе Доступность функций по типам приложений Office и проектов.

При разработке решения Office в Visual Studio объектная модель Excel по умолчанию ожидает форматирования данных по коду языка 1033 (так называемая "фиксация объектной модели на коде языка 1033"). Данное поведение соответствует методам работы VBA. Это поведение можно изменить для решений Office.

Общие сведения о том, почему объектная модель Excel ожидает код языка 1033

По умолчанию на решения Office, созданные с помощью Visual Studio, не влияют параметры языковых стандартов конечного пользователя, и поэтому эти решения всегда ведут себя так, как если бы использовался языковый стандарт "Английский (США)". Например при считывании или установке значения свойства Value2 в Excel данные могут форматироваться в соответствии с языковым стандартом с кодом языка 1033. При использовании другого формата данных результат может отличаться от ожидаемого.

Даже при использовании формата "Английский (США)" для данных, которые передаются или обрабатываются управляемым кодом, Excel верно интерпретирует и отображает данные согласно языковым параметрам конечного пользователя. Excel может верно форматировать данные, поскольку управляемый код передает код языка 1033 вместе с данными, указывая, что данные предоставляются в формате "Английский (США)" и, таким образом, должны быть переформатированы, чтобы соответствовать языковым параметрам пользователя.

Например, если региональные параметры конечного пользователя установлены в значение "Немецкий (Германия)", то дата "June 29, 2005" должна форматироваться как "29.06.2005". В то же время, если решение передает дату в Excel в виде строки, необходимо отформатировать ее в соответствии с форматом "Английский (США)": "6/29/2005". Если ячейка имеет формат "Дата", то Excel отобразит дату в формате "Немецкий (Германия)".

Передача других кодов языков в объектную модель Excel

В проектах для .NET Framework 4 среда CLR автоматически передает код языка 1033 во все методы и свойства объектной модели Excel, которые принимают данные, зависящие от языкового стандарта. Это поведения нельзя автоматически изменить для всех вызовов объектной модели. В то же время разработчик может передать другой код языка в определенный метод. Для этого при вызове метода используется перегрузка InvokeMember, а код языка отправляется в параметр метода culture.

В проектах, предназначенных для .NET Framework 3.5, Среда выполнения Visual Studio Tools for Office по умолчанию передает код языка 1033 в объектную модель Excel. Такое поведение можно изменить с помощью Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute.

Изменение проектов .NET Framework 3.5 для использования параметров языкового стандарта компьютера конечного пользователя

Фиксацию кода языка можно снять во всей объектной модели Excel для проектов Office, предназначенных для .NET Framework 3.5. Атрибут Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute управляет поведением объектной модели Excel в подобных проектах. По умолчанию этому атрибуту присваивается значение true, которое блокирует форматирование в объектной модели Excel кодом языка 1033. Если этот атрибут имеет значение true, Visual Studio заключает каждый объект Excel, установленный решением, в прокси-объект, который всегда передает код языка 1033 в Excel. Если атрибуту присвоено значение false, то эти прокси-объекты не используются, и объектная модель Excel будет использовать языковые параметры конечного пользователя.

Если установить этот атрибут равным false, то для принудительных вызовов свойств Excel и методов при использовании формата данных "Английский (США)" с кодом языка 1033 можно использовать отражение. Дополнительные сведения см. в разделе Практическое руководство. Создание региональных строковых литералов в Excel с помощью отражения.

Примечание

Если для атрибута задано значение false, и при этом у каких-либо конечных пользователей установлены языковые параметры, отличные от "Английский (США)", решение у них может работать не так, как ожидается.

Чтобы разблокировать объектную модель, следует задать для атрибута Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute в файле проекта AssemblyInfo.vb или AssemblyInfo.cs значение false.

<Assembly: ExcelLocale1033(False)>
[assembly: ExcelLocale1033(false)]

Примечание

Поскольку Среда выполнения Visual Studio Tools for Office создает оболочку вокруг всех встроенных объектов Excel в прокси-объекте, если Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute имеет значение true, то может наблюдаться замедление некоторых операций, использующих встроенные объекты Excel.В этих случаях можно повысить производительность, используя метод Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap(System.Object) для получения объектов Excel без прокси, а затем выполнить операцию с помощью этого объекта.В этом случае следует учитывать, что объект, возвращаемый Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap(System.Object), использует код языка текущего потока, а не код языка 1033.

См. также

Задачи

Практическое руководство. Локализация решений Excel

Практическое руководство. Создание региональных строковых литералов в Excel с помощью отражения

Основные понятия

Расширение метаданных с помощью атрибутов

Общие сведения об инструментах Visual Studio для среды выполнения Office

Другие ресурсы

Проектирование и создание решений Office