Foxtable(狐表)用户栏目专家坐堂 → 生成报告报错,报告生成成功,最后报错。


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

主题:生成报告报错,报告生成成功,最后报错。

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


加好友 发短信
等级:二尾狐 帖子:572 积分:5508 威望:0 精华:0 注册:2018/11/6 10:54:00
生成报告报错,报告生成成功,最后报错。  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/4 21:26:00 [只看该作者]

如果会要显示报告,去掉【wrt.Quit】。如果不需要显示,去掉【wrt.Show】。只能留一个

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


加好友 发短信
等级:二尾狐 帖子:572 积分:5508 威望:0 精华:0 注册:2018/11/6 10:54:00
  发帖心情 Post By:2022/9/4 22:00:00 [只看该作者]

生成单个的,这样处理可以了,现在是要批量生成,生成一个后报错,后面就无法生成了


图片点击可在新窗口打开查看此主题相关图片如下:360截图18141222106141138.png
图片点击可在新窗口打开查看

'生成报告
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

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


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/4 22:19:00 [只看该作者]

已经有某个编号的文件存在。考虑先清空报告目录里的文件,再生成

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


加好友 发短信
等级:二尾狐 帖子:572 积分:5508 威望:0 精华:0 注册:2018/11/6 10:54:00
  发帖心情 Post By:2022/9/5 7:51:00 [只看该作者]

这个和帮助里的有区别,帮助里的按行批量生成最终是一个文件,我的要求是每行生成一个文件,文件名以 r("inwordNo") & "固定字符.doc"  方式命名的。
[此贴子已经被作者于2022/9/5 7:51:48编辑过]

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


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/5 9:00:00 [只看该作者]

一样的东西,不管使用什么方式命名。肯定有某个名称的文件已经存在,并且处于打开状态。请先清空报告目录再重新生成

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


加好友 发短信
等级:二尾狐 帖子:572 积分:5508 威望:0 精华:0 注册:2018/11/6 10:54:00
  发帖心情 Post By:2022/9/5 10:19:00 [只看该作者]

问题是我想把批量生成的文档放在同一个目录,不想一个文档一个目录!没有搞懂文档生成过程机理,所以不知道怎么调整代码
[此贴子已经被作者于2022/9/5 10:23:00编辑过]

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


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/5 10:38:00 [只看该作者]

上面的代码已经是同一个目录了

fl  = fld & "\" & r("InwordNo") & "检测报告.doc" '指定目标文件

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


加好友 发短信
等级:二尾狐 帖子:572 积分:5508 威望:0 精华:0 注册:2018/11/6 10:54:00
  发帖心情 Post By:2022/9/5 18:33:00 [只看该作者]

没理解我的问题呵,初衷是生成在一个目录里,而不是清空目录再生成下一个。

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


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/5 20:09:00 [只看该作者]

我的意思是3楼的错误提示的原因是:可能之前执行过代码,已经生成了同名文件的报表,且这个报表处于打开状态。

所以我的建议是:要么清空之前生成的文件,再重新生成;要么加一个判断,如果有同名的文件就提示用户关闭打开的文件删除掉再操作

 回到顶部
总数 12 1 2 下一页