2013-11-07 4 views
1

У меня возникли проблемы с форматированием Excel datetimes, так что он работает на международном уровне. Наша программа написана на C++ и использует COM для экспорта данных из нашей базы данных в Excel, и это включает в себя поля datetime.Форматирование даты в формате Excel

Если мы не поставляем маску форматирования, некоторые установки Excel отображают эти даты в виде серийных номеров (дни с 1900 года по 01 января, а затем в качестве 24-часовой доли). Это нечитаемо для человека, поэтому мы выяснили, что мы ДОЛЖНЫ предоставить маску для форматирования даты, чтобы быть уверенным, что она будет доступна для чтения.

Проблема - как я ее вижу - это то, что Excel использует международные маски для форматирования. Например; маска формата даты в Великобритании может быть «ГГГГ-ММ-ДД ЧЧ: ММ».

Но если маска формата отправлена ​​в Excel, установленный в Швеции, она терпит неудачу, поскольку в шведской версии Excel используется «ÅÅÅÅÅ-MM-DD tt: mm».

Это очень непрактично, чтобы иметь 150 различных национальных масок для форматирования даты и времени в нашем приложении для поддержки разных стран.

Есть ли способ написать маски для форматирования, чтобы они включали локаль, чтобы нам разрешили использовать ОДНУ одну маску?

+0

Можно ли спросить ОС или приложение Excel, что такое локализованная маска длительной даты, и что это такое? –

+0

В Excel вы можете получить доступ как к локальному формату даты 'NumberFormatLocal', так и к формату даты в формате' NumberFormat'. Если ваша программа на C++ может взаимодействовать с Excel, вы можете проверить «NumberFormatLocal» на предварительно установленную ячейку, или вы будете работать в кругах таким образом? –

+0

Спасибо, я проверю это.Но я думаю, что это также локализовано, поэтому вам нужно попросить «Краткую дату», если это американский Excel, но «Корт-датам», если это шведский Excel, иначе вы получите мусорный ответ. До сих пор это уловка. :) – LasseSL500

ответ

0

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

Этот комикс: http://xkcd.com/1179/ поможет вам выбрать подходящий для вас стандарт. В противном случае клиенты, открывающие ваш файл в разных странах, будут иметь разные форматированные данные. Просто выберите стандарт и привяжите данные к этому стандарту.

Edited добавить: Есть библиотеки, которые могут сделать это очень легко для а ... http://www.libxl.com/read-write-excel-date-time.html

Edited добавить part2: В основном то, что я пытаюсь получить на это, чтобы не просить для asmk и просто форматируйте данные самостоятельно (если это имеет смысл).

+0

Проблема на самом деле не форматирование. Excel использует макет форматирования во время разбора. – MSalters

+0

Правильно, но вы просто экспортируете данные, так почему это имеет значение, это должен быть только файл fwrite() в CSV-файл или что-то подобное. Это позволит каждой ячейке обрабатываться как строка, и ее открытие в Excel будет выглядеть одинаково независимо от того, ... –

+0

«посмотри», да, но это не очень полезный ответ. Excel обычно используется для расчетов, и вы не можете выполнять вычисления по случайным строкам. – MSalters

0

Я рекомендую сделать следующее: Создайте Excel с форматированием даты в определенной ячейке и сохраните это для своей программы.

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

Если у вас есть несколько форматов для сохранения, просто используйте для них разные ячейки.

Это нехороший способ, но будет работать afaik.

Alteratively вы могли бы рассмотреть возможность создания файла XLA (м), который будет использовать VBA и команду, чтобы накормить обратно локальные символы форматирования с помощью функции, как:

Public Function localChar(charIn As Range) As String 
    localChar = charIn.NumberFormatLocal 
End Function 

Кроме того, не очень чистый метод, но может сделать трюк для вас.

Смежные вопросы