在我的c#应用程序中,我使用OLEDB连接字符串" Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.xls;Extended Properties=\"Excel 8.0;HDR=NO;ReadOnly=true;IMEX=1\""来读取Excel文件.为了读取受密码保护的文件,我尝试在连接字符串中添加密码字段但无法读取文件.我想知道有没有办法使用OLEDB读取密码保护的Excel文件,如果我事先知道它的密码.
以下是连接到Excel文件的不同方法,包括OLEDB.据此,您无法使用标准方法打开受密码保护的文件.您必须使用变通方法.
如果Excel工作簿受密码保护,则无法打开它以进行数据访问,即使通过连接字符串提供正确的密码也是如此.如果您尝试,您会收到以下错误消息:"无法解密文件.
这是解决方案,虽然不在C#中,但您可以轻松地根据您的目的进行调整.
如果您自己不知道密码,另一种方法是在没有密码的情况下重写文件.您可以使用这个方便的项目并添加以下例程:
public void SaveFile()
{
this.excelWorkbook.SaveAs(
this.excelWorkbook.FullName,
vk_format,
"",
vk_write_res_password,
vk_read_only,
null,
Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
null,
vk_add_to_mru,
null,null,vk_local);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您使用查询来读取excel文件,那么某些工作表是否受到保护并不重要:它可以正常工作.
private string ExcelConnection(string fileName)
{
return
@"Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data Source=" + fileName + ";" +
@"Extended Properties=" + Convert.ToChar(34).ToString() +
@"Excel 8.0" + Convert.ToChar(34).ToString() + ";";
}
private DataTable readExcel(string fileName, string sql)
{
OleDbConnection conn = new OleDbConnection(ExcelConnection(fileName));
OleDbCommand cmd = new OleDbCommand(sql, conn);
OleDbDataAdapter adp = new OleDbDataAdapter();
adp.SelectCommand = cmd;
DataTable dt = new DataTable();
try
{
adp.FillSchema(dt, SchemaType.Source);
adp.Fill(dt);
}
catch
{
}
return dt;
}
Run Code Online (Sandbox Code Playgroud)