查找Excel功能的Powershell名称

时间:2014-12-15 19:24:32

标签: excel powershell methods

我想自动执行数据→导入文本文件→文本导入向导的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()

2 个答案:

答案 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数据源处理并将数据插入电子表格可能会更快,就好像它们是数据库一样。