Foxtable(狐表)用户栏目专家坐堂 → 报表标记为什么不能这样用?


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

主题:报表标记为什么不能这样用?

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


加好友 发短信
等级:三尾狐 帖子:623 积分:3897 威望:0 精华:0 注册:2011/8/3 22:13:00
报表标记为什么不能这样用?  发帖心情 Post By:2012/12/5 21:35:00 [只看该作者]

'选择全表
Tables("窗口1_Table1").Select(0, 0, Tables("窗口1_Table1").Rows.Count - 1, Tables("窗口1_Table1").Cols.Count - 1)
Dim Book As New XLS.Book(ProjectPath & "Attachments\月费用明细.xls")
Book.Marks.Add("_UserName",_UserName)
Dim Customers As List(Of String)
Customers = Tables("窗口1_Table1").DataTable.GetUniqueValues("", "业务编号")
Dim dr As DataRow
For Each Customer As String In Customers
    dr = DataTables("业务总账").Find("业务编号='" &  Customer & "'")
    If dr IsNot Nothing Then
        Book.Marks.Add("经营单位",dr("经营单位"))
        Book.Marks.Add("业务编号",dr("业务编号"))
        Book.Marks.Add("提单号",dr("提单号"))
        Book.Marks.Add("报关单号",dr("报关单号"))
    End If
Next
Book.Build()
Book.Save(ProjectPath & "Reports\月费用明细.xls")
Dim Proc As New Process
Proc.File = ProjectPath & "Reports\月费用明细.xls"
Proc.Start()

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


加好友 发短信
等级:七尾狐 帖子:1695 积分:10725 威望:0 精华:0 注册:2009/10/25 16:45:00
  发帖心情 Post By:2012/12/5 21:54:00 [只看该作者]

到底那个标记不能“这样”用? 恐怕你得提供一个实例,不然非经常且熟练掌握标记的人,很难看的出什么。


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


加好友 发短信
等级:四尾狐 帖子:867 积分:6210 威望:0 精华:0 注册:2012/11/24 20:44:00
  发帖心情 Post By:2012/12/5 22:01:00 [只看该作者]

刚入门,还有点云里雾里

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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/12/6 8:32:00 [只看该作者]

下面的代码有问题:

 

For Each Customer As String In Customers
    dr = DataTables("业务总账").Find("业务编号='" &  Customer & "'")
    If dr IsNot Nothing Then
        Book.Marks.Add("经营单位",dr("经营单位"))
        Book.Marks.Add("业务编号",dr("业务编号"))
        Book.Marks.Add("提单号",dr("提单号"))
        Book.Marks.Add("报关单号",dr("报关单号"))
    End If
Next
要么不错,即使不出错,标记也只是最后一个业务编号的内容。
 
应该结合事件使用,可以看看这里的示例一:
 
 
 
 

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2012/12/6 10:27:00 [只看该作者]

老大 是的,后来明白了.后来我用了生成临时表的方式处理打印的,这样就没有问题了.

只是你的http://www.foxtable.com/help/topics/1955.htm 这个做法 ,我不太明白引用是 这样做的?

    按照道理,应该在生成报表之前事件先写入一个标记 .然后在生成细节区事件再写入引用代码.  但是关键我就不明白生成报表之前事件的这个写入标记应该怎么写?

  昨日我是这样做的:

在BeforeBuild事件中,将这两个标签插入到Marks集合:


Select Case e.Book.TempLate
    
Case "月费用明细.xls"
        e.Book.Marks.Add(
"业务类型","")   '这个"" 我就不明白怎样写?
End
 Select




在BuildDetail事件中加入下面的代码:

Select Case e.Book.TempLate
    
Case "月费用明细.xls"

Dim Customers As List(Of String)
Customers = Tables("应收费用").DataTable.GetUniqueValues("", "业务编号")
Dim dr As DataRow
For Each Customer As String In Customers
    dr = DataTables("业务总账").Find("业务编号='" &  Customer & "'")
    If dr IsNot Nothing Then
        Book.Marks("业务类型") = dr("业务类型"))
    End If
Next

End Select

     
 我是这样写的,但是没有引用成功.应该咋改?


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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/12/6 10:33:00 [只看该作者]

 模板名字不需要加.xls后缀名;

 BuildDetail每处理一行数据,就会触发一次;

 对于"",填入的是你想替换这个标记为什么内容。与 Book.Marks("xxx") = "" 等效

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2012/12/6 10:44:00 [只看该作者]

林女侠不对吧?

Book.Marks("业务类型") = dr("业务类型"))  是这样写入的.


难道 
e.Book.Marks.Add("业务类型","")  直接  e.Book.Marks.Add("业务类型",dr("业务类型"))  不行吧!


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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/12/6 10:53:00 [只看该作者]

 marks.add(标记名称, 默认值)

 个人感觉直接用 marks("") = "" 比较方便

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2012/12/6 11:05:00 [只看该作者]

原来这样也能用的.

 回到顶部