Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 难以通过Powershell连接到Excel 2007密码电子表格_Database_Excel_Powershell_Passwords - Fatal编程技术网

Database 难以通过Powershell连接到Excel 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"

我没有(也不能)在需要访问Excel工作表的系统上安装Excel。根据我所读到的,将其作为数据库访问要快得多

实际上,我正在开发的系统上安装了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()
这给了我“外部表不是预期的格式”

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
    标记,即可轻松从文件中删除。换句话说,它可以防止随意阅读/修改文件,但实际上不会对文档进行加密和保护一个整体,很容易被绕过。考虑到这一点,有密码保护的文件是正确的答案吗?也许先删除密码并存储在一个安全的位置进行处理

    参考文献:


对于没有密码的工作簿,此方法在您的环境中是否有效?我很好奇这是否是一个更广泛的Excel问题或密码有什么特殊之处。我验证了如果Excel工作表处于打开状态,此代码是否有效。然后我检查了您的建议-如果工作表未受到保护,此代码是否有效。