以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何终止excel进程  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=53753)

--  作者:zhangchi96
--  发布时间:2014/7/14 21:29:00
--  如何终止excel进程

先上一段控件程序

 

\'(1)--- 清空
With DataTables("财政统发在职")
    .DataRows.Clear()
End With
DataTables("财政统发在职").save()

 

Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls" \'设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    FileSys.CopyFile( dlg.FileName,"d:\\财政导出表.xls" ,True)  \'复制表
    \'---- 下面开始删除表的前两行
    Dim App As New MSExcel.Application
    Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open("d:\\财政导出表.xls" )
    Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)\'指定工作
    \'    ws.rows("1:2").delete(MSExcel.XlDirection.xlUp)
    ws.rows("1:2").delete(MSExcel.XlDirection.xlUp)
    wb.Save
    app.quit
End If

 

\' --- 合并数据的代码
If FileSys.FileExists( "d:\\财政导出表.xls" ) Then \'如果指定的文件存在
    Dim mg As New Merger
    mg.SourcePath = "d:\\财政导出表.xls"   \'指定数据文件
    mg.Format = "excel" \'指定格式
    mg.SourceTableName = "sheet1$" \'指定要合并的表
    mg.DataTableName = "财政统发在职" \'指定接收数据的表
    \'以下语句的格式示范:   mg.FieldMaps.Add(原表的列名,现表的列名)
    mg.FieldMaps.Add("单位名称","单位名称")
    mg.FieldMaps.Add("部门名称","部门名称")
    mg.FieldMaps.Add("姓名","姓名")
    mg.FieldMaps.Add("性别","性别")
    mg.Merge() \'开始合并
End If

以上代码使用时一切正常,但再次使用时提示,系统提示:进程无法终止 "d:\\财政导出表.xls“,

在[任务管理器]中,找到excel.exe进程,然后选择【结束进程】,再次使用以上代码,一切正常。

 

请教,如果在代码中加入终止excel.exe进程的命令?

[此贴子已经被作者于2014-7-14 21:29:57编辑过]

--  作者:有点甜
--  发布时间:2014/7/14 21:33:00
--  

应该没问题的,改一下这段

 

Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls" \'设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    FileSys.CopyFile( dlg.FileName,"d:\\财政导出表.xls" ,True)  \'复制表
    \'---- 下面开始删除表的前两行
    Dim App As New MSExcel.Application
    try
        Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open("d:\\财政导出表.xls" )
        Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)\'指定工作
        \'    ws.rows("1:2").delete(MSExcel.XlDirection.xlUp)
        ws.rows("1:2").delete(MSExcel.XlDirection.xlUp)
        wb.Save
    catch ex As exception
        msgbox(ex.message)
    finally
        app.quit
    End try
End If


--  作者:zhangchi96
--  发布时间:2014/7/14 22:25:00
--  

按照代码改了,好像没有效,怎么办呢?请专家帮我分析分析!


--  作者:有点甜
--  发布时间:2014/7/14 22:29:00
--  
以下是引用zhangchi96在2014-7-14 22:25:00的发言:

按照代码改了,好像没有效,怎么办呢?请专家帮我分析分析!

 

先删除excel.exe进程,然后测试,不可能有问题的。


--  作者:有点甜
--  发布时间:2014/7/14 22:34:00
--  

如果要硬性关闭,参考

 

 

Dim ps As  System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName("excel")

For Each p As System.Diagnostics.Process In ps
    p.kill
Next


--  作者:zhangchi96
--  发布时间:2014/7/15 12:36:00
--  

谢谢,把下面的代码加到原代码的末尾,在运行的时候我观察了资源管理器中的 excel.exe 进程,确实,在运行了下列代码后,自动关闭了。

再次谢谢甜版主!

Dim ps As  System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName("excel")

For Each p As System.Diagnostics.Process In ps
    p.kill
Next