首页 文章

在Azure存储中的Zip中读取Excel文件 . C#

提问于
浏览
-1

我在Azure存储中有一个zip文件,里面有一个Excel文件 . 我想在不使用C#下载文件的情况下读取excel文件 . 我正在使用MemoryStream . 代码是:

public void ReadZipStream(CloudBlockBlob blockBlob)
{
    using (var msZippedBlob = new MemoryStream())
    {
       blockBlob.DownloadToStream(msZippedBlob);

       using (ZipArchive zip = new ZipArchive(msZippedBlob))
       {
           foreach (ZipArchiveEntry entry in zip.Entries)
           {
               if (entry.FullName.EndsWith(".xlsx", StringComparison.OrdinalIgnoreCase))
               {
                  using (StreamReader sr = new StreamReader(entry.Open()))
                  {
                       // sr
                  }
               }
           }
       }
    }
}

ZipArchive正常工作,它显示zip文件中的所有数据 . 问题出在SteamReader上 . 它显示了一个不可读的文本,如下所示:

我读到StreamReader是一个文本阅读器,所以它无法读取Excel . 那么它的替代方案是什么呢?

或者以另一种方式,如何在Azure中的zip文件中读取Excel文件?谢谢 .

1 回答

  • 0

    我读到StreamReader是一个文本阅读器,所以它无法读取Excel . 那么它的替代方案是什么呢?

    您可以将NPOI用于读/写xls,xlsx,如下所示:

    CloudBlockBlob zipblob = new CloudBlockBlob(new Uri("https://brucechen.blob.core.windows.net/brucechen/LogTable.zip"));
    using (var msZippedBlob = new MemoryStream())
    {
        zipblob.DownloadToStream(msZippedBlob);
        using (ZipArchive zip = new ZipArchive(msZippedBlob))
        {
            foreach (ZipArchiveEntry entry in zip.Entries)
            {
                if (entry.FullName.EndsWith(".xlsx", StringComparison.OrdinalIgnoreCase))
                {
                    using (var stream = entry.Open())
                    {
                        var wk = new XSSFWorkbook(stream); //HSSFWorkbook for xls
                        var sheet = wk.GetSheetAt(0);
                        IRow row = sheet.GetRow(0);
                        for (int i = 0; i <= sheet.LastRowNum; i++)
                        {
                            row = sheet.GetRow(i);
                            if (row != null)
                            {
                                for (int j = 0; j < row.LastCellNum; j++)
                                {
                                    string value = row.GetCell(j).ToString();
                                    Console.Write(value.ToString() + " ");
                                }
                                Console.WriteLine("\n");
                            }
                        }
                    }
                }
            }
        }
    }
    

    Result

    enter image description here

    或者以另一种方式,如何在Azure中的zip文件中读取Excel文件?

    AFAIK,根据您的情况,没有更好的方法来实现它 . 此外,您还可以参考SpreadsheetLightAspose.Cells for .NET等 .

相关问题