【发布时间】:2016-07-27 23:03:11
【问题描述】:
我正在尝试完成以下任务。我已经搜索并找到了一些其他人共享的代码,这些代码似乎可以基本上将每个 CVS 文件保存到其工作表上。所以这就是我想要做的:
有 3 个我使用 PowerShell 从 SQL 结果创建的 CSV 文件。我想获取前 3 个 CSV 文件并将它们复制到 .xslx 上的 1 个工作表,然后我想获取第 3 个 CSV 文件并将其复制到同一个工作簿,但工作表 2。我还想用 set 格式化数据页眉和页脚的颜色,但有条件地取决于其间每一行的数据。
这是我目前的代码:
param (
[string]$InputPath = "C:\Users\bry30794\Documents\PS_Test",
[string]$OutputPath = "C:\Users\bry30794\Documents\PS_Test",
[string]$OutputFile = "test.xlsx"
)
$Excel = New-Object -Com Excel.Application
$Excel.Visible = $False
$Excel.DisplayAlerts = $False
$Workbook = $Excel.Workbooks.Add()
# add 2 additional worksheets
$Workbook.Worksheets.Add() | Out-Null
$Workbook.Worksheets.Add() | Out-Null
##################################################
# Performance_Overall
##################################################
#Use the first worksheet in the workbook
$Worksheet = $Workbook.Worksheets.Item(1)
#Set name
$Worksheet.Name = "Performance_Overall"
$csvFileNameWithPath = "$($InputPath)\test1.csv"
$Tempcsv = $Excel.Workbooks.Open($csvFileNameWithPath)
$Tempsheet = $Tempcsv.Worksheets.Item(1)
#Copy contents of the CSV file
$Tempsheet.UsedRange.Copy() | Out-Null
#Paste contents of CSV into existing workbook
$Worksheet.Paste()
#Close temp workbook
$Tempcsv.Close()
#Select all used cells
$Range = $Worksheet.UsedRange
#Autofit the columns
$Range.EntireColumn.Autofit() | Out-Null
##[void]$ws.Range("A8").PasteSpecial(-4163)
##################################################
# add second view - Performance_by_Region
##################################################
$Worksheet = $Workbook.Worksheets.Item(2)
$Worksheet.Name = "Performance_by_Region"
$csvFileNameWithPath = "$($InputPath)\test2.csv"
$Tempcsv = $Excel.Workbooks.Open($csvFileNameWithPath)
$Tempsheet = $Tempcsv.Worksheets.Item(1)
$Tempsheet.UsedRange.Copy() | Out-Null
$Worksheet.Paste()
$Tempcsv.Close()
$Range = $Worksheet.UsedRange
$Range.EntireColumn.Autofit() | Out-Null
##################################################
# add third view - Performance_by_Category
##################################################
$Worksheet = $Workbook.Worksheets.Item(3)
$Worksheet.Name = "Performance_by_Category"
$csvFileNameWithPath = "$($InputPath)\test3.csv"
$Tempcsv = $Excel.Workbooks.Open($csvFileNameWithPath)
$Tempsheet = $Tempcsv.Worksheets.Item(1)
$Tempsheet.UsedRange.Copy() | Out-Null
$Worksheet.Paste()
$Tempcsv.Close()
$Range = $Worksheet.UsedRange
$Range.EntireColumn.Autofit() | Out-Null
##################################################
# last step - select the sheet that should be shown when
# file is opened in excel
##################################################
$ObjWorksheet = $WorkBook.Worksheets.Item(1)
[void] $ObjWorksheet.Activate()
##################################################
# save
##################################################
$outputFileNameWithPath = "$($OutputPath)\$($OutputFile)"
$Workbook.SaveAs($outputFileNameWithPath, 51) # saved as xlsx file
$Excel.Quit()
这是我想要的最终工作簿的屏幕截图:
屏幕截图 1:
屏幕截图 2:
如果这些列中的值大于 0,我想要红色
16 到 20 21 到 25 26 到 30 超过 30
【问题讨论】:
-
这不是一个任务。这是一系列任务。所以把它分成几个部分,然后处理第一部分(将多个文件添加到一张纸上)。当你有这个工作时,然后开始将第三个文件添加到它自己的工作表中。当你有这个工作时,开始添加格式。如果您在此过程中遇到困难,可以解释您遇到的问题,包括代码的相关部分,并就该代码提出具体问题。当您刚刚转储一堆代码和几张图像时,期望我们做这一切是不合理的。
-
说真的,如果您不每天都这样做,请手动进行
-
非常感谢您的建议。我能够将它全部分解并一次完成每项任务,除了基于关闭条件的颜色编码之外,一切都可以正常工作。但是,我确实对如何对 CSV 文件的最后一行进行颜色编码有一个具体的问题。我总是想对 CSV 文件的最后一行进行颜色编码。 CSV 文件中的行数将发生变化。我能够让它工作,但我的问题是:有没有更有效的编码方式。代码在下面的答案中。我不知道如何将它添加到这个问题中
-
是的。我需要每天运行 3 次。所以我试图让它自动化
标签: excel csv powershell