以文本方式查看主题 - 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 -- 附件已经上传,为什么显示不出来。 显示信息如下:
|
-- 作者:大红袍 -- 发布时间: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") \'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 -- 我加上后,没反应了,从任务管理器查看,是正常状态。 |