powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Форматирование дат при выводе в Excel
14 сообщений из 14, страница 1 из 1
Форматирование дат при выводе в Excel
    #32782153
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточнение: вновь созданный лист (без шаблона).
В VB6 было просто: используй форматирование как в нерусифицированном оффисе.
Здесь - срабатывает только так: "ДД ММММ ГГГГ".
И это не все проблемы: если содержимое ячейки - с временем, почему-то формат не срабатывает, так и отображается: "ДД ММММ ГГГГ" вместо цифр.
...
Рейтинг: 0 / 0
Форматирование дат при выводе в Excel
    #32782635
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как то сумбурно написано (ничего не понятно)...
Ясно пока только одно - "ДД ММММ ГГГГ" - какое значение должно получиться при таком форматировании? (типо "12 0012 2004")
...
Рейтинг: 0 / 0
Форматирование дат при выводе в Excel
    #32782808
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типа "12 декабря 2004"

При выводе в Excel из NET формат типа "DD MMMM YYYY" не заработает.

Вместо отформатированного числа увидим символы "DD MMMM YYYY"
Пишем (NumberFormat = "d mmmm, yyyy") результат - как будто не в NumberFormat, а в Value писали

Раньше такого не было, если Excel не может отформатировать, то выведет дату как есть, теперь вместо цифр вот этои символы (что в свойстве NumberFormat записано)
...
Рейтинг: 0 / 0
Форматирование дат при выводе в Excel
    #32783054
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант можно так (у меня получилось)
Код: plaintext
1.
oSheet.Cells( 1 ,  1 ) = Format(CDate("2004-12-20 12:15:18"), "d MMMM, yyyy HH:mm:ss")
P.S. И, даже время видно в Excel...
...
Рейтинг: 0 / 0
Форматирование дат при выводе в Excel
    #32783113
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, покопал в MSDN - на всякий случай (так как незнаю какое значение ты хочешь отформатировать )
Код: plaintext
1.
Dim MyDate As New DateTime( 2000 ,  1 ,  1 ,  0 ,  0 ,  0 )

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

Соответственно, применительно к предыдущему примеру, будет так:
Код: plaintext
1.
2.
Dim MyDate As New DateTime( 2004 ,  12 ,  20 ,  12 ,  15 ,  18 )
oSheet.Cells( 1 ,  1 ) = Format(MyDate, "d MMMM, yyyy HH:mm:ss")

P.S. Желаю удачи...
...
Рейтинг: 0 / 0
Форматирование дат при выводе в Excel
    #32783387
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В цикле по столбцам Excel стоит:

Код: plaintext
1.
Case "Medium Date"
   ws.Range(с).NumberFormat = "Д-МММ-ГГГГ"

НЕ форматирует. Любая дата, содержащая время не форматируется.

Пишу формат из самого Excel - все работает. Можно даже написать 38000 в ячейку - все будет правильно - "14-янв-2004"
...
Рейтинг: 0 / 0
Форматирование дат при выводе в Excel
    #32783420
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты интересный человек, как можно помочь, получая от тебя обрывки непонятного кода... Какое значение ты хочешь отформатировать, откуда ты его берёшь и куда ты хочешь его прописать... Трудно помочь не зная суть проблемы...
P.S. Что, тот код который дал я, тоже не работает???????????
...
Рейтинг: 0 / 0
Форматирование дат при выводе в Excel
    #32783558
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо конечно за отклик, но мне надо форматирование непосредственно на листе Excel. Поясню: Если форматировать например числа не на листе, то единственный способ - записывать их как строки. Это неприемлимо по следующей причине: если выделить все ячейки столбца, то авто сумма Excel не сработает или покажет значения, отличающиеся от итоговой суммы (внизу таблицы). У пользователя создается впечатление, что отчет выводтися неправильно. Особенно, когда в полученный отчет вносят изменения "от руки".
Для дат то же может быть подобная ситуация. Например когда у заказчика есть аналогичная форма "ручного" отчета, где есть встроенные формулы.
Не говоряуже о специальных отчетах, где используется шаблон с формулами

