Foxtable(狐表)用户栏目专家坐堂 → [求助]基于数据表的统计表能设置模板吗


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

主题:[求助]基于数据表的统计表能设置模板吗

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/1/24 9:04:00 [显示全部帖子]

方法一:直接saveexcel,然后打开xls,插入行加上表头;

 

方法 二:用vba,修改模板,把动态部分的列,拷贝插入到多列去。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/1/24 21:37:00 [显示全部帖子]

建议还是用方法一。

 

你让用户自己做一个模板,只需要做表头。然后把表内容saveexcel导出,然后你把表内容拷贝到模板那里去。

 

或者是,你直接在模板那里,导出表内容 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=103833&skin=0

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/1/24 22:01:00 [显示全部帖子]

以下是引用chnfo在2018/1/24 21:56:00的发言:
这个模板恐怕没法定义哟,因为列是动态的。比如这个月只有ABC三种商品,那么就只需要显示ABC的数量和金额这6列。下个月可能会有ABCDE五种商品,那就要显示10列了。

 

方法一:模板只需要定义最上面的表信息那些东西。下面的内容你用代码生成。

 

如果用方法二:那就动态插入列,设置一列动态列的样式,然后vba打开,拷贝,你表格由多少列,就拷贝多少次。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/1/24 22:18:00 [显示全部帖子]

1、表头的格式是否固定?如果不固定,而且复杂的话,你是无法处理的。

 

比如 每一行显示的内容有n个(包括表头、副标题、其余一些信息),当列增加的时候,按照什么规则排版?哪些单元格才是【表头】?

 

如果格式固定、简单,那就好办,根据表格列数,合并单元格即可。

 

2、如果表头无法处理,那就不要处理,直接拷贝,然后粘贴到中间位置去。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/1/24 22:39:00 [显示全部帖子]

用方法二处理:用户设计好自己的模板,动态列那里,设计一列。

 

你生成报表之前,把模板拷贝一份,处理模板,根据表格的列,在模板那里动态插入多列(拷贝粘贴)

 

你先把上面的做好吧。至于之后的把表头居中、表尾居中,你再根据实际情况处理。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/1/26 18:22:00 [显示全部帖子]

模板

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:kk.xls
 

 

执行代码

 

Dim fl As String = ProjectPath & "attachments/kk.xls"
Dim f As String = ProjectPath & "attachments/test.xls"
FileSys.CopyFile(fl, f, True)
Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(f)
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
ws.Range("C1:D6").Copy
Dim t As Table = Tables("kk")
Dim idx As Integer = 5
For i As Integer = 1 To t.Cols.count-1 Step 2
    If i < t.Cols.count-3 Then
        ws.Range("C1:D6").Copy
        ws.cells(1,idx).Insert(MSExcel.XlDirection.xlToRight)  '将相应的单元格右移
    End If
    ws.cells(3,idx-2).value = t.Cols(i).caption.split("_")(0)
    ws.cells(5,idx-2).value = "[" & t.Cols(i).name & "]"
    ws.cells(5,idx-1).value = "[" & t.Cols(i+1).name & "]"
    idx += 2
Next

app.visible = True

[此贴子已经被作者于2018/1/26 18:22:36编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/5 15:19:00 [显示全部帖子]

无法用这种方法实现。

 

必须换一种思路,把标题、也号等信息,用页眉来做,签名那里,用页脚来做。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/5 15:52:00 [显示全部帖子]

如果确实要做,用headerrow处理吧,通过代码计算。

 

第几页:假如你模板变成了3页;要打印35行数据;每页10行数据。

 

第一次进入headerrow:vars("页1") = 1; vars("页2") = 1 + 4; vars("页3") = 1+4*2

 

第n次进入headerrow:vars("页1") += 1; vars("页2") = vars("页1") + math.ceiling(35 / 10); vars("页3") = vars("页1") + math.ceiling(35 / 10)*2

[此贴子已经被作者于2018/3/5 15:52:11编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/5 16:01:00 [显示全部帖子]

BuildPageHeader 事件

 

http://www.foxtable.com/webhelp/scr/1956.htm

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/6 9:09:00 [显示全部帖子]

以下是引用chnfo在2018/3/5 23:02:00的发言:
试了N次,还是纵向分为三页的页码是一样的.
假如纵向三页,横向10页,那不是相当于要设3*10个变量?

这个咋个整法

 

横向,如果有10页,就设置10个变量啊,每页一个变量啊。

 

设置headerrow之后,每次换页,都会触发事件的啊,假如你纵向有3页,就会触发3次事件。每次你给10个变量赋值即可。

 

你生成模板的时候,要根据列数计算需要多少个变量,命名为 页面1、页面2、页面3 这样即可。

 

 


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