以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  问下服务端报表  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=142886)

--  作者:blackzhu
--  发布时间:2019/11/8 10:25:00
--  问下服务端报表

Excel报表与后台数据

如果你是一个网页设计高手,那么网页的数据展示能力是非常优秀的。

但绝大多数用户,包括我自己,都无法设计出高水准的网页,所以需要一个简单的替代工具,实现复杂数据的展示,特别是手机端的复杂数据展示。

经过综合考虑,我们选择了Excel报表来完成这项任务,但是在Foxtable 2017之前,Excel报表只能根据已经加载的数据生成,而作为服务端程序,通常是没有办法将所有数据加载的。

所以,我们对Excel报表进行了改进,使得其可以直接基于后台数据生成报表。

我首先要提醒大家一下:

服务端的动态报表功能要尽量采用Excel报表实现,不要尝试在服务端动态生成Word报表,也不要尝试将报表保存为PDF文件,这些操作的时间和资源的消耗都非常大,是Excel报表的百倍以上,不适合在服务端使用。





如果我生成的是html 这个资源耗的厉害吗?


--  作者:blackzhu
--  发布时间:2019/11/8 10:31:00
--  
现在excel 没有 savehtm了吗?  如果只有EXCEL 报表的话,报表安全性有问题,比如被人再次编辑
[此贴子已经被作者于2019/11/8 10:34:33编辑过]

--  作者:有点蓝
--  发布时间:2019/11/8 10:48:00
--  
一直都没有savehtm的吧

使用vba另存为HTML格式

Dim App As New MSExcel.Application
Dim Wb As MSExcel.Workbook = App.WorkBooks.Open("E:\\问题\\Reports\\abc.xls")
Wb.SaveAs("E:\\问题\\abc.html",MSExcel.XlFileFormat.xlHtml)
App.Quit

--  作者:blackzhu
--  发布时间:2019/11/8 10:55:00
--  
我刚才想到这个了,在测试呢
--  作者:blackzhu
--  发布时间:2019/11/8 11:16:00
--  
直接服务器崩溃了
--  作者:有点蓝
--  发布时间:2019/11/8 11:23:00
--  
写了什么代码?
--  作者:blackzhu
--  发布时间:2019/11/8 11:32:00
--  
生成了报表然后再用下面的代码生成了html,再下载,然后就崩溃了,另外服务器项目文件夹产生了转换以后的一堆文件.

Dim App As New MSExcel.Application
Dim Wb As MSExcel.Workbook = App.WorkBooks.Open("E:\\问题\\Reports\\abc.xls")
Wb.SaveAs("E:\\问题\\abc.html",MSExcel.XlFileFormat.xlHtml)
App.Quit


不能解决EXCEL不可以编辑的问题是个大问题.为啥不能保存为pdf呢!
[此贴子已经被作者于2019/11/8 11:33:45编辑过]

--  作者:有点蓝
--  发布时间:2019/11/8 11:38:00
--  
生成的网页像普通网页一样打开即可,下什么载!贴出自己完整代码,贴别人的代码没有任何意义

至于保存为pdf,1楼不是有详细说明了吗?


--  作者:blackzhu
--  发布时间:2019/11/8 11:44:00
--  
我再想想,是哦 可以直接访问这个页面的
[此贴子已经被作者于2019/11/8 11:44:57编辑过]

--  作者:blackzhu
--  发布时间:2019/11/8 11:54:00
--  
Dim RKGUID As String = e.Values("RKGUID")
            Dim rkd As String = e.Values("rkd")
            If RKGUID > "" Then
                Dim Book As New XLS.Book(ProjectPath & "Attachments\\入库单.xls")
                Dim fl As String = ProjectPath & "入库单" & e.Values("rkd") & ".xls"
                Book.AddDataTable("产品入库", "服务器", "Sel     ect * from 产品入库 where GUID=\'" & RKGUID & "\'") \'添加父表入库
                Book.AddDataTable("产品入库明细", "服务器", "Sel     ect * from 产品入库明细 where 入库ID=\'" & RKGUID & "\'") \'添加子表
                Book.AddRelation("产品入库", "GUID", "产品入库明细", "入库ID") \'建立关联
                Book.PreBuild = True \'非报表模请将PreBuild 属性设置为False
                \' e.WriteBook(Book, "入库单" & e.Values("rkd") & ".xls", False)
                Book.Build() \'生成细节区
                Book.Save(fl) \'保存工作簿
                Dim App As New Excel.Application
                Dim Wb As Excel.Workbook = App.Workbooks.Open(fl)
                Wb.SaveAs(fl.Replace("xls", "html"), Excel.XlFileFormat.xlHtml)
                App.Quit()



网页 js 代码


function rkPrint() {
    var row = $(\'#rktable\').datagrid(\'getSelected\');
    if (!row) {
        $.messager.alert("警告""请选择要打印的单据!"\'warning\');
    } else {
        var rowIndex = $(\'#rktable\').datagrid(\'getRowIndex\'row);
        if (rowIndex >= -1) {
            location = "../downExcel?RKGUID=" +  row.入库ID + "&rkd="row.入库单号;
            console.log("../downExcel?RKGUID=" +  row.入库ID + "&rkd="row.入库单号);
        }
    }
}

这个直接打开这个生成的网页应该怎么改?