![](/img/trans.png)
[英]Why is Excel changing my date display value, and how can I prevent it from doing that?
[英]How can I prevent Excel from converting values to date format?
最近(没有人注意到它发生过,如果确实发生过)Excel 正在将一些“ID”类型的值转换为日期。 正如您在此处看到的,值被转换为一些逻辑,其中用户添加了一个列来显示底层值的真正含义,以及它们应该如何表示(原始,无转换):
所以因为在“01”之后有一个“-”,Excel认为“01-”应该是一月,假设最后两个字符代表年份。
在不包含破折号的项目代码中,它们是单独存在的。 如何防止 Excel 以这种方式“有用”并将这些值转换为日期?
为了回应 Scott Craner 的评论,这是我必须写出该值的代码:
using (var memberItemCodeCell = priceComplianceWorksheet.Cells[rowToPopulate, DETAIL_MEMBERITEMCODE_COL])
{
memberItemCodeCell.Style.Font.Size = DATA_FONT_SIZE;
memberItemCodeCell.Value = _memberItemCode;
memberItemCodeCell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
}
...当我尝试通过在单元格名称后键入“for”来弄清楚如何将值格式化为 Text 或 General 时,我看到以下选项:
那么我需要使用什么 - FormatedText (sic) 或 ConditionalFormatting,以及我如何具体设置它们以将列格式化为 Text 或 General,如果这两者中的任何一个是首选?
我认为您想将数字格式更改为文本。
使用“at”字符通过NumberFormat
属性指定文本格式。
memberItemCodeCell.Style.Font.Size = DATA_FONT_SIZE;
memberItemCodeCell.NumberFormat = "@";
memberItemCodeCell.Value = _memberItemCode;
memberItemCodeCell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
另外,对于它的价值,请查看有关Value
和Value2
之间差异的文章/问题。 了解差异并使用正确的差异是很好的。 在你的情况下,我怀疑这很重要。
最终对我有用的是使用这种技术为单元格中的值分配正确的数据类型(调用 ConvertValueToAppropriateTypeAndAssign()),然后在事后根据需要进行格式化:
public static readonly string NUMBER_FORMAT_CURRENCY = "$#,##0.00;($#,##0.00)";
public static readonly string NUMBER_FORMAT_THOUSANDS = "#,##0";
public static readonly string PERCENTAGE_FORMAT = "0.00%;[Red]-0.00%";
public static readonly string NUMBER_FORMAT_TEXT = "@";
public static readonly string NUMBER_FORMAT_DOUBLE = "0.00";
. . .
using (var percentageCell = priceComplianceWorksheet.Cells[rowToPopulate, SUMMARY_PERCENTAGE_COL])
{
ConvertValueToAppropriateTypeAndAssign(percentageCell, totalPercentage);
percentageCell.Style.Numberformat.Format = PERCENTAGE_FORMAT;
}
. . .
// Adapted from https://stackoverflow.com/questions/26483496/is-it-possible-to-ignore-excel-warnings-when-generating-spreadsheets-using-epplu
public static void ConvertValueToAppropriateTypeAndAssign(this ExcelRangeBase range, object value)
{
string strVal = value.ToString();
if (!String.IsNullOrEmpty(strVal))
{
decimal decVal;
double dVal;
int iVal;
if (decimal.TryParse(strVal, out decVal))
range.Value = decVal;
if (double.TryParse(strVal, out dVal))
range.Value = dVal;
else if (Int32.TryParse(strVal, out iVal))
range.Value = iVal;
else
range.Value = strVal;
}
else
range.Value = null;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.