Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取Azure存储中Zip中的Excel文件。C#_C#_Excel_Azure_Zip_Azure Storage - Fatal编程技术网

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

读取Azure存储中Zip中的Excel文件。C#,c#,excel,azure,zip,azure-storage,C#,Excel,Azure,Zip,Azure Storage,我在Azure存储中有一个zip文件,里面有一个Excel文件。我想在不使用C#下载文件的情况下读取excel文件。 我用的是记忆流。代码是: public void ReadZipStream(CloudBlockBlob blockBlob) { using (var msZippedBlob = new MemoryStream()) { blockBlob.DownloadToStream(msZippedBlob); using (ZipA

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

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文件中的所有数据。 问题在于蒸汽阅读器。它显示不可读的文本,例如:

������

我了解到StreamReader是文本阅读器,因此无法读取Excel。 那么,还有什么办法呢

或者换句话说,我如何读取Azure中zip文件中的Excel文件? 多谢各位

我了解到StreamReader是文本阅读器,因此无法读取Excel。那么,还有什么办法呢

您可以按如下方式利用读/写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");
                        }
                    }
                }
            }
        }
    }
}
CloudBlockBlob zipblob=新的CloudBlockBlob(新的Uri(“https://brucechen.blob.core.windows.net/brucechen/LogTable.zip"));
使用(var msZippedBlob=newmemoryStream())
{
zipblob.DownloadToStream(msZippedBlob);
使用(ZipArchive zip=new ZipArchive(msZippedBlob))
{
foreach(zip.Entries中的ZipArchiveEntry条目)
{
if(entry.FullName.EndsWith(“.xlsx”,StringComparison.OrdinalIgnoreCase))
{
使用(var stream=entry.Open())
{
var wk=新XSSF工作簿(流);//xls的HSSF工作簿
var sheet=wk.GetSheetAt(0);
IRow row=sheet.GetRow(0);

对于(int i=0;i)xlsx文件本身本质上就是一个zip文件。为什么您希望
TextReader
或任何其他读取器打开.xls文件?Excel文件是包含一些XML内容的压缩归档文件。要打开它,请使用Excel框架,如EPPLUSSN,而不是
DownloadToStream
下载该文件?Excel文件包含以下产品:将手动输入数据库。我不希望它读取它,但我要求提供替代方案。DownloadToStream将文件下载到内存流。意味着它不是本地的。它仍然是虚拟的。感谢您的回答,但它也不起作用。它通过流的异常,它是空的。我已使用h我的示例zip文件,您可以在您这边进行测试。