首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于文件格式或文件扩展名无效,xlsx excel无法打开文件- c#。

由于文件格式或文件扩展名无效,xlsx excel无法打开文件- c#。
EN

Stack Overflow用户
提问于 2018-10-25 13:47:09
回答 1查看 2.2K关注 0票数 0

我正在尝试从SSRS报告服务器的响应创建一个excel文件,在前端我成功地能够下载一个excel文件,但是当我打开它时我会得到错误。

由于文件格式或文件扩展名无效,xlsx excel无法打开文件。验证文件没有损坏,并且文件扩展名是否与文件的格式匹配。

以下是代码:

代码语言:javascript
复制
  HttpWebRequest req =
                  (HttpWebRequest)WebRequest.Create(sTargetURL);
            req.PreAuthenticate = true;
            req.Credentials = new System.Net.NetworkCredential(strReportUser, strReportUserPW, strReportUserDomain);
            HttpWebResponse HttpWResp = (HttpWebResponse)req.GetResponse();
            Stream fStream = HttpWResp.GetResponseStream();

            //Now turn around and send this as the response..
            byte[] fileBytes = ReadFully(fStream);

            string fileToAttach = Convert.ToBase64String(fileBytes);
            HttpWResp.Close();

            Stream stream = new MemoryStream(fileBytes);
            result.Content = fileToAttach;
            result.ContentType = "application/vnd.openxmlformats- 
 officedocument.spreadsheetml.sheet";

            result.FileName = fileName + ".xlsx";
            result.result = true;
            return result;

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2018-10-25 13:54:13

假设response是某种类型的HTTP对象,最终被发送到浏览器,并且fStream中有实际的Excel文件内容,那么问题是要将文件的Base64 64‘d版本作为内容发送( Excel不会理解这些内容):

代码语言:javascript
复制
        Stream fStream = HttpWResp.GetResponseStream();
        byte[] fileBytes = ReadFully(fStream);
        string fileToAttach = Convert.ToBase64String(fileBytes);
        result.Content = fileToAttach;

因为我看不清response是什么,所以我只能说,您需要保持文件内容的原样。

如果要发送原始字节,可以执行以下操作:

代码语言:javascript
复制
        Stream fStream = HttpWResp.GetResponseStream();
        byte[] fileBytes = ReadFully(fStream);
        result.Content = fileBytes;

如果您的response能够处理流,这将是理想的方法(那么您不必在流和字节数据之间来回转换它)。

如果result.Content必须是字符串,那么您必须考虑使用哪种编码,它看起来如下所示:

代码语言:javascript
复制
        Stream fStream = HttpWResp.GetResponseStream();
        byte[] fileBytes = ReadFully(fStream);
        result.Content = Encoding.UTF8.GetString(fileBytes);

如果Excel需要被编码为UTF-16 (微软在内部大量使用它。),我不会感到惊讶。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52990921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档