以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  报表标记为什么不能这样用?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=26483)

--  作者:布莱克朱
--  发布时间: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
--  发布时间:2012/12/5 21:54:00
--  

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


--  作者:zerov
--  发布时间:2012/12/5 22:01:00
--  
刚入门,还有点云里雾里
--  作者:狐狸爸爸
--  发布时间: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
--  发布时间: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
--  发布时间:2012/12/6 10:33:00
--  
 模板名字不需要加.xls后缀名;

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

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

--  作者:blackzhu
--  发布时间:2012/12/6 10:44:00
--  
林女侠不对吧?

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


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


--  作者:lin_hailun
--  发布时间:2012/12/6 10:53:00
--  
 marks.add(标记名称, 默认值)

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

--  作者:blackzhu
--  发布时间:2012/12/6 11:05:00
--  
原来这样也能用的.