以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- word模板生成word文件,偶尔提示文件为只读,需要另存,怎么解决呢? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=179472) |
-- 作者:cnsjroom -- 发布时间:2022/8/25 16:52:00 -- word模板生成word文件,偶尔提示文件为只读,需要另存,怎么解决呢? word模板生成word文件,偶尔提示文件为只读,需要另存,怎么解决呢? 当前代码为: Dim e As RequestEventArgs = rq.e Dim cmd As SQLCommand = rq.cmd Dim time As String =Format(Date.now,"yyyyMMddHHmmss") Dim tm As String = ProjectPath & "Attachments\\" & e.Values("文书名") &".doc" \'指定模板文件 Dim f1 As String = ProjectPath & "mybaobiao\\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time &".doc" \'指定目标文件 Dim f2 As String = ProjectPath & "mybaobiao\\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time &".pdf" \'指定目标PDF文件 If FileSys.FileExists(tm) Then Dim wrt As New WordReport(tm,f1) 疑似这个地方是不是没有完整运行 还是运行过快 导致f1会生成,有对应的文件名及文件,但是文件里面的内容跟tm里面的一样,没有被替换过来,然后会再次生成fl,所以出现了文件只读的情况 wrt.AddDataTable(e.Values("文书名"),"主数据源","Se lect * from {" & e.Values("文书名") & "} where guid = \'" & e.Values("guid") & "\' ") cmd.CommandText = "sel ect * from SYS_Dictionary where 字典值=\'是\' and 分类=\'PDF预览\'" Dim dt As DataTable = cmd.ExecuteReader() If dt.DataRows.Count>0 Then wrt.Build() wrt.SaveToPDF(f2) \'保存为PDF文件 wrt.Quit() \'退出 e.WriteString("\\mybaobiao\\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time &".pdf") Else wrt.Build() \'wrt.Show() wrt.Quit() \'退出 e.WriteString("\\mybaobiao\\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time &".doc") End If Else msg(e.Values("文书名") &"[文件不存在或已经被删除!]") End If 偶尔运行会出现下述错误,提示文件为只读 错误的事件名称项目,HttpRequest System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.Runtime.InteropServices.COMException: 此文件为只读。 (D:\\...\\数据查询通知书a78093b8-c7c3-49fb-b...) 在 Microsoft.Office.Interop.Word.DocumentClass.Save() 在 Foxtable.WordReport.Quit() 在 eWebSer.form385_word_Ajax(Request rq) --- 内部异常堆栈跟踪的结尾 --- 在 Microsoft.VisualBasic.CompilerServices.Symbols.Container.InvokeMethod(Method TargetProcedure, Object[] Arguments, Boolean[] CopyBack, BindingFlags Flags) 在 Microsoft.VisualBasic.CompilerServices.NewLateBinding.CallMethod(Container BaseReference, String MethodName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack, BindingFlags InvocationFlags, Boolean ReportErrors, ResolutionFailure& Failure) 在 Microsoft.VisualBasic.CompilerServices.NewLateBinding.ObjectLateCall(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack, Boolean IgnoreReturn) 在 Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateCall(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack, Boolean IgnoreReturn) 在 UserCode.HttpRequest(RequestEventArgs e) 2022-08-25 16:49:52
[此贴子已经被作者于2022/8/25 17:01:02编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/8/25 17:03:00 -- 可能是并发导致的,试试加上毫秒值 Dim time As String =Format(Date.now,"yyyyMMddHHmmssfffff")
|
-- 作者:cnsjroom -- 发布时间:2022/8/25 17:12:00 -- 回复:(有点蓝)可能是并发导致的,试试加上毫秒值Di... 老师 加上毫秒值也是会出现类似情况 还有没有其他办法解决呢?
|
-- 作者:有点蓝 -- 发布时间:2022/8/25 17:29:00 -- 使用try处理一下,如果出错就重新生成一次报表 Try 生成报表 Catch ex As Exception 再次生成报表 End Try 其它处理
|
-- 作者:cnsjroom -- 发布时间:2022/8/25 20:31:00 -- 回复:(有点蓝)使用try处理一下,如果出错就重新生成... 经过测试 还是会出现文件只读的情况 继续求教老师! [此贴子已经被作者于2022/8/25 20:44:09编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/8/25 20:40:00 -- 如果只是偶尔,那就返回页面提示出错。然后提示用户重新操作一次。 或者考虑做个计划管理,定时把可用的报表都生成文件。网页先查询是否有已经生成的文件,没有再生成
|
-- 作者:cnsjroom -- 发布时间:2022/8/25 20:45:00 -- 回复:(有点蓝)如果只是偶尔,那就返回页面提示出错... 老师 那这个错误怎么返回给用户呢?
Dim e As RequestEventArgs = rq.e If FileSys.FileExists(tm) Then |
-- 作者:有点蓝 -- 发布时间:2022/8/25 20:53:00 -- 每次都用新的时间生成文件名,不然肯定是重复的啊 Dim e As RequestEventArgs = rq.e Dim cmd As SQLCommand = rq.cmd Dim tm As String = ProjectPath & "Attachments\\" & e.Values("文书名") & ".doc" \'指定模板文件 If FileSys.FileExists(tm) Then Try Dim time As String = Format(Date.now, "yyyyMMddHHmmssfffff") Dim f1 As String = ProjectPath & "mybaobiao\\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & ".doc" \'指定目标文件 Dim f2 As String = ProjectPath & "mybaobiao\\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & ".pdf" \'指定目标PDF文件 Dim wrt As New WordReport(tm, f1) wrt.AddDataTable(e.Values("文书名"), "主数据源", "Se lect * from {" & e.Values("文书名") & "} where guid = \'" & e.Values("guid") & "\' ") cmd.CommandText = "sel ect * from SYS_Dictionary where 字典值=\'是\' and 分类=\'PDF预览\'" Dim dt As DataTable = cmd.ExecuteReader() If dt.DataRows.Count > 0 Then wrt.Build() wrt.SaveToPDF(f2) \'保存为PDF文件 wrt.Quit() \'退出 e.WriteString("\\mybaobiao\\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & ".pdf") Else wrt.Build() \'wrt.Show() wrt.Quit() \'退出 e.WriteString("\\mybaobiao\\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & ".doc") End If Catch ex As Exception Dim time As String = Format(Date.now, "yyyyMMddHHmmssfffff") Dim f1 As String = ProjectPath & "mybaobiao\\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & ".doc" \'指定目标文件 Dim f2 As String = ProjectPath & "mybaobiao\\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & ".pdf" \'指定目标PDF文件 Dim wrt As New WordReport(tm, f1) wrt.AddDataTable(e.Values("文书名"), "主数据源", "S elect * from {" & e.Values("文书名") & "} where guid = \'" & e.Values("guid") & "\' ") cmd.CommandText = "sel ect * from SYS_Dictionary where 字典值=\'是\' and 分类=\'PDF预览\'" Dim dt As DataTable = cmd.ExecuteReader() If dt.DataRows.Count > 0 Then wrt.Build() wrt.SaveToPDF(f2) \'保存为PDF文件 wrt.Quit() \'退出 e.WriteString("\\mybaobiao\\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & ".pdf") Else wrt.Build() \'wrt.Show() wrt.Quit() \'退出 e.WriteString("\\mybaobiao\\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & ".doc") End If End Try Else e.WriteString(e.Values("文书名") & "[文件不存在或已经被删除!]") End If |
-- 作者:cnsjroom -- 发布时间:2022/8/25 21:23:00 -- 回复:(有点蓝)每次都用新的时间生成文件名,不然肯... 思路一开始也是以最新时间来生成的文件,但是当前最新时间生成的文件也会出现重名? 经测试 还是会出现另存为这个窗体 有没有办法简单粗暴 当出现另存为窗体的时候,直接代码后台关闭另存为窗体呢 ? [此贴子已经被作者于2022/8/25 21:24:13编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/8/25 21:37:00 -- 请上传实例测试 |