我正在尝试确定打开受保护的工作表的最佳方法,即使可能的话。我已经对电子表格工具的文档进行了一些研究,但实际上还无法找到解决方案。
我遇到了两个我认为可以提供帮助的选项。 Spreadsheetgear确实具有Unprotect(string password)
方法,但是截至目前,我无法使其正常工作。我让用户在其本地系统上选择一个工作簿并将其上载到服务器。当我尝试打开并读取文件时,页面中断并引发异常
损坏的OpenXML文档。
截至目前,我像这样打开不受保护的工作簿
byte[] file = Session["FileUpload"] as byte[];
using (MemoryStream fileStream = new MemoryStream(file))
{
IWorkbook workbook = Factory.GetWorkbookSet().Workbooks.OpenFromStream(fileStream);
.....
}
这在不受保护的工作簿上可以正常工作,但是在受保护的工作簿上,我得到了损坏的文档错误。理想情况下,我想同时取消保护和打开,但是我不确定如何实现。
OpenFromStream
确实有一个重载,您可以在其中输入一个字符串作为密码,而我尝试过但没有运气。该文档不适用于这些方法,因此我不确定是否正确使用了它们。 最佳答案
更新:
SpreadsheetGear 2017(V8)添加了对用于Open XML(*。xlsx和* .xlsm)文件的新工作表和工作簿保护/加密选项的支持。如果您使用的是SpreadsheetGear 2012,并且无法打开受工作表和/或工作簿保护的文件,请尝试下载SpreadsheetGear 2017(30-day trial for evaluators或Licensed users)。
您可能会遇到一个已知的限制,很快就会解决。 SpreadsheetGear 2012的工作簿和工作表保护的实现基于Excel 2007(ECMA-376第1版)。但是,此后,Microsoft在Open XML(XLSX / XLSM)文件格式规范的更高版本中添加了许多新的工作簿保护选项以及更强的加密形式。 SpreadsheetGear 2012尚未添加对这些新文件格式选项和加密形式的支持,因此,当您尝试打开这些类型的工作簿时,您可能会收到“ Corrupt OpenXML document”或“ Unsupported加密类型”异常。接收。
好消息是,与Excel 2010/2013兼容的密码保护将在SpreadsheetGear V8的下一个主要版本中添加,该版本计划于今年晚些时候发布,尽管这样做的时间表可能会有所缩短。
在V8发布之前,一种解决方法是使用Excel 2010或Excel 2013取消保护任何工作簿和单个工作表,然后使用SpreadsheetGear本身或Excel 2007重新保护这些工作簿/工作表,这将使用较旧的保护/加密选项。还有其他方法可以破解Windows注册表,从而告诉Excel 2010和Excel 2013使用Excel 2007中使用的加密选项来保存工作簿(请参阅此link),但这不是IMO很好的解决方案。