Я работаю с файлами Excel, которые готовлю на сервере, а затем копирую локально, чтобы их можно было отправить по электронной почте. Я обнаружил, что после того, как я скопирую готовые файлы на свой локальный компьютер, установка Excel на моем локальном компьютере должна интерпретировать даты иначе, чем установка на сервере.
Microsoft® Excel® 2016 (16.0.5443.1000) MSO (версия 2402, сборка 16.0.5443.1001) 32-разрядная версия
Microsoft® Excel® для Microsoft 365 MSO (версия 2402, сборка 16.0.17328.20282), 64-разрядная версия
В обоих файлах указанная ячейка J4 содержит дату 01.05.2024. Сервер выглядит американским и думает, что сегодня 1 мая, а моя машина, должно быть, британская и видит 5 января. Я живу в Великобритании, но работаю с американским программным обеспечением, поэтому ячейку действительно следует интерпретировать как 1 мая. В любом случае мне бы хотелось, чтобы все было единообразным, чтобы я мог подготовить файлы и отправить их по электронной почте.
Спасибо за ответ. Это просто текст, похожий на дату. Но вот как выводятся данные и с чем мне приходится работать. И Excel удается правильно интерпретировать ее как дату EOMONTH, просто он интерпретирует ее по-разному в разных моих установках Excel. Вы правы насчет ТЕКСТА, я изменю формат даты для этих ячеек на правильное.
Да, это будет твоей проблемой. EOMONTH неявно преобразует текст в тип данных даты. На сервере для преобразования используются американские региональные настройки. На вашем компьютере для преобразования используются региональные настройки Великобритании. Если вы не можете изменить источник, вам придется явно преобразовать дату, используя манипуляции со строками и функцию DATE. Это отстой, но, вероятно, это единственный способ, если только вы не измените свою локальную машину на американскую.
Мне придется написать что-то громоздкое, чтобы разобрать строку и привести ее в правильный формат — спасибо за идею. Я не думаю, что вы знаете, как изменить стандартные форматы даты в Excel?
Я думаю, что он использует региональные настройки машины. Я не знаю, есть ли способ это обойти. Также может быть функция, позволяющая указать формат даты при преобразовании из строки. Я тоже этого не знаю. Всегда много способов решения проблемы.
Мне любопытно узнать, что вернет CELL для J4 при просмотре файла на сервере и локально. Если у вас есть время, не могли бы вы опубликовать результаты =CONCATENATE("format: ",CELL("format",J4), " type: ", CELL("type",J4))?
Поскольку вы готовите Excel на сервере, просто сохраните/скопируйте значения дат как даты, а не как текстовые строки. Даты хранятся в виде чисел и будут правильно интерпретироваться как правильная дата независимо от региональных настроек.
@nkalvi Конечно, вот результаты: Сервер: 'формат: тип G: l' Локальный: 'формат: тип D1: l'
Спасибо, Рафаэль. Я предполагаю, что это один и тот же файл, который вы открыли в обоих местах; хотя тип является текстовой константой в обоих случаях, я не уверен, почему он интерпретируется как общий на сервере и как дата локально. D1 означает «д-ммм-гг или дд-ммм-гг», используя CELL вы можете улучшить формулу.


Поскольку значение J4 является строковым значением, Excel неявно преобразует это значение в дату в функции EOMONTH. Неявное преобразование на сервере использует региональные настройки для Америки. Неявное преобразование на локальном компьютере использует региональные настройки Великобритании.
Одним из возможных решений является использование манипуляций со строками и предположение, что источник всегда будет в американском формате даты.
Попробуй это:
= EOMONTH( DATE( VALUE( RIGHT( J4, 4 ) )
, VALUE( LEFT( J4, 2 ) )
, VALUE( MID( J4, 4, 2 ) ) ), 0 )
Для меня это был эффективный обходной путь
Является ли J4 на самом деле датой или это текстовое значение, похожее на дату? Первое, что я хотел бы проверить, это убедиться, что значение J4 сохраняется в ячейке как дата, а не как текстовое значение. Кроме того, для получения нужного формата даты, вероятно, лучше использовать форматирование ячеек, а не
TEXT(), поскольку функция создает строковый тип данных, а не тип данных даты.