По этому проблема остается: надо вывести дату как есть (в формате Double) и задать формат ячейки.
...
Рейтинг: 0 / 0
Форматирование дат при выводе в Excel
    #32783609
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема задана как "Форматирование дат при выводе в Excel", а теперь выясняется, что нужно "средствами VB.NET задать формат ячейки листа Excel".
Хорошо,
Код: plaintext
1.
ws.Range(с).NumberFormat = "Д-МММ-ГГГГ"
если это работает (хотя непонятно, почему формат задаётся русскими буквами "вероятно ось русская"), для форматирования и вывода даты и времени к этому добавить шаблон даты и времени не пробовал???
Что то типо "Д-МММ-ГГГГ ЧЧ:мм:сс", можно посмотреть в Excel шаблон NumberFormat "Custom".
...
Рейтинг: 0 / 0
Форматирование дат при выводе в Excel
    #32783642
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заговорился малость (пишу урывками в перерывах над другой работой).
Формат по-русски работает и все нормально. Формат латинскими буквами - нет.
Но это и напрягает.
Рядом стоит VB6 - версия программы. Там формат - латинскими и все работает,
и налюбом Office.
В общем главный вопрос как быть: или заставить оффис понимать латинский формат
или проверять языковые установки офиса при запуске программы.
Второй вариант не совсем нравится.
...
Рейтинг: 0 / 0
Форматирование дат при выводе в Excel
    #32783671
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, вот, разговор перешёл вообще в другое русло (оказывается ты всё знал сам, только вводил нас в заблуждение )...
для полного загруза посмотри и это
автор
...проверять языковые установки офиса при запуске программы.
Второй вариант не совсем нравится.

Я думаю, в сфере полученной информации, второй вариант тебе придётся по вкусу, и будет казаться единственным выходом...
P.S. Если вдруг кто то прочёл эту тему до конца, и дошёл до этих слов, расскажите - КАК ПРОВЕРИТЬ ЯЗЫКОВЫЕ УСТАНОВКИ EXCEL ПРИ ЕГО ВЫЗОВЕ ИЗ VB.NET??????
...
Рейтинг: 0 / 0
Форматирование дат при выводе в Excel
    #32783768
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторThe following code checks whether the current thread for the Office application is set to en-US; if it is not, a warning is displayed.

' Visual Basic
If Not (System.Threading.Thread.CurrentThread.CurrentCulture.LCID = _
New System.Globalization.CultureInfo("en-US").LCID) Then

MessageBox.Show("Your current Microsoft Windows regional " & _
"settings do not match the settings required by the custom " & _
"functions in this document. Macros in this document might not "& _
"run or might return incorrect data. Do not change your " & _
"regional settings. Contact your administrator for " & _
"more information.", ThisApplication.Name, _
MsgBoxStyle.OKOnly, MsgBoxStyle.Exclamation)
End If

Нашёл это по этой ссылке
Тока проверить не могу (на работе убил VS.NET), приду домой посмотрю...
...
Рейтинг: 0 / 0
Форматирование дат при выводе в Excel
    #32785580
Алексей Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверь еще метод ToOADate()
...
Рейтинг: 0 / 0
Форматирование дат при выводе в Excel
    #32786021
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Проверь еще метод ToOADate()

Можно поподробнее...
Объясню ситуацию: машины на которых я работаю (как правило) имеют региональные установки "русские". Версия Excel может быть как с русским интерфейсом так и с английским. В первом случае дополнений никаких не надо (всё и так прекрасно срабатывает). Во втором случае необходим следующий код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim oApp As New Excel.Application()
oApp.Visible = True
oApp.UserControl = True
Dim oldCI As System.Globalization.CultureInfo = _
    System.Threading.Thread.CurrentThread.CurrentCulture
System.Threading.Thread.CurrentThread.CurrentCulture = _
    New System.Globalization.CultureInfo("en-US")
oApp.Workbooks.Add()
System.Threading.Thread.CurrentThread.CurrentCulture = oldCI
Вот мне и интересно - как написать универсальный код (что бы срабатывало так и так и не плевалось ошибками типо "Old format or invalid type library"). Подозрение такое, что можно обработать это при отлове ошибок - Try... Catch.. То бишь запускать код не меняя Culture а если выпрыгивает ошибка - то менять програмно системные установки.
P.S. только мне пока, в голову не приходит как это реализовать. Может кто поможет???
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Форматирование дат при выводе в Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]