PowerShell - 将CSV转换为XLSX

时间:2015-06-15 18:03:17

标签: powershell

我在这里找到了这个脚本,请帮助我更好地理解这个。

  1. 脚本的整个“gps”部分是什么?
  2. 此脚本的哪一部分会覆盖原始CSV并在PC的任务管理器列表中进行复制?流程。
  3. 这是做什么的,为什么51? ($ xlOut,51)
  4. 我去寻找“New-Object -com”并且找不到我认为我会找到的东西......不解释-com做什么或者提供-com的参数列表。我发现的只是-comObject。

    (gps excel -ErrorAction SilentlyContinue).count
    $csvpath="C:\path\to\file.csv"
    gps | Export-Csv $csvpath -NoTypeInformation
    $xl=New-Object -com "Excel.Application" 
    $wb=$xl.workbooks.open($csvpath)
    $xlout=$csvpath.Replace('.csv','.xlsx') 
    $wb.SaveAs($xlOut,51) 
    $xl.Quit()
    (gps excel -ErrorAction SilentlyContinue).count
    

2 个答案:

答案 0 :(得分:3)

  

1。什么是脚本的整个“gps”部分?

PS C:\> Get-Alias -Name gps

CommandType     Name                                               ModuleName
-----------     ----                                               ----------
Alias           gps -> Get-Process
  

2。这个脚本的哪一部分是覆盖我的原始CSV并在PC的任务管理器列表中复制?流程。

本声明:

gps | Export-Csv $csvpath -NoTypeInformation
  

3。这是做什么的,为什么51? ($ xlOut,51)

51是xlOpenXMLWorkbook file type的数值,它作为SaveAs()方法的第二个参数传递(因此工作簿以正确的格式保存)。

至于-COM:这是参数-ComObject的缩写。 New-Object默认创建.net对象,但Office应用程序必须实例化为COM对象,因此需要额外的参数。

答案 1 :(得分:1)

  

脚本的整个“gps”部分是什么?

脚本开头和结尾的两个(gps excel -ErrorAction SilentlyContinue).count行计算运行的Excel可执行文件的数量。 gpsget-process的速记别名。您可以通过返回help gps来了解更多信息:

  

NAME
      获取进程

     

概要
      获取在本地计算机或远程计算机上运行的进程。

除了计算运行的Excel进程数并将值输出到控制台之外,这两行没有其他用途。它们不会影响脚本的其余部分,并且似乎是对脚本原始作者的某种形式的完整性检查。

  

此脚本的哪一部分会覆盖原始CSV并在PC的任务管理器列表中复制?过程

下一部分:

$csvpath="C:\path\to\file.csv"
gps | Export-Csv $csvpath -NoTypeInformation

这会将所有正在运行的进程列表和CSV文件导出到$csvpath。这将在每次运行时覆盖$csvpath处的文件。

$xl=New-Object -com "Excel.Application"行告诉PowerShell启动Excel.Application的实例。因为Excel是一个COM对象(或者更准确地说是在自己的进程中运行的COM自动化服务器),-com开关告诉PowerShell它的ProgID是什么。如果您没有-com(或者给它的全名ComObject)切换,那么PowerShell将寻找托管(.NET)类型来实例化。

  

这是做什么的,为什么是51? ($ xlOut,51)

行:

$xlout=$csvpath.Replace('.csv','.xlsx') 

.csv替换$csvpath中的.xlsx扩展名,从而生成新文件名C:\path\to\file.xlsx

$wb.SaveAs($xlOut,51) 

这告诉Excel将工作簿保存在文件$xlout中。 51参数通常是枚举类型的值。在这种情况下,它来自XlFileFormat枚举,特别是XlFileFormat.xlOpenXMLWorkbook