【发布时间】:2021-03-19 14:31:37
【问题描述】:
有没有办法在 C# 中使用 MemoryStream 简单地读取为 excel 文件?我目前正在使用本机微软库Microsoft.Office.Interop.Excel。有没有办法可以用这个库读取 excel 文件?
打开 Excel 文件
using Microsoft.Office.Interop.Excel; // using this namespace
public ExcelHelper(string path)
{
_xlApp = new Application();
_xlWorkbook = _xlApp.Workbooks.Open(path);
}
助手
public static MemoryStream DownloadFile(FtpHandler handler, FtpDirectoryOrFileDetail detail)
{
var fileByte = handler
.Download
.FileByPath(detail.FilePart.Filename, detail.SubFolderPath + "/", false)?.Data;
if (fileByte is null) return stream;
using (var fileStream = new MemoryStream(fileByte))
return fileStream;
return null;
}
问题在于Open 扩展似乎只使用了string 参数而没有MemoryStream 的选项。有没有人遇到这个问题并且能够解决这个问题?我非常愿意接受任何建议。
【问题讨论】:
-
不确定您在这里真正想要做什么,但是如何下载文件已经有很好的记录了。当代码退出 using 块时,using 语句也会处理一次性对象。所以在这里你要返回一个已处理的流。我认为它永远不会起作用
-
好吧,@Steve 你有道理,但我可以为此做一个解决方法。此外,我主要关心的是如何使用内存流读取 excel 文件?您对如何做到这一点有任何想法吗?
-
“我非常愿意接受任何建议” 如果您不需要支持较旧的 Excel 格式 (xls),我建议您使用任何 3rd-party 库这是基于 OpenXML 的。您将获得更大的灵活性,您的用户甚至不需要安装 Office。例如,检查ClosedXML。它允许您使用路径或using a stream 打开 Excel 文件。
-
如果必须使用 Excel 对象库,最好的选择是将流实际写入磁盘,然后将文件路径传递给
WorkBooks.Open()方法。 -
也许在这里看到 VDWWD 的答案:stackoverflow.com/questions/560435/… - EPPlus 库可以从流中读取 excel。如果您认为该问题有一些很好的相关答案,可以将此问题标记为它的副本..