使用 GetResponseStream 和 SpreadsheetDocument.Open 读取 xls 流

Fre*_*ddy 1 c# excel webrequest stream

我想从服务器读取 xls。我成功地使用 WebClient 下载了文件,但现在我想在不保存文件的情况下打开它。

        var request = WebRequest.Create(location);
        var response = request.GetResponse();
        var stream = response.GetResponseStream();
        var document = SpreadsheetDocument.Open(stream, false);
        if (stream != null) stream.Close();
Run Code Online (Sandbox Code Playgroud)

我的代码在 SpreadsheetDocument.Open 上停止,它给出了以下错误:

无法对不支持查找的流进行操作。

我做错了什么,为什么我无法打开文档?

chr*_*isv 5

您收到此错误是因为 SpreadsheetDocument 的 Open 方法需要一个可查找的流对象。您的流变量是NetworkStream 的一个实例,不支持搜索。您必须将网络流复制到本地流(例如MemoryStream)中才能在您的代码中使用它

var request = WebRequest.Create(location);
var response = request.GetResponse();

var memoryStream = new MemoryStream();
using (var networkStream = response.GetResponseStream())
{
    if (networkStream != null)
    {
        // Copy the network stream to an in-memory variable
        networkStream.CopyTo(memoryStream);
        // Move the position of the stream to the beginning
        memoryStream .Seek(0, SeekOrigin.Begin);
    }
}

var document = SpreadsheetDocument.Open(memoryStream , false);
Run Code Online (Sandbox Code Playgroud)