以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  生成word文件时,总是提示被其他进程打开  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=85829)

--  作者:包头123
--  发布时间:2016/6/3 10:45:00
--  生成word文件时,总是提示被其他进程打开
版主:
--  作者:包头123
--  发布时间:2016/6/3 10:47:00
--  
版主:  
     生成word文件时,总是提示被其他进程打开,而且每次生成总是要执行好多次,说不定哪一次就成功了。提示如下:
    图片点击可在新窗口打开查看

    另外类似生成EXCEL文件时,也是如此。不知道为什么哪里出错了?

--  作者:包头123
--  发布时间:2016/6/3 10:49:00
--  
附件已经上传,为什么显示不出来。
显示信息如下:

图片点击可在新窗口打开查看此主题相关图片如下:文件已经被其他文件打开.jpg
图片点击可在新窗口打开查看

--  作者:大红袍
--  发布时间:2016/6/3 10:55:00
--  

 1、你是不是循环多次生成了?

 

 2、你调出任务管理器,把没关闭的winword、excel的进程杀死掉。


--  作者:包头123
--  发布时间:2016/6/3 10:59:00
--  
已经调出任务管理器,关闭了winword、excel的进程杀死掉。以前是能够生成的,近期就不行了。
我看看是否多次循环生成了。

--  作者:大红袍
--  发布时间:2016/6/3 11:00:00
--  
实例上传上来测试。
--  作者:包头123
--  发布时间:2016/6/3 11:01:00
--  
下面是代码,帮我看看有无问题:
\'根据当前任务的任务ID(Vars("任务输入_任务ID")), 找到当前记录, 并指向该记录
Dim dr As DataRow
dr = DataTables("任务表").Find( "任务ID = \'" & Vars("任务输入_任务ID") & "\'")
\'MessageBox.Show("dr(ID)=" & dr("ID"), "断点01")
If dr IsNot Nothing Then
    Dim wz As Integer = Tables("任务表").FindRow(dr)
    If wz >= 0 Then
        Tables("任务表").Position = wz
    End If
End If
\'MessageBox.Show("dr(ID)=" & dr("ID"), "断点02")
\'MessageBox.Show("Tables(任务表).Current(ID)=" & Tables("任务表").Current("ID"), "断点02")

\'根据模板文件形成任务单
Dim wbr As WinForm.WebBrowser = e.Form.Controls("WebBrowser1")                           \'定义显示窗口
Dim tm As String  = ProjectPath & "Attachments\\TaskSchedule_Begin.docx"                  \'指定模板文件
Dim fl As String = ProjectPath & "Reports\\TaskSchedule_Begin.docx"                       \'指定目标文件
Dim wrt As New WordReport(Tables("任务表"), tm, fl)                                      \'定义一个WordReport

\'形成任务下发要求
Dim ExecProcedure As String = ""                                                                                             \'定义执行过程字符串

Dim count2 As Integer = 0                                                                                                    \'定义计数器, 任务表.任务子表的前2条记录, 不放到执行过程中
For Each r As Row In Tables("任务表.任务子表").rows                                                                          \'逐行生成执行过程:日期+执行过程
\'MessageBox.Show("count2=" & count2 & ", r(执行过程)=" & r("执行过程")   )
    If count2 = 1 Then                                                                                                       \'从第三行开始形成, 即 count >= 2
        \'ExecProcedure = ExecProcedure & Format(r("时间"), "yyyy-MM-dd") & ":  " & r("执行过程") & VbCrLf                    \'逐行形成, 后面加回车换行符
        ExecProcedure = Format(r("时间"), "yyyy年MM月dd日") & ": " & chr(13) & r("执行过程") & chr(10)                              \'用第二行形成, 后面加回车换行符
        ExecProcedure = ExecProcedure.Replace(chr(13) & chr(10) , chr(13))                                                   \'将 1 个 回车换行符, 处理为回车符
        ExecProcedure = ExecProcedure.Replace(chr(13) , chr(13) & "    ")                                                     \'这样处理后, 不管是日期行, 还是普通行, 都缩进 4 个空格, 因此, 需要把日期行缩进的四个空格删除掉
        ExecProcedure = ExecProcedure.Replace(chr(13) , chr(13) & chr(10))                                                   \'将 1 个 回车符, 处理为回车换行符
        Exit For
    End If
    count2 = count2 + 1
    \'        wrt.BuildOne(r)
Next
\'MessageBox.Show("ExecProcedur=" & ExecProcedure)
wrt.Replace("[执行过程任务下发]",ExecProcedure)                                                                               \'显示第二条记录, 第一条要包含任务下发说明.

wrt.Build()                                                                              \'形成文件
wrt.Quit()                                                                               \'退出形成过程
wbr.AddRess = fl                                                                         \'在 WebBrowser1 中, 显示形成的WORD文件


--  作者:大红袍
--  发布时间:2016/6/3 11:04:00
--  

build之前,要先设置

 

wbr.AddRess = Nothing

Dim ps As  System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName("WinWord")
For Each p As System.Diagnostics.Process In ps
    If p.MainWindowTitle = Nothing Then  p.kill
Next

\'system.Threading.Thread.sleep(3000)

 

然后再

 

wrt.Build()                                                                              \'形成文件
wrt.Quit()                                                                               \'退出形成过程
wbr.AddRess = fl      

--  作者:包头123
--  发布时间:2016/6/3 11:15:00
--  
好的。我把上一段加上。困扰了好几天了。谢谢了。
--  作者:包头123
--  发布时间:2016/6/3 11:18:00
--  
我加上后,没反应了,从任务管理器查看,是正常状态。