【问题标题】:Save a byte array to excel file将字节数组保存到 excel 文件
【发布时间】:2013-10-19 08:01:19
【问题描述】:

我从 ssrs 报告中得到一个字节数组。然后我想将它保存在服务器上的 Excel 中以供进一步处理。 我可以在客户端浏览器上导出它,但是当尝试将文件保存在服务器上时它会保存。但是打开时出现错误“excel无法打开文件,因为文件格式或文件扩展名无效”。

代码如下

Microsoft.Reporting.WebForms.ReportViewer rview = new Microsoft.Reporting.WebForms.ReportViewer();
//Web Address of your report server (ex: http://rserver/reportserver)

rview.ServerReport.ReportServerUrl = new Uri("http://rserver/reportserver");

rview.ServerReport.ReportPath = "/Report Project2/Comment";
            
string mimeType, encoding, extension, deviceInfo;
string[] streamids;
Microsoft.Reporting.WebForms.Warning[] warnings;
string format = "Excel"; //Desired format goes here (PDF, Excel, or Image)

deviceInfo = "<DeviceInfo>" + "<SimplePageHeaders>True</SimplePageHeaders>" + "</DeviceInfo>";
byte[] bytes = rview.ServerReport.Render(format, deviceInfo, out mimeType, out encoding, out extension, out streamids, out warnings);

try
{         
    System.IO.FileStream _FileStream = new System.IO.FileStream(Server.MapPath("output.xlsx"), System.IO.FileMode.Create, System.IO.FileAccess.Write);  
    _FileStream.Write(bytes, 0, bytes.Length);   
    //_FileStream.Close(); 
}
catch (Exception _Exception)
{
    Console.WriteLine("Exception caught in process: {0}", _Exception.ToString());
}

它不知道如何使用我与 Respose 对象一起使用的 infor 格式、设备信息等在客户端浏览器上保存 excel。

这是我写入响应对象的方式。它工作正常 gor 响应对象。

Response.Clear();

if (format == "PDF")
{
    Response.ContentType = "application/pdf";
    Response.AddHeader("Content-disposition", "filename=output.pdf");
}
else if (format == "Excel")
{
    Response.ContentType = "application/excel";
    Response.AddHeader("Content-disposition", "filename=output.xls");
}
Response.OutputStream.Write(bytes, 0, bytes.Length);
Response.OutputStream.Flush();
Response.OutputStream.Close();
Response.Flush();
Response.Close();

【问题讨论】:

  • 字节数组是 Excel 文件吗?你的代码看起来很像这个例子msdn.microsoft.com/en-us/library/ms252214(v=vs.90).aspx
  • 这是 ssrs 报告。但是我可以通过将其写入excel来将其转换为excel。查看更新的代码。
  • 如果您想将byte[] 写入文件,请使用File.WriteAllBytesstackoverflow.com/a/381529/659190。显然,这不是唯一的方法,而是简单可靠。
  • @Jodrell 在 msdn 链接中将其转换为 .xls 格式。能不能转成.xlsx格式。
  • 您使用的是什么版本的 SSRS?如果您使用的是 2012+,那么您将遇到与 Excel 2003 的兼容性问题。否则,2007+ 版本的 Excel 应该与旧版 Excel 文件兼容。

标签: c# asp.net io


【解决方案1】:

请将扩展名更改为 xls。 xlsx 扩展名用于 EXCELOPENXML 格式,xls 用于 EXCEL 格式

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 1970-01-01
    • 2013-10-27
    • 2011-12-20
    • 2016-09-21
    • 2012-10-24
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多