匯出Excel

使用 OpenXml 匯出 Excel 檔案

在系統中我們經常需要把資料匯出成為 Excel 檔案,再交給其他部門或客戶做後續的處理。在多數的狀況下,一段 sql 就可以完成這個功能大部分的工作。我們在前面介紹的 CRUD清單畫面,它的操作步驟是使用者輸入查詢條件,然後系統把符合的查詢結果顯示在畫面上,這個動作和我們現在要討論的匯出 Excel 十分類似,不同的是這裡不是將結果顯示在畫面上,而是產生一個 Excel 檔案。所以我們把這個匯出功能做成 CRUD的一部分,你只要增加少許程式碼就可以輕鬆完成。

資料庫文件系統的 [資料表維護] 功能為例,匯出功能的按鈕位置如下圖:

點擊之後,系統會匯出畫面上的查詢結果,在程式上最後會呼叫 /Services/TableRead.cs 的 Export 函數,程式碼如下:

//匯出 excel
public void Export(JObject cond)
{
    _WebExcel.ReadToScreen(dto, cond, "Table.xlsx", _Xp.GetTpl("Table.xlsx"), 1);
    //_WebExcel.ReadToScreen(dto, cond, "Table.xlsx");
}

在呼叫 _WebExcel.ReadToScreen 這個函式時同時傳入5個參數:

• dto:與 [CRUD清單畫面] 的輸入設定相同,但增加一個 ExportSql 欄位 (如下說明)
• cond:前端傳入的查詢條件
• Table.xlsx:產生的 Excel 檔案名稱
• _Xp.GetTpl("Table.xlsx"):這個函數會傳回範本檔案的路徑,如果空白則不使用範本,匯出檔案的欄位名稱將使用 sql 的欄位
• 1:範本檔的名稱欄位行數位置

在上面的 dto 變數裡面設定匯出時要執行 sql 內容,欄位名稱為 ExportSql,如下:

另外,_WebExcel 這個類別包含3個函數跟匯出 Excel 的功能有關,第一個是上面提到的 ReadToScreen,其它2個分別為RowsToScreen、SqlToScreen,它們可以用來將不同的資料來源匯出檔案。一個軟體系統有時候會需要大量但是不複雜的報表,這種情形很適合利用這個類別來完成,這樣可以讓你輕鬆的完成這些累人的工作。