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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM