【问题标题】:Finding Powershell names for Excel features查找 Excel 功能的 Powershell 名称
【发布时间】:2015-02-13 23:49:14
【问题描述】:

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

【问题讨论】:

    标签: excel powershell methods


    【解决方案1】:

    如果我理解您的问题,您正在寻找一种将 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 命名文件。

    【讨论】:

    • 类似。它不是 csv,而是由 |s 分隔的文本文件,这不是导入中的标准选项。
    • 您可以添加其他分隔符,请参阅此处的OpenText文档:msdn.microsoft.com/en-us/library/…我刚刚更新了代码,但没有测试。
    • 我做错了什么? ($b 保存文件名) $excel.ActiveWorkbook.Opentext($b,,,,, $false, $false,$false,$false,$false, $true, "|", xlTextFormat,,,,,)
    • 你需要使用逗号而不是分号,我也不会使用空参数。
    • 试试我在答案中更新的例子,或者至少从那个开始。
    【解决方案2】:

    菜单项名称是为了方便用户;您在那里看到的标签可能与您需要调用的 COM 方法直接对应,也可能不直接对应。在任何类型的程序(包括 PowerShell 脚本)中,您都需要与应用程序公开的对象模型进行交互。 Microsoft 在http://msdn.microsoft.com/en-us/library/wss56bz7.aspx 上记录了 Excel 文件

    也就是说,根据您正在处理的文件数量以及您需要对它们做什么,走这条路可能会非常缓慢和乏味。在许多情况下,将 Excel 视为 ODBC 数据源并将您的数据插入到电子表格中可能会更快,就像它们是数据库一样。

    【讨论】:

      猜你喜欢
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2021-11-04
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      相关资源
      最近更新 更多