Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何限制excel采用默认时间格式_C#_Excel - Fatal编程技术网

C# 如何限制excel采用默认时间格式

C# 如何限制excel采用默认时间格式,c#,excel,C#,Excel,我正在将数据导出到excel工作表。我有一个名为totalWorkingHours的字段作为字符串,它将小时和分钟保存为“hh:mm”,例如“119:20”。然而,excel将其读取为时间戳,并在其中添加秒数:“119:20:00”。我想删除秒数,该值应仅显示为“119:20” 以下代码返回内存流,然后将其导出到excel: public static MemoryStream GetCSV(string[] fieldsToExpose, DataTable data) {

我正在将数据导出到excel工作表。我有一个名为totalWorkingHours的字段作为字符串,它将小时和分钟保存为“hh:mm”,例如“119:20”。然而,excel将其读取为时间戳,并在其中添加秒数:“119:20:00”。我想删除秒数,该值应仅显示为“119:20”

以下代码返回内存流,然后将其导出到excel:

   public static MemoryStream GetCSV(string[] fieldsToExpose, DataTable data)
   {
       MemoryStream stream = new MemoryStream();

       using (var writer = new StreamWriter(stream))
       {
           for (int i = 0; i < fieldsToExpose.Length; i++)
           {
               if (i != 0) { writer.Write(","); }
               writer.Write("\"");
               writer.Write(fieldsToExpose[i].Replace("\"", "\"\""));
               writer.Write("\"");
           }
           writer.Write("\n");

           foreach (DataRow row in data.Rows)
           {
               for (int i = 0; i < fieldsToExpose.Length; i++)
               {
                   if (i != 0) { writer.Write(","); }
                   writer.Write("\"");

                   if (row[fieldsToExpose[i]].GetType() == typeof(DateTime))
                   {
                       var Val = (DateTime)row[fieldsToExpose[i]];
                       string output = Val.ToString("dd-MMM-yyyy hh:mm");
                       if (Val.TimeOfDay == new TimeSpan(0, 0, 0))
                       {
                           output = Val.ToString("dd-MMM-yyyy");
                       }
                       writer.Write(output.Replace("\"", "\"\""));
                   }
                   else
                   {
                       writer.Write(row[fieldsToExpose[i]].ToString().Replace("\"", "\"\""));
                   }
                   writer.Write("\"");
               }
               writer.Write("\n");
           }
       }
       return stream;
   }
publicstaticmemorystream GetCSV(字符串[]fieldsToExpose,数据表数据)
{
MemoryStream stream=新的MemoryStream();
使用(var writer=新的StreamWriter(流))
{
for(int i=0;i


我认为最好的解决方案是在字符串前添加一个空格,例如'110:20',这样会起作用,excel会以字符串格式读取,不会将其转换为日期格式。希望您得到解决方案

选择列并手动更改其格式。如果您无法管理,请创建自己的hh:mmI我不想手动格式化它,我关心的是如果我以字符串格式获取数据,比如“11:30”,我希望它保持这样,甚至我不想更改“:”分隔符。你能用你正在使用的语言plz(看起来像Java)标记它吗另外,是否可以提供足够的额外代码和一点数据,以便我们对其进行测试?如果是vba,
range(M:M)。NumberFormat=“[h]:mm“
可以。如果要将值保留为文本字符串,则需要先将单元格格式化为文本,然后再将数据放入其中。当然,Excel在这样做任何数学函数时都会遇到问题。