Intraweb输出html报告

Intraweb + IWDbGrid,搭配MSSQL,能实现从表格到报告的所见即所得。即作业员在表格里查询或编辑的数据,可以即时输出成html文件,既可以当报告打印出来,也可以作为邮件的附件,发到有需求的邮箱里去。

把数据控件里的数据输出成html文件的代码如下,不同版本可能有些许不同。

procedure TIWUserSession.Enq2Html(sTitle:String);
var
  i:Integer;
  sField,sLine:String;
  sDesc,sWidth:String;
  slData:TStringList;
  sFileName,sRealFile,sUrlFile:String;
begin
  if not qBatch.Active then exit;
  //创建数据清单
  slData:=TStringList.Create;
  slData.Add('<!DOCTYPE html><html><head>');
  slData.Add('<title>项目管理系统-查询结果</title>');
  slData.Add('<meta http-queiv="content-type" content="text/html;charset=utf-8"></head>');
  slData.Add('<body><div align="center">'+sTitle+'</div><br>');
  slData.Add('<table border="1" width="100%"><tbody><tr>');
  //加栏位头
  sLine:='';
  if not qFields.Active then qFields.Open;
  for i:=0 to qBatch.Fields.Count-1 do
  begin
    sField:=qBatch.Fields.Fields[i].FieldName;
    if qFields.Locate('FieldName',sField,[])then
    begin
      sDesc:=qFields.FieldByName('FieldDesc').AsString;
      sWidth:=qFields.FieldByName('ViewWidth').AsString;
    end;
    sLine:=sLine+'<th width='''+sWidth+'''>'+sDesc+'</th>';
  end;
  slData.Add('</tr>'); //表头结束
  slData.Add(sLine);
  //加表中内容
  qBatch.First;
  while not qBatch.Eof do
  begin
    sLine:='<tr>';
    for i:=0 to qBatch.Fields.Count-1 do
    begin
      sLine:=sLine+'<td>'+qBatch.Fields.Fields[i].AsString+'</td>';
    end;
    sLine:=sLine+'</tr>';
    slData.Add(sLine);
    qBatch.Next;
  end;
  sFileName:=sys_UsID + FormatDateTime('HHMMSS',now())+'.html';
  sRealFile:=IWServerController.ContentPath+'temp\'+sFileName;
  if FileExists(sRealFile) then DeleteFile(sRealFile);
  slData.SaveToFile(sRealFile,TEncoding.UTF8);
  slData.Free;
  sUrlFile:='/temp/'+sFileName;
  webApplication.NewWindow(sUrlFile);
end;

用IWHtmlLabel控件显示一个表格,以下例是表格形式显示产品关键信息

procedure TfmmpdPhoto.awGridAsyncLinkClick(Sender: TObject;
  EventParams: TStringList; RowIndex, ColumnIndex: Integer);
var
  sValue,sLine:String;
  i1,i2:Integer;
  slData:TStringList;
begin
  inherited;
  sValue:=awGrid.Cells[ColumnIndex,RowIndex];
  sValue:=StringReplace(sValue,' ','',[rfReplaceAll]);
  i1:=14;
  i2:=pos('title=',sValue);
  sValue:=copy(sValue,i1,i2-i1-1);
  qMaster.Locate('RecId',sValue,[]);
  UserSession.sys_Value1:=sValue; //记录ID
  slData:=TStringList.Create;
  slData.Add('<table border="0" width="100%"><tr>');
  sLine:='<th width="50%"></th><th width="50%"></th>';
  slData.Add(sLine);
  sLine:='<tr><td>'+'编号:'+qMaster.FieldByName('pdNum').AsString+'</td>';
  sLine:=sLine+'<td>'+'型号:'+qMaster.FieldByName('pdType').AsString+'</td>';
  sLine:=sLine+'</tr>';
  slData.Add(sLine);
  sLine:='<tr><td>'+'功率:'+qMaster.FieldByName('pdPower').AsString+'W</td>';
  sLine:=sLine+'<td>'+'电压:'+qMaster.FieldByName('pdVoltage').AsString+'V</td>';
  sLine:=sLine+'</tr>';
  slData.Add(sLine);
  sLine:='<tr><td>'+'风力:'+qMaster.FieldByName('pdWind').AsString+'</td>';
  sLine:=sLine+'<td>'+'噪音:'+qMaster.FieldByName('pdNoise').AsString+'dB</td>';
  sLine:=sLine+'</tr>';
  slData.Add(sLine);
  sLine:='<tr><td>'+'特性:'+qMaster.FieldByName('pdDesc').AsString+'</td>';
  sLine:=sLine+'<td>'+'存放:'+qMaster.FieldByName('pdLocation').AsString+'</td>';
  sLine:=sLine+'</tr>';
  slData.Add(sLine);
  sLine:='<tr><td>'+'备注:'+qMaster.FieldByName('Remark').AsString+'</td>';
  sLine:=sLine+'</tr>';
  slData.Add(sLine);
  UserSession.sys_Value2:=slData.Text;
  TfmmpdProd.Create(webApplication).Show;
end;

发表评论