Foxtable(狐表)用户栏目专家坐堂 → WordReport批量导出单个文件,程序卡死


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

主题:WordReport批量导出单个文件,程序卡死

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


加好友 发短信
等级:小狐 帖子:367 积分:3737 威望:0 精华:0 注册:2016/4/2 12:11:00
WordReport批量导出单个文件,程序卡死  发帖心情 Post By:2019/6/29 11:10:00 [只看该作者]

代码如下:

导出不到30个文件,程序就卡死了,不能继续导出,请问问题出在哪里?请指教

For Each dr As Row In Tables("MSDS").Rows '逐行生成报表
    Dim tm As String  = ProjectPath & "Attachments\MSDS.docx" '指定模板文件
    Dim st As String =  dr("ICSC编号") & "-" & dr("名称") & "-" & "国际化学品安全卡MSDS.docx"
    st = st.Replace(" ","")
    dr("文件名") = st
    If FileSys.FileExists(ProjectPath & "Reports\"& st) = false then
        Dim fl As String = ProjectPath & "Reports\"& st   '指定目标文件
        Dim wrt As New WordReport(Tables("MSDS"),tm,fl) '定义一个WordReport
        wrt.BuildOne(dr)
        'wrt.Replace("^13^13","^13")
        wrt.Quit() '退出
        ' wrt.Show() '显示报表
    End If
Next
DataTables("MSDS").Save()

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


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

程序运行过程中肯定会属于假死状态。到Reports目录看看是不是有文件一直在输出?

我测试输出100个文档都可以的。

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


加好友 发短信
等级:小狐 帖子:367 积分:3737 威望:0 精华:0 注册:2016/4/2 12:11:00
  发帖心情 Post By:2019/6/29 11:43:00 [只看该作者]

昨晚上放了一个晚上就30个文件。怎么避免这种“假死”的情况

今天又试了,repors 里没有持续输出文件,只有30多个
[此贴子已经被作者于2019/6/29 11:44:01编辑过]

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


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

试试异步输出:http://www.foxtable.com/mobilehelp/scr/3269.htm

电脑会不会自动休眠?

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


加好友 发短信
等级:小狐 帖子:367 积分:3737 威望:0 精华:0 注册:2016/4/2 12:11:00
  发帖心情 Post By:2019/6/29 14:52:00 [只看该作者]

异步执行,但是发生了错误,以下代码是否正确?


全局变量:

Public tdr As Row


函数:msds

Dim tm As String  = ProjectPath & "Attachments\MSDS.docx" '指定模板文件
Dim st As String =  tdr("ICSC编号") & "-" & tdr("名称") & "-" & "国际化学品安全卡MSDS.docx"
st = st.Replace(" ","")
tdr("文件名") = st
If FileSys.FileExists(ProjectPath & "Reports\"& st) = false then
    Dim fl As String = ProjectPath & "Reports\"& st   '指定目标文件
    Dim wrt As New WordReport(Tables("MSDS"),tm,fl) '定义一个WordReport
    wrt.BuildOne(tdr)
    wrt.Replace("^13","^p")
    wrt.Quit() '退出
End If

执行:

For Each tdr As Row In Tables("MSDS").Rows '逐行生成报表
    Functions.AsyncExecute("msds")
Next
DataTables("MSDS").Save()

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


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

试试

函数:msds

dim t as table = args(0)
dim r as row = args(1)
dim tm as string = args(2)
dim fl as string = args(3)
Dim wrt As New WordReport(t,tm,fl) '定义一个WordReport
    wrt.BuildOne(r)
    wrt.Replace("^13","^p")
    wrt.Quit() '退出

执行:

Dim tm As String  = ProjectPath & "Attachments\MSDS.docx" '指定模板文件
For Each dr As Row In Tables("MSDS").Rows '逐行生成报表
    Dim st As String =  dr("ICSC编号") & "-" & dr("名称") & "-" & "国际化学品安全卡MSDS.docx"
    st = st.Replace(" ","")
    dr("文件名") = st
    Dim fl As String = ProjectPath & "Reports\"& st   '指定目标文件
    If FileSys.FileExists(fl) = false then
        Functions.AsyncExecute("msds",Tables("MSDS"),dr,tm,fl)    
    End If
Next
DataTables("MSDS").Save()

 回到顶部