难以通过Powershell连接到Excel 2007密码电子表格

我不(也不能)在需要访问Excel工作表的系统上安装Excel。 根据我读到的,以数据库的forms访问它的速度要快得多。

我实际上已经在我正在开发的系统上安装了Office 2012; 我知道我需要在任何运行此脚本的系统上安装Office 2007数据访问组件。

我在网上发现冲突的信息(令人震惊!),我想知道如果我失去了明显的东西。 代码很简单:

$strFileName = "C:\Users\[my directory]PWS20130821.xlsx" $strProvider = "Provider = Microsoft.ACE.OLEDB.12.0" $strDataSource = "Data Source = $strFileName" $strExtend = 'Extended Properties = "Excel 12.0 Xml;IMEX=1;HDR=No"' $passwd = get-ssp $strPass = "Jet OLEDB:Database Password = $passwd" $strConn = "$strProvider;$strDataSource;$strExtend;$strPass" $objConn = New-Object System.Data.OleDb.OleDbConnection($strConn) $objConn.open() 

这给了我“外部表格不是预期的格式”。 我调用$ objConn时的连接string是

提供程序= Microsoft.ACE.OLEDB.12.0;数据源= C:\用户[我的目录] \ PWS20130821.xlsx;扩展属性=“Excel 12.0 Xml; IMEX = 1; HDR =否”; Jet OLEDB:数据库密码=删除,但正确]

去除IMEX和HDR没有任何影响。 将密码放在引号中(没有空格或特殊字符)没有影响。

我确实发现:“我担心,除非您已经在Excel中手动打开电子表格,否则无法打开与受密码保护的电子表格的连接。所述错误与Excel ODBC提供程序有关,但行为在Jet 4.0 OLE DB提供程序,另一个选项是从电子表格中删除密码,并依靠其他安全机制(如限制文件所在文件夹的权限)来控制访问。

这仍然是准确的吗?

看起来您所描述的情况在当前的Excel ADO驱动程序中不受支持:

来自: http : //support.microsoft.com/kb/211378

如果满足所有下列条件,则可能会发生此问题:

  • 您正在使用Microsoft Excel ODBC驱动程序。
  • -和-

  • 您正在为其创build数据源的工作簿受密码保护。
  • -和-

  • 您正在创build数据源的工作簿当前不在Microsoft Excel中打开。

KB文章中提出的解决schemebuild议在执行脚本或删除密码之前删除密码或在Excel中打开密码(并且可能不受保护)。 其他信息也可以从这个知识库文章中获得: http : //support.microsoft.com/kb/257819

安全注意事项:保护.XLSX文件中的工作簿/工作表只需添加一个workbookProtectionsheetProtection标签,该标签很容易从文件中删除。 换句话说,它防止对文件进行随意的细读或修改,但是对整个文件encryption和保护确实没有任何影响,并且很容易被绕过。 有鉴于此,无论如何,密码保护文件是正确的答案? 也许先删除密码,并存储在一个安全的位置进行处理?

参考文献:

  • 侵入受保护的Excel 2007表
  • 侵入受保护的Excel 2007或2010工作簿