CSV到现有工作簿中的命名表格

所以我已经有一段时间了,我有各种方法(一些VBA,其他PowerShell)半工半工每…

我试图完成的快速概述是每周导入两个CSV(擦除旧数据,标题始终保持不变,但在两张表之间不同)到同一工作簿中的两个特定的Excel工作表(例如,工作表1,工作表2,计算表格),其中有另一个表格,然后计算数据。 最后我想把它导出为PDF。

完整说明:

每个星期一,两个查询导出为.CSV,比如C:\Users\Me\Desktop\Data1.CSV & C:\Users\Me\Desktop\Data2.CSV

然后,我想将CSV的数据input到工作簿C:\Users\Me\Desktop\Calculation.xlsx各自的工作表(Data1,Data2)

Data1看起来像这样:

 COUNT STATUS OPERATOR PRODUCT WEEK 1 CANCEL BOB Product 1 10 65 CLEAR JIM Product 2 10 20 SEND BOB Product 1 10 58 CC KRIS Product 4 10 3 CLEAR BOB Product 1 10 11 SEND SMIT Product 6 10 6 CANCEL JASON Product 7 10 

Data2将如下所示:

 OPERATOR CLEARS SENDS TOTAL CR WEEK BOB 11 1 12 0.916667 10 JIM 17 2 19 0.894737 10 KRIS 9 1 10 0.9 10 SMITH 22 5 27 0.814815 10 JASON 25 7 32 0.78125 10 

然后计算表将识别数据并相应地处理,然后以PDF格式导出。 接下来的星期一,Windows计时器服务会调用一个.bat文件,然后运行此脚本(VBA或PowerShell),该工具簿会擦除此工作簿中的前几周数据,并从查询中input新数据。

我很开放,写的是哪种语言,我对PowerShell和VBA都有基本的了解和了解。 我没有包括我现在所拥有的代码,因为我已经把这些代码杀了,试图让它在我的需求中工作,因为我已经混合了各种方法,从研究如何做到这一点。

希望我提供了足够的信息,以便有人能指引我正确的方向。

谢谢

编辑

根据克里斯这里的一些代码,我一直在尝试利用,这可能是非常混乱,因为我试图修改它,以满足我的需求,而不是它最初的目的:

 Get-service bits | Select-Object COUNT, STATUS, OPERATOR, PRODUCT, WEEK | Export-Csv 'C:\Users\Me\Desktop\Data1.csv' -NoTypeInformation Get-service bits | Select-Object COUNT, STATUS, OPERATOR, PRODUCT, WEEK | Export-Excel 'C:\Users\Me\Desktop\Calculations.xlsx' $Results = @() Import-Excel -Path 'C:\Users\Me\Desktop\Calculations.xlsx' | foreach { $Properties = @{ COUNT = $PSItem.COUNT STATUS = $PSItem.STATUS OPERATOR = $PSItem.OPERATOR PRODUCT = $PSItem.PRODUCT WEEK = $PSItem.WEEK } $Results += New-Object -TypeName psobject -Property $Properties } Import-Csv -Path 'C:\Users\Me\Desktop\Data1.csv' | foreach { $Properties = @{ COUNT = $PSItem.COUNT STATUS = $PSItem.STATUS OPERATOR = $PSItem.OPERATOR PRODUCT = $PSItem.PRODUCT WEEK = $PSItem.WEEK } $Results += New-Object -TypeName psobject -Property $Properties } $Results | Export-Excel -Path 'C:\Users\Me\Desktop\Calculations.xlsx' 

我试过的另一个例子:

 $Excel = New-Object -ComObject Excel.Application $XLSFile = 'C:\Users\me\Desktop\Calculations.xlxs' $csvFile = 'C:\Users\me\Desktop\Data\Data1.csv' $Excel.Visible = $true $ExcelWorkBook = $Excel.Workbooks.Open($XLSFile) $ExcelWorkSheet = $ExcelWorkBook.sheets.item('Data') $ExcelWorkSheet.Activate() # Go to the first empty row $LastRow = $ExcelWorkSheet.UsedRange.rows.count + 1 Import-Csv -Path $csvFile | ForEach { $ExcelWorkSheet.cells.Item($lastRow,1) = $psitem.COUNT $ExcelWorkSheet.cells.Item($lastRow,2) = $psitem.STATUS $ExcelWorkSheet.cells.Item($lastRow,3) = $psitem.OPERATOR $ExcelWorkSheet.cells.Item($lastRow,4) = $psitem.PRODUCT $ExcelWorkSheet.cells.Item($lastRow,5) = $psitem.WEEK $LastRow = $LastRow + 1 } $ExcelWorkBook.Save() $ExcelWorkBook.Close() $Excel.Quit() $path = "C:\Users\me\Desktop\" $xlFixedFormat = “Microsoft.Office.Interop.Excel.xlFixedFormatType” -as [type] $excelFiles = Get-ChildItem -Path $path -include *.xls, *.xlsx -recurse $objExcel = New-Object -ComObject excel.application $objExcel.visible = $false foreach($wb in $excelFiles) { $filepath = Join-Path -Path $path -ChildPath ($wb.BaseName + " Weekending " +(Get-Date).AddDays(-1).ToString('MMM-dd-yyyy') + “.pdf”) $workbook = $objExcel.workbooks.open($wb.fullname, 3) $workbook.Saved = $true “saving $filepath” $workbook.ExportAsFixedFormat($xlFixedFormat::xlTypePDF, $filepath, 1, 2) $objExcel.Workbooks.close() } $objExcel.Quit() 

最后的例子

 $Excel = New-Object -ComObject Excel.Application $XLSFile = 'C:\Users\me\Desktop\Calculations.xlsx' $csvFile = 'C:\Users\me\Desktop\Data1.csv' $Excel.Visible = $true $ExcelWorkBook = $Excel.Workbooks.Open($XLSFile) $ExcelWorkBook.worksheets.item("Data1").Delete() # Create a new worksheet $ExcelWorkSheet = $ExcelWorkBook.Worksheets.Add() # Set the name for the worksheet $ExcelWorkSheet.Name = "Data1" $ExcelWorkSheet = $ExcelWorkBook.sheets.item('Data1') $ExcelWorkSheet.Activate() # Go to the first empty row Import-Csv -Path $csvFile | ForEach { $ExcelWorkSheet.cells.Item($lastRow,1) = $psitem.COUNT $ExcelWorkSheet.cells.Item($lastRow,2) = $psitem.STATUS $ExcelWorkSheet.cells.Item($lastRow,3) = $psitem.OPERATOR $ExcelWorkSheet.cells.Item($lastRow,4) = $psitem.PRODUCT $ExcelWorkSheet.cells.Item($lastRow,5) = $psitem.WEEK $LastRow = $LastRow + 1 } $ExcelWorkBook.Save() $ExcelWorkBook.Close() $Excel.Quit()