以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 生成报告报错,报告生成成功,最后报错。 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=179702) |
-- 作者:foxtablefanse -- 发布时间:2022/9/4 21:07:00 -- 生成报告报错,报告生成成功,最后报错。 Dim fld As String \'选择的保存目录路径 Dim dlg As New FolderBrowserDialog \'打开目录对话框 dlg.SelectedPath = GetConfigValue("savefolder",ProjectPath & "Reports\\") \'读取以前选择目录记录, If dlg.ShowDialog = DialogResult.Ok Then fld =dlg.SelectedPath SaveConfigValue("savefolder", dlg.SelectedPath) \'保存此次选择 End If \'生成报告 Dim tb As Table=Tables("检测报告_Table1") \'生成单位报告 If tb.Current IsNot Nothing Then Dim cr As Row=tb.Current Dim tm As String = ProjectPath & "Attachments\\起重机检验报告模板.doc" \'指定模板文件 Dim fl As String = fld & "\\" & cr("InwordNo") & "检测报告.doc" \'指定目标文件,含牌照号或自编号 If FileSys.FileExists(fl) Then Dim Result As DialogResult Result = Messagebox.Show("文件已经存在!是否替换","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question) If Result = DialogResult.Yes Then FileSys.DeleteFile(fl,2,2) \'则彻底删除之 Else Return 0 End If End If Dim wrt As New WordReport(tb,tm,fl) \'定义一个WordReport wrt.BuildOne(cr) wrt.Quit ‘这个应该写在哪里? wrt.Show() \'显示报表 End If 有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾。 ************** 异常文本 ************** System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.NullReferenceException: 未将对象引用设置到对象的实例。 在 Foxtable.WordReport.Show() 在 FunctionTopsc.foxtops_Menu(Object sender, Object fftt) --- 内部异常堆栈跟踪的结尾 --- 在 System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) 在 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) 在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 在 System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) 在 Foxtops.FunctionsExecute.ghlMsu5k3mAkZCYQ0dM(Object , Object , Object ) 在 Foxtops.FunctionsExecute.Execute(String methonname, Object[] ob) 在 Foxtops.Wind.NOftbNR1BI3ddKgT0Ly(Object , Object ) 在 Foxtops.Wind.Jn43kCxX3W(Object , EventArgs ) 在 System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e) 在 System.Windows.Forms.ToolStripButton.OnClick(EventArgs e) 在 System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e) 在 System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e) 在 System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met) 在 System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met) 在 System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea) 在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 在 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.ScrollableControl.WndProc(Message& m) 在 System.Windows.Forms.ToolStrip.WndProc(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 。 [此贴子已经被作者于2022/9/4 21:09:43编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/9/4 21:26:00 -- 如果会要显示报告,去掉【wrt.Quit】。如果不需要显示,去掉【wrt.Show】。只能留一个 |
-- 作者:foxtablefanse -- 发布时间:2022/9/4 22:00:00 -- 生成单个的,这样处理可以了,现在是要批量生成,生成一个后报错,后面就无法生成了 \'生成报告 Dim tb As Table=Tables("检测报告_Table1") If tb.ShowCheckBox Then \'批量生成 Dim rs As List(of Row) =tb.GetCheckedRows If rs.Count > 0 Then \'如果存在符合条件的行 Dim tm As String = ProjectPath & "Attachments\\起重机检验报告模板.doc" \'指定模板文件 Dim fl As String For Each r As Row In rs \'逐行生成报表 fl = fld & "\\" & r("InwordNo") & "检测报告.doc" \'指定目标文件 Dim wrt As New WordReport(tb,tm,fl) \'定义一个WordReport If FileSys.FileExists(fl) Then \'如果指定的文件存在 FileSys.DeleteFile(fl,2,2) \'则彻底删除之 End If wrt.BuildOne(r) wrt.Quit Next End If Else \'生成单位报告 end if
|
-- 作者:有点蓝 -- 发布时间:2022/9/4 22:19:00 -- 已经有某个编号的文件存在。考虑先清空报告目录里的文件,再生成 |
-- 作者:foxtablefanse -- 发布时间:2022/9/5 7:51:00 -- 这个和帮助里的有区别,帮助里的按行批量生成最终是一个文件,我的要求是每行生成一个文件,文件名以 r("inwordNo") & "固定字符.doc" 方式命名的。 [此贴子已经被作者于2022/9/5 7:51:48编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/9/5 9:00:00 -- 一样的东西,不管使用什么方式命名。肯定有某个名称的文件已经存在,并且处于打开状态。请先清空报告目录再重新生成 |
-- 作者:foxtablefanse -- 发布时间:2022/9/5 10:19:00 -- 问题是我想把批量生成的文档放在同一个目录,不想一个文档一个目录!没有搞懂文档生成过程机理,所以不知道怎么调整代码 [此贴子已经被作者于2022/9/5 10:23:00编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/9/5 10:38:00 -- 上面的代码已经是同一个目录了 fl = fld & "\\" & r("InwordNo") & "检测报告.doc" \'指定目标文件
|
-- 作者:foxtablefanse -- 发布时间:2022/9/5 18:33:00 -- 没理解我的问题呵,初衷是生成在一个目录里,而不是清空目录再生成下一个。 |
-- 作者:有点蓝 -- 发布时间:2022/9/5 20:09:00 -- 我的意思是3楼的错误提示的原因是:可能之前执行过代码,已经生成了同名文件的报表,且这个报表处于打开状态。 所以我的建议是:要么清空之前生成的文件,再重新生成;要么加一个判断,如果有同名的文件就提示用户关闭打开的文件删除掉再操作
|