如何在excel中读取单元格数据并输出到命令提示符
我是一名系统管理员,我正在努力学习如何使用powershell。。。我以前从未做过任何类型的脚本编写或编码,我一直在technet脚本中心和在线论坛学习在线教学 我试图完成的是打开一个excel电子表格,从中获取信息(用户名和密码),然后将其输出到powershell中的命令提示符中。不管怎样,当我尝试这样做时,总会收到一个异常调用“InvokeMember”,以下是我迄今为止的代码:如何在excel中读取单元格数据并输出到命令提示符,excel,exception,powershell,Excel,Exception,Powershell,我是一名系统管理员,我正在努力学习如何使用powershell。。。我以前从未做过任何类型的脚本编写或编码,我一直在technet脚本中心和在线论坛学习在线教学 我试图完成的是打开一个excel电子表格,从中获取信息(用户名和密码),然后将其输出到powershell中的命令提示符中。不管怎样,当我尝试这样做时,总会收到一个异常调用“InvokeMember”,以下是我迄今为止的代码: 函数调用([object]$m,[string]$method,$parameters) { $m.PSBa
函数调用([object]$m,[string]$method,$parameters)
{
$m.PSBase.GetType().InvokeMember(
$method,[Reflection.BindingFlags]::InvokeMethod,$null,$m,$parameters,$ciUS)
}
$ciUS=[System.Globalization.CultureInfo]'en-US'
$objExcel=新对象-comobject Excel.Application$objExcel.Visible=$False$objExcel.DisplayAlerts=$False
$OBJWORKEL=Invoke$objExcel.Workbooks.Open“C:\PS\User Data.xls”Write Host“工作表数:$OBJWORKEL.Sheets.Count
$OBJWORKEM=$OBJWORKEM.WORKETS.Item(1)写入主机“工作表:$OBJWORKEM.Name
$Forename=$objWorksheet.Cells.Item(2,1).Text$namname=$objWorksheet.Cells.Item(2,2).Text
写主机名:$Forename写主机名:$name
$objExcel.Quit()如果(ps excel){kill-name excel}
我在论坛上读过许多不同的帖子和文章,都是关于如何尝试绕过en-US问题的,但我似乎无法绕过它,希望这里有人能帮我
下面是我提到的验证问题:
使用“6”参数调用“InvokeMember”时出现异常:“Method”System.Management.Automation.PSMethod.C:\PS\User Data.x
“找不到。”
在C:\PS\excel.ps1:3 char:33
+$m.PSBase.GetType().InvokeMember我发现OLE DB和Office 2007驱动程序更易于使用。如果您没有Office 2007,可以下载
谢谢你的帮助…我已经解决了这个问题!我使用的是PowerShell V2 CTP2,现在我升级到了CTP3。这解决了语言障碍问题,现在我可以运行脚本,而不用担心调用函数,一切都很好
非常感谢
Max有什么原因不能将其保存为CSV文件,PoSh会处理这个文件,而对你来说没有那么有趣吗?Max,我已经回答了你最初关于SF的问题,因为已经有一些讨论了。如果你想回答这个问题,那么我建议在SF上标记这个问题,让主持人移动它,并关闭这个重复的问题。
function Invoke([object]$m, [string]$method, $parameters)
{
$m.PSBase.GetType().InvokeMember(
$method, [Reflection.BindingFlags]::InvokeMethod, $null, $m, $parameters,$ciUS )
}
$ciUS = [System.Globalization.CultureInfo]'en-US'
$objExcel = New-Object -comobject Excel.Application $objExcel.Visible = $False $objExcel.DisplayAlerts = $False
$objWorkbook = Invoke $objExcel.Workbooks.Open "C:\PS\User Data.xls" Write-Host "Numer of worksheets: " $objWorkbook.Sheets.Count
$objWorksheet = $objWorkbook.Worksheets.Item(1) Write-Host "Worksheet: " $objWorksheet.Name
$Forename = $objWorksheet.Cells.Item(2,1).Text $Surname = $objWorksheet.Cells.Item(2,2).Text
Write-Host "Forename: " $Forename Write-Host "Surname: " $Surname
$objExcel.Quit() If (ps excel) { kill -name excel}
Exception calling "InvokeMember" with "6" argument(s): "Method 'System.Management.Automation.PSMethod.C:\PS\User Data.x
ls' not found."
At C:\PS\excel.ps1:3 char:33
+ $m.PSBase.GetType().InvokeMember <<<< (
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
Numer of worksheets: You cannot call a method on a null-valued expression. At C:\PS\excel.ps1:18 char:45 + $objWorksheet = $objWorkbook.Worksheets.Item <<<< (1) + CategoryInfo : InvalidOperation: (Item:String) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull
Worksheet: You cannot call a method on a null-valued expression. At C:\PS\excel.ps1:21 char:37 + $Forename = $objWorksheet.Cells.Item <<<< (2,1).Text + CategoryInfo : InvalidOperation: (Item:String) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull
You cannot call a method on a null-valued expression. At C:\PS\excel.ps1:22 char:36 + $Surname = $objWorksheet.Cells.Item <<<< (2,2).Text + CategoryInfo : InvalidOperation: (Item:String) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull
Forename:
Surname:
$filepath = 'C:\Users\u00\documents\backupset.xlsx'
$connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=`"$filepath`";Extended Properties=`"Excel 12.0 Xml;HDR=YES`";"
#Connection String for Excel 2003:
#$connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=`"$filepath`";Extended Properties=`"Excel 8.0;HDR=Yes;IMEX=1`";"
$qry = 'select * from [sheet1$]'
$conn = New-Object System.Data.OleDb.OleDbConnection
$conn.ConnectionString = $connString
$conn.open()
$cmd = new-object System.Data.OleDb.OleDbCommand($qry,$conn)
$da = new-object System.Data.OleDb.OleDbDataAdapter($cmd)
$dt = new-object System.Data.dataTable
[void]$da.fill($dt)
$conn.close()
$dt