【问题标题】:Export 2 CVS files to 1 Excel worksheet and another CSV file to the same workbook but different sheet将 2 个 CVS 文件导出到 1 个 Excel 工作表,将另一个 CSV 文件导出到同一个工作簿但不同的工作表
【发布时间】: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


【解决方案1】:
$LastRow = $serverInfoSheet.UsedRange.rows.count
Write-Output $LastRow
$serverInfoSheet.Cells.Item($LastRow,$Column).Interior.ColorIndex = 15
$Column++
$serverInfoSheet.Cells.Item($LastRow,$Column).Interior.ColorIndex = 15
$Column++
$serverInfoSheet.Cells.Item($LastRow,$Column).Interior.ColorIndex = 15
$Column++
$serverInfoSheet.Cells.Item($LastRow,$Column).Interior.ColorIndex = 15
$Column++
$serverInfoSheet.Cells.Item($LastRow,$Column).Interior.ColorIndex = 15
$Column++
$serverInfoSheet.Cells.Item($LastRow,$Column).Interior.ColorIndex = 15
$Column++
$serverInfoSheet.Cells.Item($LastRow,$Column).Interior.ColorIndex = 15
$Column++
$serverInfoSheet.Cells.Item($LastRow,$Column).Interior.ColorIndex = 15
$Column++
$serverInfoSheet.Cells.Item($LastRow,$Column).Interior.ColorIndex = 15

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多