使用GetResponseStream和SpreadsheetDocument.Open读取xls流

时间:2014-05-26 08:25:46

标签: c# excel stream webrequest

我想从服务器读取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();

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

  

不能在不支持搜索的流上操作。

我做错了什么,为什么我不能打开文件?

1 个答案:

答案 0 :(得分:3)

您收到此错误,因为SpreadsheetDocument的Open方法需要seekable stream个对象。您的流变量是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);