我有一种报告,我是在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的情况下工作,但它不保留我的表格结构(我的意思是合并的单元格,字体格式等等) )
我认为可以解决我的问题的第三种方法是找到一个导出我的TStringGrid的免费组件。我发现了一个SMExport,但它不是免费的,我根本没有钱投资它(不幸的是我还是学生)。 您是否知道可用于导出TStringGrid的其他任何免费组件?
如果有人想到另一种导出TStringGrid的解决方案,如果他想分享它,我将会感激不尽!
答案 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;
尝试一下,我不确定它是否会保留合并的单元格