C#在Excel中正确设置文本格式

时间:2018-10-25 13:42:02

标签: c# excel

我有一个控制台应用程序,它创建了多个excel文档,当我将名为period的字符串Jan 19放入单元格A2中时,一切工作正常。

Excel将其更改为Jan-19,当我尝试使用下面的代码更改字段的格式时,没有任何反应。

period = periodDescription.Substring(0, 3) + " 20" + year;
string numberFormat = "General";
xlWorksheet.Cells[2, 1].NumberFormat = numberFormat;
xlWorksheet.Cells[2, 1] = period;

我在做什么错了?

更新:

应该添加我尝试过的

string numberFormat = "";
string numberFormat = "MMM yyyy";

3 个答案:

答案 0 :(得分:0)

常规格式将自动检测日期并相应地设置日期格式。我相信您想要做的是通过在字符串的开头添加一个单引号来显式地将其标记为字符串。

编辑:根据您的最终用途,将输出的格式更改为“ MMM dd”可能更合适。这样会将日期留在单元格中,并设置其格式以显示所需的方式。

答案 1 :(得分:0)

此处的帖子:

Changing excel format

通过以下方式回答问题:

string numberFormat = "@";

答案 2 :(得分:0)

您当然可以通过使用原始文本格式(使用@)来完成所需的操作,但是将字段视为日期可能会有好处,在这种情况下,绝对可以使用该格式。例如,如果您在该字段上以文本形式进行排序,则“ Feb 19”将在“ Jan 19”之前,而这可能不是您想要的。

原始文本解决方案很简单:

ws.Cells[1, 1].NumberFormat = "@";
ws.Cells[1, 1].Value = "Jan 19";

大概是2019年1月,在这种情况下,任何合理的日期格式(基于您的语言环境)都将导致1月以内的日期,然后以mmm yy格式将其表示为“ Jan 19:”。

ws.Cells[2, 1].Value = "1-Jan-2019";
ws.Cells[2, 1].NumberFormat = "mmm yy";

为了证明这是可行的,Excel日期(1900年1月1日之后的天数或类似的日期)的概念甚至应该直接起作用:

ws.Cells[3, 1].Value = "43466";
ws.Cells[3, 1].NumberFormat = "mmm yy";

这最后两种方法将保留您想要的格式,并且仍将单元格视为可进行排序和数学运算的值。

以下是上述三个语句的结果:

enter image description here

有趣的是,我猜测“ Jan-19”可能已翻译成2018年1月19日,我想这不是您想要的。