Формат даты

Автор Fiona, 22 июня 2020, 12:08

0 Пользователи и 1 гость просматривают эту тему.

Fiona

Помогите, пожалуйста...
У меня в файле-источнике дата отображается корректно, но при копировании содержимого ячейки в файл-приемник, отображается порядковый номер даты. Если отредактировать формат ячейки, значение принимает удобоваримый вид, но при повторной загрузке снова номер вместо даты. С чем это может быть связано и как это можно исправить?
Спасибо

mikekaganski

Из скриншота видно, что "копирование" - это что-то про макросы? тогда уточните, что за код выполняется. А вообще - вероятно, надо будет просто устанавливать формат ячейки, поскольку дата - это всего лишь число дней с нулевой даты, отформатированное как дата. См., например, здесь.
С уважением,
Михаил Каганский

Fiona

Код:
If (nOpt = 0) Then 'Заменяем
                            sheetIn.GetCellByPosition(nCol, nStartRow + i).Value = sheet.GetCellByPosition(nCol, nStartRow + i).Value
                            sheetIn.GetCellByPosition(nCol, nStartRow + i).String = sheet.GetCellByPosition(nCol, nStartRow + i).String
                            sheetIn.GetCellByPosition(nCol, nStartRow + i).Formula = sheet.GetCellByPosition(nCol, nStartRow + i).Formula
Изначально в Excel было:
sheetIn.GetCellByPosition(nCol, nStartRow + i).Value = sheet.GetCellByPosition(nCol, nStartRow + i).Value
Но не прокатило, потому что LO не везде String = Value , пропадали значения вообще.

Fiona

Забавно... Но результата достигла только явно прописав oCellIn.NumberFormat = oCell.NumberFormat. Причем и для дат, и для числовых значений.

Fiona

Добрый день!

Перенесла шаблон для загрузки (ods) и тестовый файл (xlsm) на astralinux для тестирования. Формат даты "dd.mm.yyyy" при импорте из одной таблицы в другую уродуется в "mm/dd/yyyy". Версия Libre office на Астре 6.2.7.1 - не сильно старая. Посмотрела на форуме, что баг исправлен в 6.1.1 (https://forumooo.ru/index.php/topic,7618.0.html). Как можно исключить изменение формата?

sokol92

Указать в формате ячеек, что этот формат относится к локали "ru". В поле язык формата ячеек вместо "Стандарт - Русский" укажите просто "Русский".
Владимир.

Fiona

По отладчику видно, что и в ячейке-источнике и в ячейке-приемнике стоит локаль ru. В настройках исправила стандарт на русский - эффект нулевой. Попробуем запросить обновление релиза... может все-таки в этом проблема. С трудом верится, что с изменением операционной системы могут быть такие косяки...

Fiona

Что поделаешь... Пришлось опять жестко прописывать формат. Спасибо, Владимир, за помощь...

kompilainenn

Цитата: Fiona от  3 августа 2020, 15:32С трудом верится, что с изменением операционной системы могут быть такие косяки...
если это Астра - легко! Они брали билды от убунты в свое время, в которых встречались странные баги
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

sokol92

Цитата: Fiona от  3 августа 2020, 15:32стоит локаль ru

Тут важна локаль именно для формата ячейки. Проверяем:

Sub TestNumberFormat
  With ThisComponent.getNumberFormats.getByKey(ThisComponent.CurrentSelection.NumberFormat).Locale
    Msgbox "Локаль для формата выделенной ячейки: Language=" & .Language & " Country= " & .Country
  End With
End Sub


Пустые значения говорят о том, что локаль в формате не задана.
Владимир.

Fiona

Ребята, извините, но похоже это никогда не закончится... опять проблема с датой вылезла...
В ячейке стоит дата, в столбце А формируется строка со структурой выгрузки данных в файл csv. И в excel, и в libre в строку пишется числовое значение даты, но excel как-то понимает, что это дата и в csv пишет дату, а calc пишет число... Что делать - ума не приложу... :(

sokol92

Из картинок ничего не понятно. Сформируйте и выложите небольшой пример (с условными данными), в котором будет видна проблема.
При экспорте в формате csv Calc учитывает формат ячеек.
Владимир.

Fiona

Попыталась надергать, суть видно. Запускаем make_csv, выбираем test1.ods, получаем test1.csv. Вижу, что там не все выгрузилось, но вопрос именно к дате. Остальное в оригинале есть.

mikekaganski

Fiona: Вы проверяли свой исходный файл, что там делается? Ну, скажем, что получается в ячейке A9 файла test1.ods?

Ведь Вы сами формируете эти строки. Макрос ни при чём. Вы там сцепляете:

...&";R4="&G9&";R5="&K9&";R6="&L9&...

Ну ведь Вы просто берёте внутреннее значение ячейки и превращаете в строку. А чего Вы ждёте от числовой ячейки?

Если Вам надо как-то форматировать число из ячейки в формуле, не ждите, что формат ячейки Вам поможет. Для этого используйте функцию TEXT.

С уважением,
Михаил Каганский

Fiona

Я не могу сказать, что имею четкое представление, что туда пишется. Переписываю чужой код. Но содержимое ячейки А9 соответсвует исходнику.
Спасибо, Михаил, попробую...