**更新(2012.12.13) - 添加了示例代码,输入格式,输出样本
我已经和它斗争了几天,现在,我已经没想完了。我已经成功地对多个XLSX文件测试了一个脚本(并且可以在我面前完成后再上传)。我有连接字符串功能,解析我需要的数据等...
问题在于,当我尝试处理输入文件(从第三方报告应用程序生成)时,不会从工作表中读取数据。
如果我在Excel中打开并保存输入文件(没有格式更改,没有数据输入/删除,根本没有修改),输入文件将处理并解析所有数据。
我尝试在连接字符串中使用多个“扩展属性”设置,但无效,包括HDR =是/否和IMEX = 1.
以前有人见过这样的事吗?
#inputFile_original.xlsx will not parse the data from the worksheet
#inputFile_original_reSaved.xlsx parses the data without any issues
$fileName = "inputFile_original.xlsx"
#$fileName = "inputFile_original_reSaved.xlsx"
$filePath = ".\OLEDB\test\"
#Build the connection string
$ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
$ConnectionString += (Join-Path -Path $filePath -ChildPath $fileName)
$ConnectionString += ";OLE DB Services=-4;Extended Properties="
$ConnectionString += '"Excel 12.0 Xml;HDR=YES;IMEX=1";'
$conn = New-Object System.Data.OleDb.OleDbConnection($ConnectionString)
$conn.Open()
$tables = $conn.GetOleDbSchemaTable([System.Data.OleDb.OleDbSchemaGuid]::tables,$null)
$cmd = New-Object System.Data.OleDb.OleDbCommand("Select * FROM [$($tables.rows[0].TABLE_NAME)]",$conn)
$da = New-Object System.Data.OleDb.OleDbDataAdapter($cmd)
$ds = New-Object System.Data.DataSet
$da.Fill($ds)
#Output the data to the console
$ds.tables
此外,输入文件未以非常容易使用的布局进行格式化。同样,由于是从第三方应用程序生成的。
有空白行,标题行不会从第1行开始。
A B C D E F -------------------------------------------------------------------------- 01 | ReportTitle 02 | 03 | ColHeader1 ColHeader2 ColHeader3 ColHeader4 ColHeader5 ColHeader6 04 | Data Data Data Data Data Data 05 | Data Data Data Data Data Data 06 | Data Data Data Data Data Data 07 | Data Data Data Data Data Data 08 | Data Data Data Data Data Data 09 | 10 | Total: 5
我收到的输出如下所示 (A)原始文件
Report Title : F2 : F3 : F4 : F5 : F6 : Report Title : ColHeader1 F2 : F3 : F4 : F5 : F6 :
(B)重新保存文件
Report Title : F2 : F3 : F4 : F5 : F6 : Report Title : ColHeader1 F2 : ColHeader2 F3 : ColHeader3 F4 : ColHeader4 F5 : ColHeader5 F6 : ColHeader6 Report Title : Data F2 : Data F3 : Data F4 : Data F5 : Data F6 : Data Report Title : Data F2 : Data F3 : Data F4 : Data F5 : Data F6 : Data Report Title : Data F2 : Data F3 : Data F4 : Data F5 : Data F6 : Data Report Title : Data F2 : Data F3 : Data F4 : Data F5 : Data F6 : Data Report Title : Data F2 : Data F3 : Data F4 : Data F5 : Data F6 : Data Report Title : F2 : F3 : F4 : F5 : F6 : Report Title : Total: 5 F2 : F3 : F4 : F5 : F6 :
答案 0 :(得分:0)
不是用OLEDB打开Excel文件,而是可以从Powershell在Excel中打开它们......这是一个快速的样本,只打印工作表的大小。我学到的唯一问题是你每次都必须完全退出Excel并清除它的残余物(最后的GC内容。)
foreach($File in $excelFiles)
{
$excel = New-Object -comobject Excel.Application
$excel.visible = $false
$workbook = $excel.Workbooks.Open($File)
write-host "There are $($workbook.Sheets.count) sheets in $File"
For($i = 1 ; $i -le $workbook.Sheets.count ; $i++)
{
$worksheet = $workbook.sheets.item($i)
$rowMax = ($worksheet.usedRange.rows).count
$columnMax = ($worksheet.usedRange.columns).count
write-host "Sheet $($i) ($($worksheet.Name)) has dimensions $($rowMax) x $($columnMax)"
$worksheet = $rowMax = $columnMax = $null
} #end for
$workbook.close($false)
$workbook = $null
$excel.quit()
$excel = $null
[gc]::collect()
[gc]::WaitForPendingFinalizers()
} #end foreach