2016-10-14 5 views
1

кажется, что Excel принимает значения Поручают клетки, такие как «Сен 15» и изменить их «15-сентябрь»Почему Excel меняет значение отображения даты и как я могу предотвратить его выполнение?

У меня есть код, который должен назначить Вал в формате Я хочу (MMM yy):

internal static string GetMMMYYFromYYYYMM(String YYYYMMVal) 
{ 
    // code from http://stackoverflow.com/questions/40045761/how-can-i-convert-a-string-in-the-format-yyyymm-to-mmmyy 
    DateTime intermediateDate = DateTime.ParseExact(YYYYMMVal, "yyyyMM", CultureInfo.InvariantCulture); 
    return intermediateDate.ToString("MMM yy"); 
} 

... называется так:

var monthYearCell = _xlPivotDataSheet.Cells[_lastRowAddedPivotTableData + 1, 4]; 
monthYearCell.Value2 = GetMMMYYFromYYYYMM(MonthYear); 

... но данные по-прежнему записываются/отображается как "YY-МММ", такие как "15-сен"

Я отлаживал значение monthYearCell после двух строк непосредственно над выполнением и обнаружил, что свойство «Текст» объекта monthYearCell действительно «15-Sep»; он "должен" быть "Сен 15", так как это то, что возвращается из вспомогательного метода GetMMMYYFromYYYYMM().

Excel, очевидно, (справа?) Меняет значения с «Сен 15» и т. Д. На «15-Sep» и т. Д. Я считаю, что Excel должен быть «автокорректированием» за кулисами или чем-то еще; это напоминает мне фильм, который я видел однажды («красные», может быть?), где главный герой пошел полубаллистическим, когда его редактор изменил то, что он написал. Я часто так чувствую о Word и Excel. Как я могу сказать Excel (при условии, что это проблема) просто оставить его в покое - «Что я написал, я написал»?

Я попытался изменить значение из формата необработанного "YYYYMM" на то, что я хочу этот путь ранее:

monthField.NumberFormat = "MMM yy"; 

... но что измененные значения, такие как «201509» и «201510» на «сен 51 "для обоих ...?!?

+1

Установить формат ячейки в текст, прежде чем присваивать значение, или предварять значение с ", чтобы указать Excel следует рассматривать как текст. –

+0

Я пробовал: monthYearCell.Format = "Text"; перед присвоением значения свойству Value2 и, хотя он скомпилирован и запущен, я получил ошибку времени выполнения: «System .__ ComObject» не содержит определения для «Формат» –

+0

. Вторая идея сработала: monthYearCell.Value2 = "'" + ReportRunnerConstsAndUtils.GetMMMYYFromYYYYMM (MonthYear); Сделайте этот ответ, и я помечаю его как таковой. –

ответ

1

Если вы добавили значение с помощью «для указания в Excel», его следует рассматривать как текст, тогда он не будет пытаться проанализировать ваше значение в Дате.

+0

Вы можете добавить похожий ответ для 50-процентной щедрости здесь: http://stackoverflow.com/questions/40050213/how-can-i-get-the-members-of-a-pivottable-column-field-to -display-в-естественной-ORD –

0

Я думаю, что это происходит из того, как Excel хранит даты. Это число дней с 01-01-1900. Stored dates in Excel

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

+0

Итак, после присвоения значения, как я хочу, к текстовому значению объекта, что мне нужно сделать, чтобы Excel не мог в полной мере захватить и «улучшить» мою работу? –

+0

Почему у вас есть 60 золотых медалей, 209 серебра и 424 бронзы, а ваша общая репутация составляет всего 38? Как это возможно? Во всяком случае, в Excel должен быть применен формат данных. Можете ли вы просто изменить его на генерал или заставить его быть тем, кем хотите? Щелкните правой кнопкой мыши столбец, выберите «Формат»> «Пользовательский»> «Тип» = «ммм-год». Это должно сделать это. –

1

Он преобразует любую строку в dateTime, когда вы установите поле Excel с форматом даты.

использование:

monthYearCell.NumberFormat = "@"; 

затем использовать:

monthYearCell.Value = GetMMMYYFromYYYYMM(MonthYear);