从字节数组在Interop.Excel中打开工作簿

时间:2019-04-23 10:20:47

标签: c# office-interop

我想从byte []打开Excel,因为我的文件已加密,我想在解密后打开但不写文件。

Office拥有“受限制的访问权限”,我想在此保护下打开文件,但不将解密后的内容保存在文件中。

myApp.Workbooks.Open仅支持路径。

有可能吗?

2 个答案:

答案 0 :(得分:1)

这是不可能的,因为互操作实际上是程序在计算机上运行和操作现有excel的接口。

我认为您需要使用Microsoft创建的openxml来处理excel word和powerpoint。

DocumentFormat.OpenXml

然后您可以使用:

ExcelPackage excelPackage = new ExcelPackage(stream)

var pck = new OfficeOpenXml.ExcelPackage();
pck.Load(File.OpenRead(path));

pck.Load(Stream)不仅可以从文件中使用任何流作为输入。

取决于您的需求。

答案 1 :(得分:0)

作为OpenXml的替代品,还有ExcelDataReader,根据我的经验,与Interop.Excel相比,它在处理数据方面要快得多(大约3倍以上)。

它也可以直接打开加密的Excel文件(stackoverflow) ExcelDataReader的github页上有一些很好的示例,说明了如何使用它。您唯一要做的是:

此:

using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))

成为这个:

using (var stream = new MemoryStream(yourByte[])

如果您只想打开受密码保护的excel文件,请执行以下操作:

var conf = new ExcelReaderConfiguration { Password = "yourPassword" }; //Add this

excelReader = ExcelReaderFactory.CreateReader(stream, conf); //change the excel Reader to this

请务必查看Github页面以获取更多信息!