2012-06-18 6 views
0

У меня есть своего рода отчет, который я создал с помощью TZColorStringGrid (он является потомком Delphi TStringGrid), и я хочу иметь возможность экспортировать в doc, xls, pdf, а также для печати этого отчета. Поэтому я думаю последние два дня о том, как это сделать.Экспорт TStringGrid в doc, xls и pdf

Я нашел сообщение здесь, где кто-то спросил о том, как создать TClientDataSet из содержимого TStringGrid How to create a QuickReport from the contents of a TStringGrid, и предоставленный ответ должен был использовать обработчик события QuickReport.OnNeedData. Когда я прочитал, что был счастлив, и я сказал себе, что это все, но после того, как я понял, что у меня нет Quick Reports на моем DelphiXe2, так это решение не удается. Могу ли я сделать это с помощью Fast Reports?

Второй способ, который я решил решить, состоит в том, что я использую JVCL Exporting Components, но экспорт работает только для DBGrid, а не для TStringGrid. Поэтому я думаю, что мне также нужно создать этот TClientDataSet из моего TStringGrid и связать TClientDataSet с DbGrid и экспортировать его. Но я не знаю, как создать этот ClientDataSet и если будет держать свою структуру TStringGrid, как на картинке ниже

Позже Edit: TJvPrint является компонентом JVCL для печати StringGrid и работает без необходимости TClientDataSet, но это не мешает моей структуры таблицы (я имею в виду объединенные ячейки, форматирование шрифта и так далее)

click to zoom image

Третий способ, которым я имею в виду, что может решить мою проблему, чтобы найти который экспортирует мой TStringGrid. Я нашел один SMExport, но он не бесплатный, и у меня нет денег, чтобы инвестировать в него (к сожалению, я еще студент). Знаете ли вы какие-либо другие бесплатные компоненты, которые можно использовать для экспорта TStringGrid?

Если кто-то думает о другом решении по экспорту TStringGrid, и если он хочет поделиться им, я буду благодарен!

+1

Где вы получили данные из? Вы можете использовать компонент потомка-потомка для получения данных, не так ли? Затем вы можете использовать fastreport для разработки макета. Существует бесплатный компонент «PrintGrid» (http://www.torry.net/pages.php?s=73) для печати stringgrid, но вам может потребоваться его изменить для запуска на xe2. Я не знаю и никогда не использую его раньше. Что касается экспорта в excel, word, pdf, то обычно он поставляется с коммерческим продуктом. Другим способом является использование автоматизации ole с excel и заполнение листа вашими данными. (http://codeprogrammer.blogspot.com/2007/02/export-stringgrid-to-excel-file-way-two.html) – Hendra

+0

привет Хендра. У меня есть несколько запросов для получения данных в stringgrid: это приложение школьного планировщика, что я делаю, поэтому мне нужно, чтобы они были структурированы как на изображении, и я выбрал tstringgrid, потому что я пытался объединить ячейки с Reporting Services и не смог; также в быстрых отчетах я не могу создавать отчеты с матрицами, потому что я считаю, что эта функция отсутствует в моей установке FastReport. Я попытался использовать автоматизацию Ole, но я нашел примеры того, как это сделать, которым несколько лет, и он не работает в xe2: этот пример http://www.swissdelphicenter.ch/torry/showcode.php? id = 379 –

+0

как ole не работает? У вас есть сообщение об ошибке? – Hendra

ответ

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; 

попробовать, что я не уверен, если он будет держать объединенные ячейки

Смежные вопросы