使用DevExpress匯出GridControl控制元件資料到excel檔案

藏藍蓮華發表於2017-01-09

使用DevExpress可以實現將介面的GridControl的內容直接匯出到excel檔案,一般實現方法如下所示:

	public void export(GridControl gridControl1)
        {
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.FileName = "";
            saveFileDialog1.Filter = "Excel檔案(.xls)|*.xls";
            string strtype = "Excel檔名";
            
            saveFileDialog1.FileName = strtype + DateTime.Now.ToString("yyyyMMddhhmmss");
            saveFileDialog1.OverwritePrompt = false; //已存在檔案是否覆蓋提示
            if (saveFileDialog1.ShowDialog() != DialogResult.OK)
                return;
            //已存在檔案是否覆蓋提示
            while (System.IO.File.Exists(saveFileDialog1.FileName) &&
                DevExpress.XtraEditors.XtraMessageBox.Show("該檔名已存在,是否覆蓋?",
               "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
            {
                if (saveFileDialog1.ShowDialog() != DialogResult.OK)
                    return;
            }
            if (saveFileDialog1.FileName != "")
            {
                try
                {
                    System.IO.FileStream fs =(System.IO.FileStream)saveFileDialog1.OpenFile();
                    gridControl1.ExportToXls(fs);//將GridControl的內容匯出到指定的檔案路徑
                    fs.Close();
                    DevExpress.XtraEditors.XtraMessageBox.Show("資料匯出成功!", "提示");
                }
                catch (Exception ex)
                {
                    if (ex.Message.Contains("正由另一程式使用"))
                    {
                        DevExpress.XtraEditors.XtraMessageBox.Show("資料匯出失敗!檔案正由另一個程式佔用!", "提示");
                    }
                    else
                        DevExpress.XtraEditors.XtraMessageBox.Show("資料匯出失敗!資料量過大,請分別統計再匯出!", "提示");
                }
            }

        }
不過以上程式碼會出現一定的bug,比如說如果GridControl的資料是取自於資料庫,之後使用CustomColumnDisplayText事件的觸發函式修改其中一兩個欄位的值後展示到介面,而使用以上的方法則匯出的結果還為取自資料庫的原始值,並非處理後的值。那麼應當為ExportToXls函式設定匯出選項。

將如下程式碼:

gridControl1.ExportToXls(fs);//將GridControl的內容匯出到指定的檔案路徑
替換為:

DevExpress.XtraPrinting.XlsExportOptions options = new DevExpress.XtraPrinting.XlsExportOptions(DevExpress.XtraPrinting.TextExportMode.Value);
options.TextExportMode = TextExportMode.Text;//設定匯出模式為文字
gridControl1.ExportToXls(fs,options);

而匯出的excel文件的格式不太美觀,列的寬度過短,因為這種方法是直接匯出介面顯示的GridControl效果,預設為表格列寬度最小值,應當對GridControl的屬性進行設定:設定GridControl的OptionPrint下的AutoWidth的值為false。以上設定即可使匯出的excel檔案列寬自動調整,並且可以根據需要調整GridControl控制元件具體列在介面展示寬度即可。

相關文章