Database 难以通过Powershell连接到Excel 2007密码电子表格
我没有(也不能)在需要访问Excel工作表的系统上安装Excel。根据我所读到的,将其作为数据库访问要快得多 实际上,我正在开发的系统上安装了Office 2012;我知道我需要在运行此脚本的任何系统上安装Office 2007数据访问组件 我在网上发现了相互矛盾的信息(令人震惊!),我想知道我是否遗漏了一些明显的东西。代码很简单:Database 难以通过Powershell连接到Excel 2007密码电子表格,database,excel,powershell,passwords,Database,Excel,Powershell,Passwords,我没有(也不能)在需要访问Excel工作表的系统上安装Excel。根据我所读到的,将其作为数据库访问要快得多 实际上,我正在开发的系统上安装了Office 2012;我知道我需要在运行此脚本的任何系统上安装Office 2007数据访问组件 我在网上发现了相互矛盾的信息(令人震惊!),我想知道我是否遗漏了一些明显的东西。代码很简单: $strFileName = "C:\Users\[my directory]PWS20130821.xlsx"
$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()
这给了我“外部表不是预期的格式”
Provider=Microsoft.ACE.OLEDB.12.0;数据源=C:\Users[my directory]\PWS20130821.xlsx;扩展属性=“Excel 12.0 Xml;IMEX=1;HDR=No”;Jet OLEDB:数据库密码=[已删除,但正确]
卸下IMEX和HDR不会产生任何影响。
将密码加引号(没有空格或特殊字符)不会产生任何影响
我确实发现:“恐怕。除非已在Excel中手动打开电子表格,否则无法打开到受密码保护的电子表格的连接。描述的错误与Excel ODBC提供程序有关,但在Jet 4.0 OLE DB提供程序中行为相同。您的另一个选择是从电子表格中删除密码,并依靠其他安全机制(如限制文件所在文件夹的权限)来控制访问。”
这仍然准确吗?您描述的情况似乎在当前的Excel ADO驱动程序中不受支持: 发件人: 如果以下所有条件均为真,则可能发生此问题:
- 您正在使用Microsoft Excel ODBC驱动程序 -及-
- 为其创建数据源的工作簿受密码保护 -及-
- 正在为其创建数据源的工作簿当前未在Microsoft Excel中打开
KB文章中建议的解决方案建议在执行脚本之前删除密码或在Excel中打开密码(可能未受保护),或者删除密码。还可以从本知识库文章中获得其他信息:
安全注意事项:保护.XLSX文件中的工作簿/工作表只需添加一个
或workbookProtection
标记,即可轻松从文件中删除。换句话说,它可以防止随意阅读/修改文件,但实际上不会对文档进行加密和保护一个整体,很容易被绕过。考虑到这一点,有密码保护的文件是正确的答案吗?也许先删除密码并存储在一个安全的位置进行处理 参考文献:sheetProtection