使用内存流

时间:2016-03-14 19:33:01

标签: c# excel azure azure-storage-blobs memorystream

我正在将一个excel文件上传到Azure,我正在关注this网址。 现在我必须用它的URL读取这个excel文件(我不想下载它)。 我这样做

var webRequest = HttpWebRequest.Create("url_of_excel_in_Azure") as HttpWebRequest;
var webResponse = webRequest.GetResponse();

using (var webResponseStream = webResponse.GetResponseStream())
using (var memoryStream = new MemoryStream())
{
    webResponseStream.CopyTo(memoryStream);
    using (var excelPackage = new ExcelPackage(memoryStream))
    {
        var value = excelPackage.Workbook.Worksheets.First().Cells[1, 1].Value;

    }
}

我有一个特定的excel格式,即它只有4列,但是多行,从上面的代码我可以访问第一行的第一列值,如何在这些单元格上应用循环来读取所有4列中的行。 如果我写

  excelPackage.Workbook.Worksheets.First().Cells.Count()

它给了我所有列的计数,包括空白。

我可以跳过这个上传功能,因为我需要从发布的文件中创建DataTable,如果有人可以建议我如何在不上传的情况下从已发布的文件创建数据表,那也会很好。 这是我的Excel格式 excel

2 个答案:

答案 0 :(得分:0)

使用memoryStream.Position = 0回滚流;

答案 1 :(得分:0)

您可以使用以下代码读取所有行的内容并将其放入数据表中。

Excel.Worksheet worksheet = excelPackage.Workbook.Worksheets.get_Item(1);

int iRowCount = worksheet.UsedRange.Rows.Count;
int iColCount = worksheet.UsedRange.Columns.Count;

Excel.Range range;

for (int iRow = 2; iRow <= iRowCount; iRow++) {
    for (int iCol = 1; iCol <= iColCount; iCol++)
        range = (Excel.Range)worksheet.Cells[iRow, iCol];

        string content = range.Text.ToString();
}