以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  Excel报表如何把几个报表放在同一个Excel的不同Sheet  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=119177)

--  作者:zhutangxin
--  发布时间:2018/5/19 9:59:00
--  Excel报表如何把几个报表放在同一个Excel的不同Sheet
老师你好,
公司有几条生产线,各生产线的生产计划格式是一样的,可用同一个Excel模板生成报表,但用下面的代码生成的Excel报表存放在不同的Excel文件,有没有可能将它们存在一个Excel文件的不同Sheet?

Dim sql As String = Args(0)                        \'导出表的SQL语句
Dim excel_template_fileName As String = Args(1)    \'模板文件名称
Dim excel_export_fileName As String = Args(2)      \'输出Excel文件的名称, 路径在MyDocuments\\Report

Dim Book As New XLS.Book(ProjectPath & "Attachments\\" + excel_template_fileName)
Dim fl As String = SpecialFolder.MyDocuments +  "\\Reports\\" + excel_export_fileName
If DataTables.Contains("h") Then DataTables.Unload("h")
book.AddDataTable("h","dbMain",sql)
Book.Build()
Dim Sheet As XLS.Sheet = Book.Sheets(0)
With Sheet.PrintSetting
    \'页眉左边为日期,中间为时间,右边为表名
    .Header = "&L&""Arial""&8 &D &T &C&""Arial""&8 &Z &F"
    \'在页脚右边打印页号和总页数
    .Footer = "&C&""Arial""&8 第&P页,总&N页"
End With

--  作者:有点蓝
--  发布时间:2018/5/19 10:04:00
--  
本来就可以的,在在每个sheet都设计好模板和打印条件即可。

另外页眉页脚可以在Execl里设置好,效率会高一点。如果在代码里做可以循环遍历Sheets,逐一设置

--  作者:zhutangxin
--  发布时间:2018/5/19 10:33:00
--  
可能我问的不清楚,在下面的代码里,fl是要保存的Excel报表文件路径和文件名。用Book.Save(fl)是报表生成后作了保存动作。

在这个保存动作里希望要保存Sheet在fl里以指的Sheet名称(如sheet名为”一线生产计划“)保存。 如果fl已经存在,里面有”二线生产计划“Sheet,则在fl里新增一个Sheet"一线生产计划”。

要实现这个操作代码该怎么改?


Dim Book As New XLS.Book(ProjectPath & "Attachments\\" + excel_template_fileName)
Dim fl As String = SpecialFolder.MyDocuments +  "\\Reports\\" + excel_export_fileName
If DataTables.Contains("h") Then DataTables.Unload("h")
book.AddDataTable("h","dbMain",sql)
Book.Build()
Dim Sheet As XLS.Sheet = Book.Sheets(0)
With Sheet.PrintSetting
    \'页眉左边为日期,中间为时间,右边为表名
    .Header = "&L&""Arial""&8 &D &T &C&""Arial""&8 &Z &F"
    \'在页脚右边打印页号和总页数
    .Footer = "&C&""Arial""&8 第&P页,总&N页"
End With
Sheet(Sheet.Rows.Count, 0).Value = "制单人:" & _userName
If DataTables.Contains("h") Then DataTables.Unload("h")
Book.Save(fl)

--  作者:有点蓝
--  发布时间:2018/5/19 10:41:00
--  
先在模板里新增一个Sheet"一线生产计划”,然后直接生成不就行了。
--  作者:zhutangxin
--  发布时间:2018/5/19 11:01:00
--  
各生产线的模板是一样的,如果有五个生产线,要在模板里建5个生产线对应的Sheet名称吗?

如果是这样,那在代码中怎么告诉模板什么时候要用的是“一线生产计划”Sheet的模板,什么时候要用的是“二线线生产计划”Sheet的模板?

如果同时生成“一线生产计划”和“二线生产计划”生产计划,是不是可以保存在一个filename下?

--  作者:有点蓝
--  发布时间:2018/5/19 11:09:00
--  
在模板里建5个生产线对应的Sheet名称,定义好模板。

在生成模板的时候可以指定生成哪几个:http://www.foxtable.com/webhelp/scr/2064.htm

或者在生成前/后再删除不需要的sheet:http://www.foxtable.com/webhelp/scr/1465.htm

--  作者:zhutangxin
--  发布时间:2018/5/21 9:44:00
--  
参考了帮助文件,用下面的代码实现了(是最后IF语句实现的)。如果有狐友需要,可以参考一下。

\'本函数用于单表按设定的模板导出Excel报表
\'by Hank 2018-5-18
\'使用方法如下:
\'Dim sql As String                       \'导出表的SQL语句
\'Dim excel_template_fileName As String   \'模板文件名称
\'Dim excel_export_fileName As String     \'输出Excel文件的名称, 路径在MyDocuments\\Report\'
\'Dim sheetName As String                 \'输出Sheet名称
\'Functions.Execute("ExcelReportSingleTable", sql, excel_template_fileName, excel_export_fileName, sheetName)
\'
Dim sql As String = Args(0)                        \'导出表的SQL语句
Dim excel_template_fileName As String = Args(1)    \'模板文件名称
Dim excel_export_fileName As String = Args(2)      \'输出Excel文件的名称, 路径在MyDocuments\\Report
Dim sheetName As String = Args(3)                  \'输出Sheet名称
Dim Book As New XLS.Book(ProjectPath & "Attachments\\" + excel_template_fileName)
Dim fl As String = SpecialFolder.MyDocuments +  "\\Reports\\" + excel_export_fileName
Vars("fl") = fl
If DataTables.Contains("h") Then DataTables.Unload("h")
book.AddDataTable("h","dbMain",sql)
Book.Build()
Dim Sheet As XLS.Sheet = Book.Sheets(0)
With Sheet.PrintSetting
    \'页眉左边为日期,中间为时间,右边为表名
    .Header = "&L&""Arial""&8 &D &T &C&""Arial""&8 &Z &F"
    \'在页脚右边打印页号和总页数
    .Footer = "&C&""Arial""&8 第&P页,总&N页"
End With
Sheet(Sheet.Rows.Count, 0).Value = "制单人:" & _userName
If DataTables.Contains("h") Then DataTables.Unload("h")
If sheetName Is Nothing OrElse sheetName.Trim.Length = 0 Then sheetName = "Sheet1"
sheet.Name = sheetName

If FileSys.FileExists(fl) = False Then
    Book.Save(fl)
Else
    Dim Book1 As new XLS.Book(fl)
    Book.Sheets.Remove(sheet)
    Book1.Sheets.Add(sheet)
    Book1.Save(fl)
End If