Foxtable(狐表)用户栏目专家坐堂 → [求助]Excel报表容量问题


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

主题:[求助]Excel报表容量问题

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


加好友 发短信
等级:三尾狐 帖子:787 积分:6349 威望:0 精华:0 注册:2008/9/1 8:26:00
[求助]Excel报表容量问题  发帖心情 Post By:2010/12/16 11:33:00 [显示全部帖子]

有一Excel报表每一记录占一页,当记录数超过1370行时,报表不正常甚至导致主机报警死机。

不正常


此主题相关图片如下:2010-12-15 10-32-12.png
按此在新窗口浏览图片

正常时预览

此主题相关图片如下:2010-12-15 10-58-19.png
按此在新窗口浏览图片

有什么解决方法?
With Tables("申请表")
    .Select(0 ,0, .Rows.Count - 1, .Cols.Count - 1)
End With
If Forms("选项").Controls("ComboBox1").Value >"" Andalso Forms("选项").Controls("ComboBox2").Value >"" Then
    Dim Book As New XLS.Book(ProjectPath & "Attachments\登记表.xls") '打开模板
    Book.Build() '生成细节区
    Book.Save("d:\My Documents\Reports\登记表.xls") '保存工作簿
    Dim Proc As New Process '打开工作簿
    Proc.File ="d:\My Documents\Reports\登记表.xls"
    Proc.Start()
End If


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


加好友 发短信
等级:三尾狐 帖子:787 积分:6349 威望:0 精华:0 注册:2008/9/1 8:26:00
  发帖心情 Post By:2010/12/16 14:20:00 [显示全部帖子]

以下是引用mr725在2010-12-16 13:57:00的发言:
可能要用循环来打印或预览吧···· 因为“Excel报表每一记录占一页”啊~~

怎么用循环来打印或预览?

我想个笨办法,先判断行数,不会写代码

If Forms("选项").Controls("ComboBox1").Value >"" AndAlso Forms("选项").Controls("ComboBox2").Value >"" Then
    If ("_Identify") < 1370 Then
        With Tables("申请表")
            .Select(0 ,0, .Rows.Count - 1, .Cols.Count - 1)
        End With
        Dim Book As New XLS.Book(ProjectPath & "Attachments\核实表.xls") '打开模板
        Book.Build() '生成细节区
        Book.Save("d:\My Documents\Reports\核实表.xls") '保存工作簿
        Dim Proc As New Process '打开工作簿
        Proc.File ="d:\My Documents\Reports\核实表.xls"
        Proc.Start()
    End If
Else
    MessageBox.Show("手工选定行数","提示")
End If


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


加好友 发短信
等级:三尾狐 帖子:787 积分:6349 威望:0 精华:0 注册:2008/9/1 8:26:00
  发帖心情 Post By:2010/12/16 15:23:00 [显示全部帖子]

以下是引用狐狸爸爸在2010-12-16 14:37:00的发言:


图片点击可在新窗口打开查看此主题相关图片如下:2010-12-16 15-21-03.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:三尾狐 帖子:787 积分:6349 威望:0 精华:0 注册:2008/9/1 8:26:00
  发帖心情 Post By:2010/12/16 15:34:00 [显示全部帖子]

以下是引用mr725在2010-12-16 15:28:00的发言:
Tables("xxx").Select(i, 0, i + 1369, .cols.count -1)   红点没加上啊

加上也不行的


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


加好友 发短信
等级:三尾狐 帖子:787 积分:6349 威望:0 精华:0 注册:2008/9/1 8:26:00
  发帖心情 Post By:2010/12/16 15:53:00 [显示全部帖子]

For i As Integer = 0 To Tables("申请表").Rows.Count -1 Step 1370
    With Tables("申请表")
        .Select(i, 0, i + 1369, .cols.count -1)
    End With
    Dim Book As New XLS.Book(ProjectPath & "Attachments\核实表.xls") '打开模板
    Book.Build() '生成细节区
    Book.Save("d:\My Documents\Reports\核实表.xls") '保存工作簿
    Dim Proc As New Process '打开工作簿
    Proc.File ="d:\My Documents\Reports\核实表.xls"
    Proc.Verb = "Print" '指定动作
    Proc.Start()
Next

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


加好友 发短信
等级:三尾狐 帖子:787 积分:6349 威望:0 精华:0 注册:2008/9/1 8:26:00
  发帖心情 Post By:2010/12/16 16:09:00 [显示全部帖子]

For i As Integer = 0 To Tables("申请表").Rows.Count -1 Step 1370
    Tables("申请表").Select(i, 0, i + 1369, Tables("申请表").cols.count -1)
    Dim Book As New XLS.Book(ProjectPath & "Attachments\核实表.xls") '打开模板
    Book.Build() '生成细节区
    Book.Save("d:\My Documents\Reports\核实表.xls") '保存工作簿
    Dim Proc As New Process '打开工作簿
    Proc.File ="d:\My Documents\Reports\核实表.xls"
    Proc.Start()
Next

图片点击可在新窗口打开查看此主题相关图片如下:2010-12-16 16-05-46.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:三尾狐 帖子:787 积分:6349 威望:0 精华:0 注册:2008/9/1 8:26:00
  发帖心情 Post By:2010/12/17 9:52:00 [显示全部帖子]

已经实现了半自动:

先执行

If Forms("选项").Controls("ComboBox1").Value >"" AndAlso Forms("选项").Controls("ComboBox2").Value >"" Then
    For i As Integer = 0 To Tables("申请表").Rows.Count -1 Step 1370
        With Tables("申请表")
            .Select(i, 0, math.min(i + 1369,.rows.count -1), .cols.count -1)
        End With
        Dim Book As New XLS.Book(ProjectPath & "Attachments\登记表.xls") '打开模板
        Book.Build() '生成细节区
        Book.Save("d:\My Documents\Reports\登记表.xls") '保存工作簿
        Dim Proc As New Process '打开工作簿
        Proc.File ="d:\My Documents\Reports\登记表.xls"
        Proc.Start()
    Next
END IF


图片点击可在新窗口打开查看此主题相关图片如下:2010-12-17 9-22-21.png
图片点击可在新窗口打开查看

下面窗口弹出说明已经超过1370行(不超过不弹出),后面还有记录被选中没有生成报表

图片点击可在新窗口打开查看此主题相关图片如下:2010-12-17 9-17-43.png
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:2010-12-17 8-24-54.png
图片点击可在新窗口打开查看

接着执行


图片点击可在新窗口打开查看此主题相关图片如下:2010-12-17 9-18-45.png
图片点击可在新窗口打开查看

If Forms("选项").Controls("ComboBox1").Value >"" AndAlso Forms("选项").Controls("ComboBox2").Value >"" Then
    Dim Book As New XLS.Book(ProjectPath & "Attachments\登记.xls") '打开模板
    Book.Build() '生成细节区
    Book.Save("d:\My Documents\Reports\登记.xls") '保存工作簿
    Dim Proc As New Process '打开工作簿
    Proc.File ="d:\My Documents\Reports\登记.xls"
    Proc.Start()
END IF

 全部记录生成报表形成两个文件登记.xls  登记表.xls

上面的过程需要人工判断能不能来个全自动的

[此贴子已经被作者于2010-12-17 9:59:13编辑过]

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


加好友 发短信
等级:三尾狐 帖子:787 积分:6349 威望:0 精华:0 注册:2008/9/1 8:26:00
  发帖心情 Post By:2010/12/17 10:19:00 [显示全部帖子]

后面的覆盖前面的,如果能动态改名前面是登记表后面改成登记就行了

 回到顶部