首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确关闭Excel.Application?

如何正确关闭Excel.Application?
EN

Stack Overflow用户
提问于 2018-11-08 20:12:08
回答 1查看 2.7K关注 0票数 2

我有一个小脚本,它允许我将多个.csv合并为一个.xlsx:

代码语言:javascript
复制
$path = "C:\Users\FrancescoM\Desktop\CSV\Results\*"
$csvs = Get-ChildItem $path -Include *.csv
$y = $csvs.Count
Write-Host "Detected the following CSV files: ($y)"
Write-Host " "$csvs.Name"`n"
$outputfilename = "Final Registry Results"
Write-Host Creating: $outputfilename
$excelapp = New-Object -ComObject Excel.Application
$excelapp.SheetsInNewWorkbook = $csvs.Count
$xlsx = $excelapp.Workbooks.Add()
for ($i=1; $i -le $y; $i++) {
    $worksheet = $xlsx.Worksheets.Item($i)
    $worksheet.Name = $csvs[$i-1].Name
    $file = (Import-Csv $csvs[$i-1].FullName)
    $file | ConvertTo-Csv -Delimiter "`t" -NoTypeInformation | Clip
    $worksheet.Cells.Item(1).PasteSpecial() | Out-Null
}

$output = "Results.xlsx"
$xlsx.SaveAs($output)
$excelapp.Quit()

如果我一旦运行了它,它就会完美地工作,并创建我的"Results.xlsx“文件。

但是,如果然后删除 "Results.xlsx“文件并再次运行代码,则会收到以下错误:

这个位置已经存在一个名为“Results.xlsx”的文件。你想更换它吗?

但是很明显,文件已经不在那里了。我想我用错误的方式关闭了Excel.Application。怎么把它关好?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-11 10:28:40

正如Ansgar评论的那样,最好为这段代码$output = "Results.xlsx"使用完整的路径和文件名,否则输出将被写入Excel的当前目录,这可能不是您所期望的。

要回答如何正确关闭Excel.Application?的问题,您不仅需要在完成时退出Excel,还需要释放代码中使用的Com对象。你是这样做的:

代码语言:javascript
复制
$excelapp.Quit()

# release the WorkSheet Com object
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($xlsx) | Out-Null
# release the Excel.Application Com object
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excelapp) | Out-Null 
# Force garbage collection
[System.GC]::Collect()
# Suspend the current thread until the thread that is processing the queue of finalizers has emptied that queue.
[System.GC]::WaitForPendingFinalizers()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53215424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档