[Other]使用Crystal Report將報表另存成檔案
前兩篇提到Reporting Service的功能,這篇來說一下Crystal Report如何做到同樣的功能吧,如果你看得懂這一篇:
[SQL Server]透過ReportViewer將報表另存成檔案
那Crystal Report這邊的做法對你來說一定沒問題,因為兩者的做法幾乎一模一樣,簡單到我們直接看Code就會了:
/// <summary>
/// 傳入報表路徑、資料與要轉的檔案類型,回傳CR的報表陣列
/// </summary>
/// <param name="pReportPath">報表路徑(在網站中可用相對路徑,在類別中需要指定實體路徑)</param>
/// <param name="pReportData">資料內容</param>
/// <param name="pExpertFormatType">要轉出的檔案類型</param>
/// <returns>回傳結果的陣列</returns>
public byte[] ExportCrystalReportAsByte(string pReportPath, DataTable pReportData, ExportFormatType pExpertFormatType)
{
ReportDocument tCRReportDocument = new ReportDocument();
//載入該報表
tCRReportDocument.Load(pReportPath);
//設定資料
tCRReportDocument.SetDataSource(pReportData);
//將資料內容轉成串流
Stream tStream = tCRReportDocument.ExportToStream(pExpertFormatType);
byte[] tResult = new byte[tStream.Length];
//將串流資料轉成byte[]
tStream.Read(tResult, 0, Convert.ToInt32(tStream.Length));
tStream.Close();
return tResult;
}
另外Crystal Report還支援直接將報表轉成實體檔的功能,不用自己將byte[]內容轉成檔案囉,可以參考以下寫法:
/// <summary>
/// 透過crystal report產出報表結果檔
/// </summary>
/// <param name="pReportPath">報表rpt檔的實體路徑</param>
/// <param name="pExportFileName">要輸出的檔案路徑</param>
/// <param name="pReportData">要餵進去的資料</param>
/// <param name="pExpertFormatType">輸出的檔案類型(PortableDocFormat=PDF,不支援XML與IMAGE)</param>
public void ExportCrystalReportAsFile(string pReportPath, string pExportFileName, DataTable pReportData, ExportFormatType pExpertFormatType)
{
ReportDocument tCRReportDocument = new ReportDocument();
//載入該報表
tCRReportDocument.Load(pReportPath);
//設定資料
tCRReportDocument.SetDataSource(pReportData);
switch (pExpertFormatType.ToString())
{
case "EXCEL":
tCRReportDocument.ExportToDisk(ExportFormatType.Excel, pExportFileName);
break;
case "HTML3.2":
tCRReportDocument.ExportToDisk(ExportFormatType.HTML32, pExportFileName);
break;
case "HTML4.0":
tCRReportDocument.ExportToDisk(ExportFormatType.HTML40, pExportFileName);
break;
case "CSV":
tCRReportDocument.ExportToDisk(ExportFormatType.ExcelRecord, pExportFileName);
break;
case "PDF":
tCRReportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, pExportFileName);
break;
default:
tCRReportDocument.ExportToDisk(ExportFormatType.Excel, pExportFileName);
break;
}
}
Crystal Report最少就支援五種匯出格式,應該很夠用了,這一類的內容很簡單,因此只是share程式內容出來,就不多做說明了。
游舒帆 (gipi) 探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。 |