【问题标题】:C# HttpResponseMessage/Angularjs - to download as Excel doesnt preserve data alwaysC# HttpResponseMessage/Angularjs - 下载为 Excel 并不总是保留数据
【发布时间】:2017-07-10 18:58:46
【问题描述】:

我可以使用 HttpResponseMessage 下载并设置所有标头参数,如下面的代码摘录所示:

downloadHttpResp.Content = new ByteArrayContent(dwlMemStream.ToArray());
//*******************************************************************************
downloadHttpResp.Content.Headers.Add("x-filename", fileName);
downloadHttpResp.Content.Headers.ContentType = new MediaTypeHeaderValue(mimeType);    
downloadHttpResp.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
downloadHttpResp.Content.Headers.ContentDisposition.FileName = fileName;

问题在于其中一列 - 只是一个文本列(但下载和打开将其视为日期列)。例如我有多个行列值出现为 11 - 05,当下载保存或在 Excel 中打开时,它转换为 Nov 05(就像它的日期一样) .我该如何解决这个问题?有没有其他方法可以克服,或者如果我可以设置的某些标题选项/设置将按原样保留数据并且在接收端不进行转换? 非常感谢任何帮助。

谢谢

【问题讨论】:

  • 正在下载的文件的类型是什么。这看起来像是 Excel 读取文件的问题。例如,如果它是一个 CSV 文件,excel 不知道这些值应该是什么,并且会做出猜测。这使这超出了您的控制范围。如果下载的文件是实际的 excel 文件,那么您需要确保在最初保存/生成时正确配置值类型。

标签: c# angularjs asp.net-web-api httpresponsemessage


【解决方案1】:

你可以尝试在出现之前添加 = 并且你出现在双引号中,如 ="11-05"

【讨论】:

  • 我现在正在为该特定列中的所有值加上双引号。但这不是一个长期的解决方案
  • 这是解决此问题的技巧,另一种方法是将列格式更改为文本并将文件保存为 .xls
  • @user428602 根据您的 cmets 这似乎是一个平面文件,这限制了您可以配置的内容,以了解其他应用程序如何解释您的数据。
【解决方案2】:

这看起来像是 Excel 读取文件的问题。例如,如果它是 CSV 或平面文件,则 excel 不知道这些值是什么并且会做出猜测。

除非您修改输出以避免与 Excel 应用程序发生冲突,否则这将超出您的控制范围

但是,如果要下载的文件是实际的 excel 文件,那么您需要确保在最初保存/生成时正确配置值类型。

【讨论】:

  • 不是Excel文件的问题。我有一个数据读取器,它是我的 webApi 中的存储过程调用的结果,我正在将其写入 html 表,即表 - tr-td,它作为字节数组写入流并下载为 Excel。所以不要明白你在说什么......
  • @user428602 它仍然是一个只有文本的平面文件。文本文件没有格式,因此解释内容的应用程序不知道如何格式化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多