首页 > 代码库 > uniGUI试用笔记(七)
uniGUI试用笔记(七)
uniGUI的文件下载由于TUniSession的存在而变得非常简单,最典型的一个例子就是将列表中的所有数据导出到Excel中。服务器上采用TMS FlexCel控件,先将数据集中的记录导入到Excel文件中,然后再将Excel文件内容输出到内存流中,最后通过TUniSession发送到客户端。代码如下:
procedure TfmeWebDBListBase.ExportData; var i, rowindex, colindex: Integer; ms : TMemoryStream; begin { 检查数据集 } if Assigned(cdsMain) and cdsMain.Active then try { 创建Excel文件 } FlexCelImport1.NewFile(1); cdsMain.First; { 第一行为标题 } rowindex := 1; colindex := 1; for i := 0 to cdsMain.FieldCount -1 do { 只导出数据集中可视的字段 } if cdsMain.Fields[i].Visible then begin FlexCelImport1.CellValue[rowindex, colindex] := cdsMain.Fields[i].DisplayLabel; inc(colindex); end; { 依次导出数据 } while not cdsMain.Eof do begin { 增加一行 } inc(rowindex); colindex := 1; for i := 0 to cdsMain.FieldCount -1 do { 只导出数据集中可视的字段 } if cdsMain.Fields[i].Visible then begin { 时间和日期字段需要单独出来一下,否则出来的都是浮点数 } if cdsMain.Fields[i].DataType in [ftDate, ftDateTime, ftTime, ftTimeStamp] then FlexCelImport1.CellValue[rowindex, colindex] := cdsMain.Fields[i].AsString else FlexCelImport1.CellValue[rowindex, colindex] := cdsMain.Fields[i].Value; inc(colindex); end; { 下一条 } cdsMain.Next; end; { 创建内存流 } ms := TMemoryStream.Create; try { 将Excel保存到内存流 } FlexCelImport1.SaveToStream(ms); ms.Position := 0; { 将数据流发送到客户端,同时指定下载文件名,非常简单 } MainForm.uniApplication.UniSession.SendStream( ms, ModelName + ‘.xls‘ ); finally ms.Free; { 清理内存 } FlexCelImport1.CloseFile; end; except on E : Exception do FlexCelImport1.CloseFile; end; end;
uniGUI试用笔记(七)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。