2016-07-27 45 views
-1

我正在尝试完成以下任务。我搜索并找到了一些其他人共享的代码,这些代码似乎只是将每个CVS文件保存在工作表上。所以这里是我试图做的:将2个CVS文件导出到1个Excel工作表和另一个CSV文件到同一个工作簿但不同的工作表

有3个CSV文件,我从SQL结果使用PowerShell创建。我想将前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:

Example of final Workbook image 1

截图2:

Example of final Workbook image 2

我想要的红色如果一个值在这些列

16比0大到20 21〜25 26〜30 30以上

+2

这不是一个*任务*。这是一系列的任务。因此,将它分解成几部分,并在第一部分上工作(将多个文件添加到一张纸上)。当你有这个工作,然后开始努力将第三个文件添加到它自己的工作表。当你有这个工作时,开始着手添加格式。如果你遇到困难,你可以解释你遇到的问题,包括你的代码的**相关**部分,并且询问关于该代码的**特定问题**。期待我们做这一切时,你只是倾销了一堆代码和一些图片是不合理的。 –

+0

认真如果你不这样做每天,手动做 – DisplayName

+0

非常感谢你的意见。我能够把它分开,一次处理每项任务,除了基于关闭条件的颜色编码以外,所有的工作都可以工作。但是,我确实有一个具体的问题,就是如何对来自CSV文件的最后一行进行颜色编码。我总是希望为CSV文件中的最后一行添加颜色代码。 CSV文件中的行数将会改变。我能够得到它的工作,但我的问题是:是否有更高效的编码方式。代码如下在答案中。我无法弄清楚如何将它添加到这个问题 – iam2nd2god

回答

0
$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 
相关问题