0

我有一种我在 TZColorStringGrid 的帮助下创建的报告(它是 Delphi 的 TStringGrid 的后代),我希望能够导出为 doc、xls、pdf 并能够打印此报告。所以我在过去两天一直在思考如何做到这一点。

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

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

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

点击放大图片

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

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

4

1 回答 1

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;

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

于 2013-05-12T20:53:03.510 回答