我想自动执行数据→导入文本文件→文本导入向导的Excel过程
如何找到这些菜单的PowerShell名称?
这是我的代码。我希望它在文件夹(有分隔符)中找到.txt文件,并将它们导入到单独的Excel文件中。
#需要2个或更多文件才能工作。 rubbish.txt必须与其他文件一起放在文件夹中。
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$excel.DisplayAlerts = $false
$path = "S:\DATA EXCHANGE\Testing" #where the original files are
$path2="S:\DATA EXCHANGE\Resurgent\fromSFG\test" #where you want the new files to go
Set-Location $path
$a= Get-ChildItem $path -recurse -include *.txt #only finds the text files
$numOfFiles= $a.count
For ($n=$numOfFiles-1; $n -gt -1; $n--)
{$b=$a[$n].name ;
$z=$path+"/"+$b #finds original file for import
$wb = $excel.Workbooks.OpenText( #the import
$z, # file to open
[Microsoft.Office.Interop.Excel.XlPlatform]::xlWindows,
1, # start from row 1
[Microsoft.Office.Interop.Excel.XlTextParsingType]::xlDelimited,
[Microsoft.Office.Interop.Excel.XlTextQualifier]::xlTextQualifierDoubleQuote,
$false, # Consecutive Delimiter
$true, # tab
$false, # semicolon
$true, # comma
$false, # space
$true, # use other
'|')
$y= $b -replace ".txt.*" #gets filename without extension
$y= $path2+"/"+$y #adds path to filename
#$y= $y+".xlsx" #adds xlsx to filename
if ($b -eq "rubbish.txt") {$Excel.ActiveWorkbook.Close()}
$Excel.ActiveWorkbook.SaveAs("$y")
#$Excel.ActiveWorkbook.Close()
}
#$Excel.Workbooks.Close()
#$Excel.Quit()
答案 0 :(得分:2)
如果我理解了您的问题,那么您正在寻找一种将CSV文件直接导入Excel的方法。
我使用$ excel.workbooks对象的Open()
方法。
$excel = new-object -comobject excel.application
$file = get-item "d:\scripts\test.csv"
$excel.Visible=$true
$excel.displayalerts = $False
$wb = $excel.workbooks.open($file)
如果这不起作用,我会使用我将.CSV文件重命名为.TXT的文件,并使用OpenText
更新使用' |'作为分隔符
$wb = $excel.Workbooks.OpenText(
"mycsv.txt", # file to open
[Microsoft.Office.Interop.Excel.XlPlatform]::xlWindows,
1, # start from row 1
[Microsoft.Office.Interop.Excel.XlTextParsingType]::xlDelimited,
[Microsoft.Office.Interop.Excel.XlTextQualifier]::xlTextQualifierDoubleQuote,
$false, # Consecutive Delimiter
$false, # tab
$false, # semicolon
$false, # comma
$false, # space
$true, # use other
'|')
不要直接将OpenText
与.CSV文件一起使用,先重命名。 Excel似乎与CSV命名文件的工作方式不同。
答案 1 :(得分:1)
菜单项名称是为了方便用户;您看到的标签可能会或可能不会直接对应您需要调用的COM方法。从任何类型的程序(包括PowerShell脚本),您需要与应用程序公开的对象模型进行交互。 Microsoft已将Excel记录在http://msdn.microsoft.com/en-us/library/wss56bz7.aspx
也就是说,根据您使用的文件数量以及您需要使用它们的确切方式,走这条路线可能会非常缓慢而乏味。在许多情况下,将Excel作为ODBC数据源处理并将数据插入电子表格可能会更快,就好像它们是数据库一样。