计划将脚本添加到xlsx

时间:2018-08-22 01:28:29

标签: excel powershell

我正在尝试通过监视从网络目录复制大文件所需的时间来复制最终用户的体验。

我正在使用Measure-Command来查找将项目从网络目录复制到计划了此脚本的计算机上的总时间(使用Windows Scheduler),并以xlsx格式输出时间。 / p>

我遇到的问题是,每次该脚本从调度程序运行时(每天)运行,它将覆盖前一天的数据,而不是将结果发布到下一个单元格中。当我多次手动运行它时,它工作得很好并且相互之间发布了单独的结果。我认为问题在于实例正在执行(因此,在同一个PowerShell实例中运行几次代码会看到$previousRow可以正常工作,但是在日常计划中,每次它都会打开一个新实例并覆盖(1,1)和(1,2)单元格中的旧数据。

关于如何保存历史数据的任何建议?

$seconds = Measure-Command {
    Copy-Item -Path X:\shareddrive\test.pdf -Destination C:\Users\Me\Desktop
} | select TotalSeconds

$erroractionpreference = "SilentlyContinue"
$a = New-Object -ComObject Excel.Application
$dt = Get-Date -Format "MM/dd/yyyy hh:mm:ss"
$a.Workbooks.Open("X:\shareddrive\output\timesample.xlsx")
$a.Visible = $true
$a.Worksheets.Item(1)

$previousRow += 1
$a.Cells.Item($previousRow,1) = "OfficeLocation - " + $dt
$a.Cells.Item($previousRow,2) =  $seconds.TotalSeconds

$a.ActiveWorkbook.Save()
$a.Workbooks.Close()
$a.Quit()
Remove-Item -Path C:\Users\Me\Desktop\test.pdf

1 个答案:

答案 0 :(得分:0)

不确定是否尚未复制所有代码?但是看来您实际上没有在任何地方定义$previousRow吗?因此,您现有的代码运行$previousRow += 1,并将$previousRow设置为1 ...,这意味着每次代码运行时,它将首先到达第1行

要能够找到其中包含最后信息的行(即,将$ previousValue设置为+ 1的值),可以使用以下代码:

$filepath = "C:\Folder\ExcelFile.xlsx"
$objExcel = New-Object -ComObject Excel.Application
$objExcel.Visible = $False
$WorkBook = $objExcel.Workbooks.Open($filepath)
$WorkSheet = $objExcel.WorkSheets.item(1)
$WorkSheet.activate()

[int]$lastRowvalue = ($WorkSheet.UsedRange.rows.count + 1) - 1
$lastrow = $WorkSheet.Cells.Item($lastRowvalue, 1).Value2
write-host $previousValue 
write-host $lastRowvalue

从此处复制/粘贴(稍作修改):To get the value of last cell used in Excel

这将告诉您数据的最后一行...因此,在将其设置为$ previousRow的值之前,您需要在第一行添加1:

$previousRow = $previousRow + 1