以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- writebook测试问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=159912) |
-- 作者:hammerlucy -- 发布时间:2021/1/13 14:04:00 -- writebook测试问题 将EXCEL报表向前端输送的过程中,根据教材论,writebook最为合宜,省去了book.save的写硬盘时间及重名问题,但实际测试时,发现writebook输出报表,在前端无法弹出下载窗口。 |
-- 作者:hammerlucy -- 发布时间:2021/1/13 14:08:00 -- 代码如下(部分交互参数可以进行替换): \'同步执行函数,用于导出下载excel文件 \'必备参数1.e参数2.sql字符串 \'可选参数1.下载的表名tablename \'----------通过创建查询表来生成table------------------ Dim e As RequestEventArgs = args(0) Dim tb As new QueryBuilder If e.Values.containskey("sql") Then If e.Values.containskey("tablename") Then tb.TableName= e.Values("tablename") Else tb.TableName="导出数据" End If tb.ConnectionName= e.Cookies("con") tb.SelectString= e.Values("sql") tb.Build \'----------生成EXCEL表格文件------------------ Dim tbl As Table = Tables(tb.TableName) Dim hdr As Integer = tbl.HeaderRows \'获得表头的层数 Dim Book As New XLS.Book Dim Sheet As XLS.Sheet = Book.Sheets(0) tbl.CreateSheetHeader(Sheet,0,0,False) \'生成表头,且为多层模式 \'填充数据 For c As Integer = 0 To tbl.Cols.Count - 1 For r As Integer = 0 To tbl.Rows.Count - 1 sheet(r + hdr,c).value = tbl(r,c) Next Next book.PreBuild = False \'非报表模请将PreBuild 属性设置为False e.WriteBook(book,"download.xls",False) \'Book.Save("d:\\web\\file_download\\" & tb.TableName & ".xls") \'e.WriteString("<a href=\'./file_download/" & tb.TableName & ".xls\'" & ">下载导出文件</a>") End If 前端测试显示效果为(preview): 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAAg........ |
-- 作者:hammerlucy -- 发布时间:2021/1/13 14:10:00 -- 上述代码中,采用book.save方法测试是可行的,但弊端过多 |
-- 作者:有点蓝 -- 发布时间:2021/1/13 14:21:00 -- 我使用帮助的例子测试没有问题,请上传可以测试的例子说明 |
-- 作者:hammerlucy -- 发布时间:2021/1/13 22:14:00 -- 经多轮测试,只能以网址的形式请求writebook方能输出到前端,如http://127.0.0.1/excel_download?tablename=参数 现有限制:参数尽量少,避免超出url限制
而前端采用$.post("excel_downlod",{tablename:参数},function(){})这种方式,只能收到文件流(显示为一串乱码) [此贴子已经被作者于2021/1/13 22:38:40编辑过]
|
-- 作者:hammerlucy -- 发布时间:2021/1/13 23:03:00 -- 利用form采用post的方式提交,再用利用$(\'form\').form()的方式则可以完美解决传参动态生成EXCEL报表的问题 |