【问题标题】:xlsx excel cannot open the file because the file format or file extension is not valid - c#xlsx excel无法打开文件,因为文件格式或文件扩展名无效 - c#
【发布时间】:2018-10-25 13:47:09
【问题描述】:

我正在尝试根据 SSRS 报告服务器的响应创建一个 excel 文件,在前端我成功地下载了一个 excel 文件,但是当我打开它时出现错误。

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

代码如下:

  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;

任何帮助将不胜感激。

【问题讨论】:

  • result是什么类型?

标签: c#


【解决方案1】:

假设response 是某种最终发送到浏览器的HTTP 响应对象,并且您在fStream 中有实际的Excel 文件内容,问题是您发送的是Base64 版本的文件作为内容(Excel 不会理解):

        Stream fStream = HttpWResp.GetResponseStream();
        byte[] fileBytes = ReadFully(fStream);
        string fileToAttach = Convert.ToBase64String(fileBytes);
        result.Content = fileToAttach;

由于我看不到response 是什么,我只能说你需要保持文件内容完整。

如果你想发送原始字节,你可以这样做:

        Stream fStream = HttpWResp.GetResponseStream();
        byte[] fileBytes = ReadFully(fStream);
        result.Content = fileBytes;

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

如果result.Content 必须是一个字符串,那么你必须考虑使用哪种编码,它看起来像:

        Stream fStream = HttpWResp.GetResponseStream();
        byte[] fileBytes = ReadFully(fStream);
        result.Content = Encoding.UTF8.GetString(fileBytes);

如果 Excel 需要编码为 UTF-16 (Microsoft uses it quite heavily internally),我不会感到惊讶。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-30
    • 2023-01-19
    • 2020-07-11
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多