以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  批量生成excel报表的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=129107)

--  作者:firecho
--  发布时间:2018/12/21 15:24:00
--  批量生成excel报表的问题
由于工作需要建了个表用于批量生成决算文件,要求选定区域的行进行批量生成,一行数据生成一个单独的报表文件,报表模板已经做好,并且模板xls文件里存在多个工作簿,但在生成过程中每个报表文件的每个工作簿都会出现选定多行里的数据,自上向下排列,而且在设计模板的过程中并没有指定<ALL>标识,如何解决这个问题,期待答复,谢谢!


图片点击可在新窗口打开查看此主题相关图片如下:无标题.jpg
图片点击可在新窗口打开查看

代码如下 :

Dim t As Table = Tables("决算编制")
For i As Integer = t.TopRow To t.BottomRow
        Dim Book As New XLS.Book(ProjectPath & "Attachments\\工程决算书.xls")
        Dim fl As String = ProjectPath & "Reports\\工程决算书(" & t(i)("项目名称") & ").xls"
        Book.Build() \'生成细节区
        Book.Save(fl) \'保存工作簿
        
        Dim Proc As New Process \'打开xls
        Proc.File = fl
        Proc.Start()
    Next


--  作者:有点甜
--  发布时间:2018/12/21 15:55:00
--  

改成这样

 

Dim t As Table = Tables("决算编制")
Dim top = t.TopRow
Dim bot = t.BottomRow
For i As Integer = top To bot
    t.Position = i
    Dim Book As New XLS.Book(ProjectPath & "Attachments\\工程决算书.xls")
    Dim fl As String = ProjectPath & "Reports\\工程决算书(" & t.Rows(i)("项目名称") & ").xls"
    Book.Build() \'生成细节区
    Book.Save(fl) \'保存工作簿
   
    Dim Proc As New Process \'打开xls
    Proc.File = fl
    Proc.Start()
Next

 


--  作者:firecho
--  发布时间:2018/12/21 16:05:00
--  
以下是引用有点甜在2018/12/21 15:55:00的发言:

改成这样

 

Dim t As Table = Tables("决算编制")
Dim top = t.TopRow
Dim bot = t.BottomRow
For i As Integer = top To bot
    t.Position = i
    Dim Book As New XLS.Book(ProjectPath & "Attachments\\工程决算书.xls")
    Dim fl As String = ProjectPath & "Reports\\工程决算书(" & t.Rows(i)("项目名称") & ").xls"
    Book.Build() \'生成细节区
    Book.Save(fl) \'保存工作簿
   
    Dim Proc As New Process \'打开xls
    Proc.File = fl
    Proc.Start()
Next




甜大,测试了还是不行,比如我选定两行数据,会生成两个报表文件,第一个文件里还是两行的数据,第二个文件是最后一行单独数据的文件,不知是哪里出了问题。

 

[此贴子已经被作者于2018/12/21 16:05:35编辑过]

--  作者:有点甜
--  发布时间:2018/12/21 16:08:00
--  
你的excel模板发上来看看。
--  作者:firecho
--  发布时间:2018/12/21 16:18:00
--  
以下是引用有点甜在2018/12/21 16:08:00的发言:
你的excel模板发上来看看。
[此贴子已经被作者于2018/12/23 11:22:09编辑过]

--  作者:有点甜
--  发布时间:2018/12/21 16:29:00
--  

你引用的是【通信管道决算编制】表的数据,那么你代码,也要改成这个表

 

Dim t As Table = Tables("通信管道决算编制")
Dim top = t.TopRow
Dim bot = t.BottomRow
For i As Integer = top To bot
    t.Position = i
    Dim Book As New XLS.Book(ProjectPath & "Attachments\\工程决算书.xls")
    Dim fl As String = ProjectPath & "Reports\\工程决算书(" & t.Rows(i)("项目名称") & ").xls"
    Book.Build() \'生成细节区
    Book.Save(fl) \'保存工作簿
   
    Dim Proc As New Process \'打开xls
    Proc.File = fl
    Proc.Start()
Next

 

如果还有问题,做一个例子发上来测试


--  作者:firecho
--  发布时间:2018/12/21 16:40:00
--  
以下是引用有点甜在2018/12/21 16:29:00的发言:

你引用的是【通信管道决算编制】表的数据,那么你代码,也要改成这个表

 

Dim t As Table = Tables("通信管道决算编制")
Dim top = t.TopRow
Dim bot = t.BottomRow
For i As Integer = top To bot
    t.Position = i
    Dim Book As New XLS.Book(ProjectPath & "Attachments\\工程决算书.xls")
    Dim fl As String = ProjectPath & "Reports\\工程决算书(" & t.Rows(i)("项目名称") & ").xls"
    Book.Build() \'生成细节区
    Book.Save(fl) \'保存工作簿
   
    Dim Proc As New Process \'打开xls
    Proc.File = fl
    Proc.Start()
Next

 

如果还有问题,做一个例子发上来测试


表的名字是发帖编辑的时候漏了几个字,实际上是对应的,表名字没问题的,我刚按照甜大改的代码的思路思考了一下,改成了如下代码,已经运行正常了,谢谢甜大指点。


Dim t As Table = Tables("通信管道决算编制")
Dim top = t.TopRow
Dim bot = t.BottomRow
For i As Integer = top To bot
    t.Select(i,t.LeftCol,i,t.RightCol)
    Dim Book As New XLS.Book(ProjectPath & "Attachments\\工程决算书.xls")
    Dim fl As String = ProjectPath & "Reports\\工程决算书(" & t.Rows(i)("项目名称") & ").xls"
    Book.Build() \'生成细节区
    Book.Save(fl) \'保存工作簿
    
    Dim Proc As New Process \'打开xls
    Proc.File = fl
    Proc.Start()
Next



--  作者:有点甜
--  发布时间:2018/12/21 16:40:00
--  

改成这样吧

 

t.Select(i, 0)


--  作者:firecho
--  发布时间:2018/12/21 16:43:00
--  
OK,谢谢!