将TStringGrid导出为doc,xls和pdf

时间:2012-06-18 09:03:41

标签: delphi delphi-xe2 tclientdataset tstringgrid jvcl

我有一种报告,我是在TZColorStringGrid的帮助下创建的(它是Delphi的TStringGrid的后代),我希望能够导出到doc,xls,pdf以及能够打印这份报告。所以我想最近两天如何做到这一点。

我在这里找到了一篇文章,其中有人询问如何从TStringGrid How to create a QuickReport from the contents of a TStringGrid的内容创建TClientDataSet,并且提供的答案是使用QuickReport.OnNeedData事件处理程序。当我读到我很高兴并且我对自己说这就是它,但在我意识到我的DelphiXe2上没有快速报告之后,所以这个解决方案失败了。 我可以使用快速报告以类似的方式执行此操作吗?

我想解决问题的第二种方法是使用JVCL导出组件,但导出仅适用于DBGrid而不适用于TStringGrid。所以我认为我还需要从我的TStringGrid创建TClientDataSet并将TClientDataSet链接到DbGrid并导出它。 但我不知道如何创建ClientDataSet以及是否保留我的TStringGrid结构,如下图所示

稍后编辑:TJvPrint是打印字符串网格的JVCL的组件,它可以在不需要TClientDataSet的情况下工作,但它不保留我的表格结构(我的意思是合并的单元格,字体格式等等) )

click to zoom image

我认为可以解决我的问题的第三种方法是找到一个导出我的TStringGrid的免费组件。我发现了一个SMExport,但它不是免费的,我根本没有钱投资它(不幸的是我还是学生)。 您是否知道可用于导出TStringGrid的其他任何免费组件?

如果有人想到另一种导出TStringGrid的解决方案,如果他想分享它,我将会感激不尽!

1 个答案:

答案 0 :(得分:1)

procedure TForm1.exportClick(Sender: TObject);
var
  i: Integer;
  CSV: TStrings;
  SD: TSaveDialog;
  FileName: string;
begin
  SD := TSaveDialog.Create(nil);
  try
    SD.Filter := 'CSV (*.csv)|*.CSV';
    // filters file types to only allow you to select CSV files

    if SD.Execute then
    begin
      FileName := SD.FileName;
      if ExtractFileExt(FileName) <> '.csv' then
        FileName := FileName + '.csv';

      Screen.Cursor := crHourGlass;
      try
        CSV := TStringList.create;
        try
          for i := 0 to StringGrid1.RowCount - 1 do
            CSV.Add(StringGrid1.Rows[i].CommaText);

          CSV.SaveToFile(FileName);
        finally
          CSV.free;
        end;
      finally
        Screen.Cursor := crDefault;
      end;
    end;

  finally
    SD.Free;        
  end;
end;

尝试一下,我不确定它是否会保留合并的单元格