使用C#打开带密码的EXCEL文件(.xlsx)

5
我尝试打开受密码保护的.xlsx文件(Excel 2007格式),而不需要手动输入密码。我已经安装了Excel 2003和Microsoft Office兼容性包,在打开文件时会进行转换。
以下代码可以工作,但会提示输入密码。
Microsoft.Office.Interop.Excel.Application ExcelApp;
Microsoft.Office.Interop.Excel.Workbook ExcelWorkbook;
ExcelApp = new Microsoft.Office.Interop.Excel.Application();           
Object pwd = "xxx";
Object MissingValue = System.Reflection.Missing.Value;
ExcelWorkbook = ExcelApp.Workbooks.Open("C:\\temp\\test.xlsx",MissingValue, MissingValue, MissingValue,pwd);

如果我使用相同的代码打开.xls文件(Excel 2003),则可以在不提示密码的情况下正常工作。打开没有密码保护的.xlsx文件也没有问题。

如何使用 Excel 2003 和 Microsoft Office 兼容性包打开受密码保护的.xlsx文件而无需提示输入密码?

类似问题的讨论中可以找到解决方法,将只读参数(第三个参数)改为 true 即可。

ExcelWorkbook = ExcelApp.Workbooks.Open("C:\\temp\\test.xlsx",MissingValue, true, MissingValue,pwd);

这里不起作用。


不,这有点不同,那里设置只读参数的解决方案在这里不起作用。这里的问题是使用Microsoft Office兼容性包。 - tonirush
1
那个问题/答案暗示在调用Open时指定了进一步的“MissingValue”参数。你尝试过添加与该问题/答案中相同数量的参数吗? - ChrisF
1
你为什么要通过Interop打开文件?你真的想打开Excel应用程序吗?如果你只想从文件中读取数据,使用像EPPlus这样的库直接从文件中读取。你可以使用OOXML SDK,但EPPlus使得读写Excel表格更加容易。 - Panagiotis Kanavos
1
另一个你可能想尝试的选择是GemBox.Spreadsheet,你可以在这里找到如何读取受保护的XLSX文件。 - Mario Z
@ChrisF:是的,我试过了,但行为还是一样的。 - tonirush
显示剩余4条评论
2个回答

13

可能有点晚了,但对于任何未来遇到Interop的人来说,对我而言它是这样工作的:

要打开以进行编写

var WFile = new Excel.Application();
Excel.Workbook Wbook = WFile.Workbooks.Open("myFilepath", ReadOnly: false, Password: "mypassword");

只读打开的方式

var WFile = new Excel.Application();
Excel.Workbook Wbook = WFile.Workbooks.Open("myFilepath", ReadOnly: true, Password: "mypassword");

0

@J1mm1995的答案适用于以只读方式打开文件,并且在您想要以修改模式打开Excel文件(ReadOnly设置为false)时无法打开某些Excel文件。

我理解这是因为Workbooks.Open()方法也希望您指定WritePassword。以下代码对我有效:

var WFile = new Excel.Application();
Excel.Workbook Wbook = WFile.Workbooks.Open(path,  ReadOnly: false, Password: "mypassword", WriteResPassword: "mypassword");


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接