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


Глобализация и локализация решений Excel

Этот раздел содержит информацию об особенностях решений Microsoft Office Excel, которые будут выполняться на компьютерах, имеющих настройки Windows, отличные от настроек в английском формате. Большинство аспектов глобализации и локализации решений Microsoft Office аналогичны аспектам, возникающим при создании других типов решений с помощью Visual Studio. Общие сведения см. в разделе "Глобализация и локализация приложений".

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

Область применения. Сведения в этом разделе относятся к проектам уровня документа и проектам надстроек VSTO для Excel. Дополнительные сведения см. в разделе "Функции", доступные по Приложение Office ликации и типу проекта.

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

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

При разработке решения 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

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

Локализация текста документа

Документ, шаблон или рабочая книга в проекте могут содержать статический текст, который должен быть локализован отдельно от сборки и других управляемых ресурсов. Прямым способом является создание копии документа и перевод текста с помощью Microsoft Office Word или Microsoft Office Excel. Эту процедуру можно применять, даже если в код не вносятся изменения, так как со сборкой может быть связано любое число документов.

Тем не менее необходимо следить за тем, чтобы любая часть кода, взаимодействующая с текстом документа, соответствовала языку текста, а также за тем, чтобы к закладкам, именованным диапазонам и иным отображаемым полям применялись изменения форматирования документа Office, которые потребовались в соответствии с грамматикой и изменением длины текста. В случае с шаблонами документов, содержащими сравнительно мало текста, можно сохранять текст в файлах ресурсов и затем загружать его во время выполнения.

Направление текста

В Excel можно задать свойство листа для вывода текста справа налево. Элементы управления узла или любой RightToLeft элемент управления, имеющий свойство, помещаемые в конструктор, автоматически соответствуют этим параметрам во время выполнения. Word не имеет параметра документа для двунаправленного текста (вы просто изменяете выравнивание текста), поэтому элементы управления не могут быть сопоставлены с этим параметром. Вместо этого нужно задать выравнивание текста для каждого элемента управления. Можно написать код для последовательного перебора всех элементов управления и применения к ним способа вывода текста справа налево.

Изменение языка и региональных параметров

Код настройки на уровне документа обычно использует основной поток пользовательского интерфейса Excel, поэтому любые изменения, внесенные в язык и региональные параметры потока, влияют на все остальные задачи, выполняемые в этом потоке. Эти изменения не ограничиваются настройкой.

Элементы управления Windows Forms инициализируются перед запуском надстроек VSTO уровня приложения ведущим приложением. В этом случае региональные параметры следует изменять до задания элементов управления пользовательского интерфейса.

Установка языковых пакетов

Если у вас есть параметры, отличные от английского языка для Windows, можно установить языковые пакеты среды выполнения набор средств Visual Studio для Office, чтобы просмотреть набор средств Visual Studio для Office сообщения среды выполнения на том же языке, что и Windows. Если пользователи запускают решения с локализованными параметрами для Windows, они должны иметь соответствующий языковой пакет для просмотра сообщений среды выполнения на том же языке. Языковые пакеты среды выполнения набор средств Visual Studio для Office доступны в центре загрузки Майкрософт.

Кроме того, для сообщений ClickOnce необходимы распространяемые языковые пакеты платформы .NET Framework. Языковые пакеты платформа .NET Framework доступны в центре загрузки Майкрософт.

Региональные параметры и com-вызовы Excel

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

Рекомендации по хранению данных

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

Приложения, использующие строковые литералы

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

Excel интерпретирует любые строки в соответствии с идентификатором LCID, передаваемым вместе со строкой. Это может вызывать сложности, если формат строки не соответствует передаваемому LCID. Решения Excel, созданные с помощью средств разработки Office в Visual Studio, используют идентификатор LCID 1033 (en-US) при передаче данных. Excel отображает данные в соответствии с региональными параметрами и языком пользовательского интерфейса Excel. Visual Basic для приложений (VBA) работает аналогично: строки форматируются в соответствии с кодом языка "en-US", а в качестве LCID почти всегда передается значение 0 (данные, не зависящие от языка). Например, следующий код VBA отображает правильно отформатированное значение 12 мая 2004 г. в соответствии с текущим языковым стандартом пользователя:

'VBA
Application.ActiveCell.Value2 = "05/12/04"

При использовании этого кода в решении, созданном с помощью средств разработки Office в Visual Studio, и его передаче в Excel с помощью COM-взаимодействия будут выведены те же результаты при условии, что дата отформатирована в формате "en-US".

Например:

this.Range["A1"].Value2 = "05/12/04";

При возможности следует работать со строго типизированными данными вместо строковых литералов. Например, вместо сохранения даты в строковом литерале можно сохранить ее как Double, после чего преобразовать ее в объект DateTime для последующей обработки.

В примере кода ниже дата, введенная пользователем в ячейке A5, сохраняется как Double, после чего преобразуется в объект DateTime и отображается в ячейке A7. Ячейка A7 должна иметь формат даты.

private void ConvertDate_Click(object sender, EventArgs e)
{
    try
    {
        double dbl = (double)(this.Range["A5"].Value2);
        System.DateTime dt = System.DateTime.FromOADate(dbl);
        this.Range["A7"].Value2 = dt;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Функции листа Excel

Для большинства языковых версий Excel производится внутреннее преобразование имен функций листов. Однако из-за потенциальных проблем с языком и COM-взаимодействием рекомендуется использовать только имена английских функций в коде.

Приложения, использующие внешние данные

Любой код, открывающий или иным образом использующий внешние данные, например файлы, которые содержат разделенные запятыми значения (CSV-файлы), экспортированные из устаревших систем, может работать некорректно, если экспорт таких файлов производится с использованием какого-либо формата, кроме en-US. Это обычно не сказывается на доступе к базам данных, так как все значения представляются в двоичном формате. Исключением являются случаи, когда даты в базе данных сохраняются в виде строк или выполняются операции, не предусматривающие двоичный формат. Кроме того, при построении SQL-запросов, использующих данные Excel, может потребоваться их представление в формате en-US в зависимости от используемой функции.