Foxtable(狐表)用户栏目专家坐堂 → 请教,今天excel打印应用中出现“xxx.xls文件已打开,请先关闭之”的提示。


  共有4293人关注过本帖树形打印复制链接

主题:请教,今天excel打印应用中出现“xxx.xls文件已打开,请先关闭之”的提示。

帅哥哟,离线,有人找我吗?
ericsky
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:361 积分:3810 威望:0 精华:0 注册:2012/4/16 20:20:00
请教,今天excel打印应用中出现“xxx.xls文件已打开,请先关闭之”的提示。  发帖心情 Post By:2014/1/3 20:44:00 [只看该作者]

用的是论坛中sunsenfeng老师很好用的代码:

Dim Book As New XLS.Book(ProjectPath & "Attachments\订单.xls")
Dim file As String = ProjectPath & "Reports\订单.xls"
Book.Build() '生成细节区
Book.Save(file) '保存工作簿


Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(file)
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
With Ws.PageSetup
    .PaperSize = MSExcel.XlPaperSize.xlPaperA4   '纸张大小
    .CenterHorizontally = True   '页面水平居中
    .CenterVertically = True '页面垂直居中
    .Zoom = False '以下设置将缩印在一页内
    .FitToPagesWide = 1  '按照1页的宽度打印
    .FitToPagesTall = 1  '按照1页的高度打印
End With
'App.Visible = True
Ws.PrintOut
wb.save
wb.close
App.Quit

--------------

出错的原因是:上一次打印时,由于网络打印机的延迟,而中途取消了打印,造成打开的excel文件未能关闭,而停留在进程中。
造成后面生成的excel报表未能更新到reports目录下的excel。
后来,进程强行关闭excel进程才恢复正常。

请教:有没有代码可以判断excel是否已经打开,如果已打开,则关闭之。
请老师指教,谢谢!

[此贴子已经被作者于2014-1-3 20:45:06编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/1/3 21:11:00 [只看该作者]

  用下面的代码,以后就不会出现不关闭的情况了。但无法做到你说的关闭特定excel文件的功能,最多是关闭所有的excel文档。

Dim Book As New XLS.Book(ProjectPath & "Attachments\订单.xls")
Dim file As String = ProjectPath & "Reports\订单.xls"
Book.Build() '生成细节区
Book.Save(file) '保存工作簿

Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook
try
    wb = App.WorkBooks.Open(file)
    Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
    With Ws.PageSetup
        .PaperSize = MSExcel.XlPaperSize.xlPaperA4   '纸张大小
        .CenterHorizontally = True   '页面水平居中
        .CenterVertically = True '页面垂直居中
        .Zoom = False '以下设置将缩印在一页内
        .FitToPagesWide = 1  '按照1页的宽度打印
        .FitToPagesTall = 1  '按照1页的高度打印
    End With
    'App.Visible = True
    Ws.PrintOut
catch ex As exception
    msgbox("出错了")
finally
    wb.save
    wb.close
    App.Quit
End try

 回到顶部
帅哥哟,离线,有人找我吗?
ericsky
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:361 积分:3810 威望:0 精华:0 注册:2012/4/16 20:20:00
  发帖心情 Post By:2014/1/3 21:45:00 [只看该作者]

多谢甜老师,这个预防性的代码刚才简单测试了,可行,谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
ericsky
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:361 积分:3810 威望:0 精华:0 注册:2012/4/16 20:20:00
  发帖心情 Post By:2014/1/4 0:08:00 [只看该作者]

另一个更满意的方法

Dim Book As New XLS.Book(ProjectPath & "Attachments\订单.xls")
Dim file As String = ProjectPath & "Reports\订单.xls"

 If FileIsOpened(file)= True Then '如果excel文件已打开
      Shell("cmd.exe /c taskkill /f /im excel.exe") '强行关闭excel进程
      MessageBox.Show("同名excel文件已打开,请按确认先关闭之,再重新打印!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
      Return '返回
 End If


Book.Build() '生成细节区
Book.Save(file) '保存工作簿

Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook
    wb = App.WorkBooks.Open(file)
    Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
    With Ws.PageSetup
        .PaperSize = MSExcel.XlPaperSize.xlPaperA4   '纸张大小
        .CenterHorizontally = True   '页面水平居中
        .CenterVertically = True '页面垂直居中
        .Zoom = False '以下设置将缩印在一页内
        .FitToPagesWide = 1  '按照1页的宽度打印
        .FitToPagesTall = 1  '按照1页的高度打印
    End With
    'App.Visible = True
    Ws.PrintOut
    wb.save
    wb.close
    App.Quit
[此贴子已经被作者于2014-1-4 0:08:18编辑过]

 回到顶部