excel - 预定脚本添加到 xlsx 中的新单元格
问题描述
我正在尝试通过监视从网络目录中复制大文件所需的时间来复制最终用户体验。
我Measure-Command
用来查找将项目从网络目录复制到计划此脚本的计算机(使用 Windows 计划程序)并以 xlsx 格式输出时间所需的总时间。
我遇到的问题是,每次该脚本从调度程序(每天)运行时,它都会覆盖前一天的数据,而不是将结果发布到下一个单元格中。当我多次手动运行它时,它工作得很好,并且在彼此下发布了单独的结果。我认为问题在于它是由实例运行的(因此在同一个 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
解决方案
不确定您是否还没有复制所有代码?但看起来你实际上并没有在$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
从此处复制/粘贴(稍作修改):获取 Excel 中使用的最后一个单元格的值
这会告诉您最后一行的数据...所以您需要先将 1 添加到该行,然后再将其设置为 $previousRow 的值:
$previousRow = $previousRow + 1
推荐阅读
- php - 向多个地址发送电子邮件 PHP
- informatica - 如何在 Informatica 中创建审核 Mapplet?
- sql - 如何在 SQL 中将具有重复名称的表展平为具有唯一名称和列/标题的表
- javascript - 根据内容将 div 的 innerHTML 替换为相同的类
- python - 检查字典中的多个整数值,其中字典值是整数列表
- magento - Magento 2 - 可以覆盖第三方模块 system.xml
- excel - Excel 2010 VBA:设置使用 msoFileDialogOpen 打开的工作簿时出现错误 91
- sql-server - DbContext.SubmitChanges() 是否保证插入行的顺序
- jakarta-ee - 在 Websphere 上的 Jee6 应用程序中增加并发调用
- c++ - 从书中学习 C++ 无法让这个程序与类一起工作