Foxtable(狐表)用户栏目专家坐堂 → 手工分页打印设置代码修改


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

主题:手工分页打印设置代码修改

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


加好友 发短信
等级:童狐 帖子:215 积分:2306 威望:0 精华:0 注册:2020/10/3 6:58:00
手工分页打印设置代码修改  发帖心情 Post By:2024/6/7 11:47:00 [只看该作者]

我要手工打印一个报表,采用的是直接向excel写入,excel工作表的上部分是表头,下部分是表尾,各页都一样,中间从第6行插入table明细的数据,每页插入5行,要实现分页打印,下面的代码赋值部分不对,请帮助看看?'------计算表头需要的数据并赋值
Dim shzb As WinForm.Table = e.Form.Controls("收货主表")
Dim shmx As WinForm.Table = e.Form.Controls("收货明细")
Dim shtj As WinForm.Table = e.Form.Controls("Table1")
Dim r As Row = shzb.Table.Current
Dim ryear As String = Format(r("供货日期"), "yyyy")
Dim rmonth As String = Format(r("供货日期"), "MM")

Dim hs As Integer = shmx.Table.Rows.Count  'hs是收货明细表的行数
Dim totalPages As Integer = Math.Ceiling(shmx.Table.Count / 5) '计算总页数'按每页5行明细进行分页打印

Dim lms As String() = {"供货日期","品名","单位","数量","单价","金额"}
Dim sheetRows As Integer() = {0,1,3,4,5,6}
For page As Integer = 1 To totalPages
    
    Dim Book As New XLS.Book("c:\打印模板.xlsx") '定义一个Excel工作簿
    Dim Sheet As XLS.Sheet = Book.Sheets("sheet1") '引用工作簿的第一个工作表 '打印表头
    Sheet(0, 9).Value = ryear   '填写报表头之年
    Sheet(1, 9).Value = rmonth   '填写报表头之月
    Sheet(2, 9).Value = r("收货单号")   '填写报表头之收货单号
    Dim St As XLS.Style = Book.NewStyle
    St.Format = "yyyy-MM-dd"

    For i As Integer = (page - 1) * 5 To Math.Min(page * 5, hs - 1)  'i代表table收货明细的行号
        For j As Integer = 0 To sheetRows.Length - 1   'j代表sheet 表的行号
            For k As Integer = 6 To 10
                'Sheet(i+5, sheetrows(j)).Value = shmx.Table(i,lms(j))
                Sheet((k+(i Mod 5)), sheetRows(j)).Value = shmx.Table.Rows(i)(lms(j))
                'MessageBox.show(shmx.Table.Rows(i)(lms(j))) 此值取出正确
'MessageBox.show(i & "-" & i Mod 5) 
            Next
        Next
    Next
    Book.Save("c:\reports\test " &  page & ".xls") '保存工作簿
Next

'-------打印预览

'Dim Proc As New Process '打开工作簿
'Proc.File = "c:\reports\test.xls"
'Proc.Start()

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


加好友 发短信
等级:童狐 帖子:215 积分:2306 威望:0 精华:0 注册:2020/10/3 6:58:00
  发帖心情 Post By:2024/6/7 11:48:00 [只看该作者]

 'Sheet(i+5, sheetrows(j)).Value = shmx.Table(i,lms(j))
                Sheet((k+(i Mod 5)), sheetRows(j)).Value = shmx.Table.Rows(i)(lms(j))这两种写法都不正确,能取值,就是不正确

 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

请上传实例测试

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


加好友 发短信
等级:童狐 帖子:215 积分:2306 威望:0 精华:0 注册:2020/10/3 6:58:00
  发帖心情 Post By:2024/6/8 6:59:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:传客服老师.zip


 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:108052 积分:549671 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/6/8 10:57:00 [只看该作者]

把明细表的供货日期改为日期类型的列

For page As Integer = 1 To totalPages
    
    Dim Book As New XLS.Book(ProjectPath & "打印模板.xlsx") '定义一个Excel工作簿
    Dim Sheet As XLS.Sheet = Book.Sheets("sheet1") '引用工作簿的第一个工作表 '打印表头
    Sheet(0, 9).Value = ryear '填写报表头之年
    Sheet(1, 9).Value = rmonth '填写报表头之月
    Sheet(2, 9).Value = r("收货单号") '填写报表头之收货单号
    Dim St As XLS.Style = Book.NewStyle
    St.Format = "yyyy-MM-dd"
    Dim k As Integer = 6
    For i As Integer = (page - 1) * 5 To Math.Min(page * 5 - 1, hs - 1) 'i代表table收货明细的行号
        For j As Integer = 0 To sheetRows.Length - 1 'j代表sheet 表的行号
            Sheet(k, sheetRows(j)).Value = shmx.Table.Rows(i)(lms(j))
            If j = 0 Then
                Sheet(k, sheetRows(j)).Style = St
            End If 
        Next
        k += 1
    Next
    Book.Save(ProjectPath & "reports\test " & page & ".xls") '保存工作簿
Next

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


加好友 发短信
等级:童狐 帖子:215 积分:2306 威望:0 精华:0 注册:2020/10/3 6:58:00
  发帖心情 Post By:2024/6/9 9:46:00 [只看该作者]

谢谢,测试完全正确。此项目打开后,有两个窗体自动打开,项目一共6个独立窗体,设置与关闭方法都一样,为什么会这样,如何修正?

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:108052 积分:549671 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/6/10 21:14:00 [只看该作者]

窗口设计里把自动打开设置为false

 回到顶部