读取Azure存储中Zip中的Excel文件。C#
我在Azure存储中有一个zip文件,里面有一个Excel文件。我想在不使用C#下载文件的情况下读取excel文件。 我用的是记忆流。代码是:读取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
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文件,您可以在您这边进行测试。