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


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

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

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


加好友 发短信
等级:二尾狐 帖子:573 积分:5524 威望: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编辑过]

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


加好友 发短信
等级:二尾狐 帖子:573 积分:5524 威望: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

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


加好友 发短信
等级:二尾狐 帖子:573 积分:5524 威望: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编辑过]

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


加好友 发短信
等级:二尾狐 帖子:573 积分:5524 威望:0 精华:0 注册:2018/11/6 10:54:00
  发帖心情 Post By:2022/9/5 10:19:00 [显示全部帖子]

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

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


加好友 发短信
等级:二尾狐 帖子:573 积分:5524 威望:0 精华:0 注册:2018/11/6 10:54:00
  发帖心情 Post By:2022/9/5 18:33:00 [显示全部帖子]

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

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


加好友 发短信
等级:二尾狐 帖子:573 积分:5524 威望:0 精华:0 注册:2018/11/6 10:54:00
  发帖心情 Post By:2022/9/5 22:27:00 [显示全部帖子]

试了一晚上终于成了!但问题是我如果改生成pdf文件又不行了!

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)
             If FileIsOpened(r("InwordNo") & "检测报告.doc")= True Then
                ShowAppWindow(r("InwordNo") & "检测报告",5)
            End If

            wrt.Quit
        Next
    End If
Else  '生成单位报告
end if

改成生成pdf文档

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.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") & "检测报告.pdf" '指定目标文件
            Dim wrt As New WordReport(tb,tm,fl) '定义一个WordReport
            If FileSys.FileExists(fl) Then '如果指定的文件存在
                FileSys.DeleteFile(fl,2,2) '则彻底删除之
            End If
            wrt.BuildOne(r)
            If FileIsOpened(r("InwordNo") & "检测报告.pdf")= True Then
                ShowAppWindow(r("InwordNo") & "检测报告.pdf",5)
            End If
            wrt.Quit
        Next
    End If
end if
[此贴子已经被作者于2022/9/5 22:48:53编辑过]

 回到顶部