2016-09-29 53 views
3

我正在将数据导出到Excel表单。我有一个名为totalWorkingHours的字段作为字符串,它将小时和分钟保存为“hh:mm”,例如“119:20”。但是,excel将其作为时间戳记读取,并添加了秒数:“119:20:00”。我想删除秒数,并且该值应仅显示为“119:20”。如何限制excel采用其默认时间格式

下面的代码返回内存流,然后将其导出为ex​​cel:

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; 
    } 

U can see the value coming here

Here, how it looks in excel

+0

选择列并手动更改其格式。如果你不能管理,创建自己的为hh:mm –

+0

我不想手动格式化,我的关注是如果我得到像'11:30'字符串格式的数据我希望它保持这样,甚至我不想更改':'分隔符。 – Iqbal

+0

你可以使用你正在使用的plz语言来标记它(看起来像Java?)也可以提供足够的额外代码和一些数据,以便我们可以测试它吗? –

回答

2

我觉得这个很好的解决方案将是你前加一个空格您字符串例如'110:20',这将工作,excel会以字符串格式读取它,并不会将其转换为日期格式。希望你得到解决方案