使用Powershell将表附加到Excel文件的末尾(最后一行)

时间:2011-12-09 22:17:50

标签: excel powershell ms-office

我编写了一个Powershell脚本,用于从Microsoft Word复制表格并将其粘贴到Excel文档中。我想在A列中最后一次使用的行之后追加它。

到目前为止,我得到了这段代码:

$Excel = New-Object -ComObject Excel.Application

$Excel.Visible = $True

$ExcelWordBook = $Excel.Workbooks.Open($ExcelPath)

$ExcelWorkSheet = $Excel.WorkSheets.item("Sheet1")

$ExcelWorkSheet.activate()

这是我感到困惑的地方,我希望能够找到Excel工作表中使用的最后一行。

$lastRow = $ExcelWorkSheet.UsedRange.rows("A").count

$nextRow = $lastRow + 1

$ExcelWorkSheet.Range("A$nextRow").Select

$ExcelWorkSheet.Paste()  

在此之后我觉得我太近了。我试图使用Office Interlop中的UsedRange属性来确定Excel工作表中的最后一行。 (http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.usedrange(v=vs.80).aspx)任何想法?

2 个答案:

答案 0 :(得分:2)

谢谢我最终选择了一条更加动态的路线,而不是使用“A9924082480198”作为范围的终点。

$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $True
$ExcelWordBook = $Excel.Workbooks.Open($ExcelPath)
$ExcelWorkSheet = $Excel.WorkSheets.item("sheet1")
$ExcelWorkSheet.activate()

$lastRow = $ExcelWorkSheet.UsedRange.rows.count + 1
$Excel.Range("A" + $lastrow).Activate()
$ExcelWorksheet.Paste()

答案 1 :(得分:1)

$ExcelWorkSheet.UsedRange返回的对象具有属性rows(不是方法,您不能使用参数)。这意味着$ExcelWorkSheet.UsedRange.rows.count将起作用,但不会给你想要的结果(它将为你提供最长列的las trow的行号)。

要在A列中最后一次使用的单元格后附加内容,请尝试以下操作:

$xldown = -4121 # see: http://msdn.microsoft.com/en-us/library/bb241212(v=office.12).aspx
$xlup = -4162
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $True
$ExcelWordBook = $Excel.Workbooks.Open($ExcelPath)
$ExcelWorkSheet = $Excel.WorkSheets.item("Sheet1")
$ExcelWorkSheet.activate()

# Find the last used cell
$lastRow = $ExcelWorksheet.cells.Range("A1048576").End($xlup).row

$nextRow = $lastRow + 1
$range = $ExcelWorkSheet.Range("A$nextRow")
$ExcelWorkSheet.Paste($range)