以文本方式查看主题

-  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=115013)

--  作者:chnfo
--  发布时间:2018/2/27 18:46:00
--  [求助]交叉统计表表头的显示
有一个交叉统计表,列数很多,行数也很多。如下图,一年有12个月,如果要打三年的,可能就得36列,行数也可能有100行以上
表头有两行。

在打印预览的时候,表名在第一页预览的时候看不到,可能要到第N页才会显示表名
第二行的分店号,在第一页预览可见,但其它的页就看不到了。

模板该如何设置,才能保证预览的时候,在每一页上都可以看到表名和分店号这两行呢?


图片点击可在新窗口打开查看此主题相关图片如下:交叉表表头png.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2018/2/27 18:46:22编辑过]

--  作者:有点蓝
--  发布时间:2018/2/27 20:08:00
--  
指定页首行

另外可以按年分组打印啊:http://www.foxtable.com/webhelp/scr/1542.htm

--  作者:chnfo
--  发布时间:2018/2/27 22:39:00
--  
输出报表本身没有问题。
问题是列很多以后,指定页首行(多行),列翻页以后,表头就看不到了。附件中的报表有两个问题 
1、5-8页,是列翻页以后的报表,表名和表头看不到;而且5-8页的列翻页之后,客户列并没有显示出来。
2、1-4页,表名显示的位置并未在打印预览页面上居中。

我是想翻页打印的时候,多行表头的信息都能看到。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:交叉统计打印.zip


[此贴子已经被作者于2018/2/27 22:42:49编辑过]

--  作者:有点蓝
--  发布时间:2018/2/27 23:03:00
--  
如果为了追求打印效果,只能这样设计模板
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:交叉统计.xls



--  作者:chnfo
--  发布时间:2018/2/27 23:06:00
--  
能用代码的方式设计吗?
因为交叉统计表的列是不固定的。
例如随着年份的增加,有时候可能是13列(其中一列是客户列),有时候可能是25列(2年),有时候可能是37列(3年的数据)

--  作者:有点蓝
--  发布时间:2018/2/27 23:12:00
--  

--  作者:有点甜
--  发布时间:2018/2/28 9:47:00
--  
以下是引用chnfo在2018/2/27 23:06:00的发言:
能用代码的方式设计吗?
因为交叉统计表的列是不固定的。
例如随着年份的增加,有时候可能是13列(其中一列是客户列),有时候可能是25列(2年),有时候可能是37列(3年的数据)

 

你问过啊 http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=113837&authorid=0&page=0&star=2

 

动态修改模板文件。


--  作者:chnfo
--  发布时间:2018/2/28 14:53:00
--  
动态列的问题解决了,现在模板中设置了标题行和标题列重复,但在输出报表的时候,这个设置不起作用。

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)  \'将相应的单元格右移  -------这个为什么是1?从表面上看,它是在第一行的idx列插入列。看帮助里,似乎应当是

  • Dim App As New MSExcel.Application
    Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open("D:\\Report.xls")
    Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
    Dim Rg As MSExcel.Range = Ws.Range("A10")  \'以这个指定的单元格为基准
    Rg.EntireRow.Insert(MSExcel.XlInsertShiftDirection.xlShiftDown)\'在基准单元格上面插入一行
    Rg.EntireColumn.Insert(MSExcel.XlInsertShiftDirection.xlShiftToRight)  \'在基准单元格左边插入一列
    App.Visible = True


    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/2/28 14:56:18编辑过]

--  作者:有点甜
--  发布时间:2018/2/28 15:11:00
--  
以下是引用chnfo在2018/2/28 14:53:00的发言:
动态列的问题解决了,现在模板中设置了标题行和标题列重复,但在输出报表的时候,这个设置不起作用。

 

只能像4楼那样做。

 

你动态增加列的时候,每一年(12列),那就动态插入一列【客户】以及标题那些东西。

 

excel本来的打印,超出了纸张范围的情况下,重复标题行都是无效的。


--  作者:chnfo
--  发布时间:2018/3/1 22:06:00
--  
再请教一下。
可以用8楼的方法形成交叉表的动态列。然后把表头的标题行、左侧标题列插入到模板中。

问题是:
假如左侧标题列是2列,然后交叉表的动态列是15列,每页显示8列的话。
那么,总共会显示3页,前两页每页有8列,第三页只有5列了,那么页面的右边就会空3列的空间出来。用什么方法可以使余下的三列划边框线,但不填充数据?