|
,下面是DataGridView到處到Excel的兩種方法,附有第二種的工程代碼,最近項目使用到這塊,就記下來了,其中第一種效率較第二種較高,但是沒有第二種容易設(shè)置格式: ![]() DateGridView導出到csv格式的Excel#region DateGridView導出到csv格式的Excel ![]() /**//// <summary> /// 常用方法,列之間加\t,一行一行輸出,此文件其實是csv文件,不過默認可以當成Excel打開。 /// </summary> /// <remarks> /// using System.IO; /// </remarks> /// <param name="dgv"></param> private void DataGridViewToExcel(DataGridView dgv) ![]() { SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "Execl files (*.xls)|*.xls"; dlg.FilterIndex = 0; dlg.RestoreDirectory = true; dlg.CreatePrompt = true; dlg.Title = "保存為Excel文件"; if (dlg.ShowDialog() == DialogResult.OK) ![]() { Stream myStream; myStream = dlg.OpenFile(); StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0)); string columnTitle = ""; try ![]() { //寫入列標題 for (int i = 0; i < dgv.ColumnCount; i++) ![]() { if (i > 0) ![]() { columnTitle += "\t"; } columnTitle += dgv.Columns[i].HeaderText; } sw.WriteLine(columnTitle); //寫入列內(nèi)容 for (int j = 0; j < dgv.Rows.Count; j++) ![]() { string columnValue = ""; for (int k = 0; k < dgv.Columns.Count; k++) ![]() { if (k > 0) ![]() { columnValue += "\t"; } if (dgv.Rows[j].Cells[k].Value == null) columnValue += ""; else columnValue += dgv.Rows[j].Cells[k].Value.ToString().Trim(); } sw.WriteLine(columnValue); } sw.Close(); myStream.Close(); } catch (Exception e) ![]() { MessageBox.Show(e.ToString()); } finally ![]() { sw.Close(); myStream.Close(); } } } #endregion ![]() DataGridView導出到Excel,有一定的判斷性#region DataGridView導出到Excel,有一定的判斷性 ![]() /**//// <summary> ///方法,導出DataGridView中的數(shù)據(jù)到Excel文件 /// </summary> /// <remarks> /// add com "Microsoft Excel 0 Object Library" /// using Excel=Microsoft.Office.Interop.Excel; /// using System.Reflection; /// </remarks> /// <param name= "dgv"> DataGridView </param> public static void DataGridViewToExcel(DataGridView dgv) ![]() { ![]() 驗證可操作性#region 驗證可操作性 //申明保存對話框 SaveFileDialog dlg = new SaveFileDialog(); //默然文件后綴 dlg.DefaultExt = "xls "; //文件后綴列表 dlg.Filter = "EXCEL文件(*.XLS)|*.xls "; //默然路徑是系統(tǒng)當前路徑 dlg.InitialDirectory = Directory.GetCurrentDirectory(); //打開保存對話框 if (dlg.ShowDialog() == DialogResult.Cancel) return; //返回文件路徑 string fileNameString = dlg.FileName; //驗證strFileName是否為空或值無效 if (fileNameString.Trim() == " ") ![]() { return; } //定義表格內(nèi)數(shù)據(jù)的行數(shù)和列數(shù) int rowscount = dgv.Rows.Count; int colscount = dgv.Columns.Count; //行數(shù)必須大于0 if (rowscount <= 0) ![]() { MessageBox.Show("沒有數(shù)據(jù)可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //列數(shù)必須大于0 if (colscount <= 0) ![]() { MessageBox.Show("沒有數(shù)據(jù)可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //行數(shù)不可以大于65536 if (rowscount > 65536) ![]() { MessageBox.Show("數(shù)據(jù)記錄數(shù)太多(最多不能超過65536條),不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //列數(shù)不可以大于255 if (colscount > 255) ![]() { MessageBox.Show("數(shù)據(jù)記錄行數(shù)太多,不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //驗證以fileNameString命名的文件是否存在,如果存在刪除它 FileInfo file = new FileInfo(fileNameString); if (file.Exists) ![]() { try ![]() { file.Delete(); } catch (Exception error) ![]() { MessageBox.Show(error.Message, "刪除失敗 ", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } #endregion Excel.Application objExcel = null; Excel.Workbook objWorkbook = null; Excel.Worksheet objsheet = null; try ![]() { //申明對象 objExcel = new Microsoft.Office.Interop.Excel.Application(); objWorkbook = objExcel.Workbooks.Add(Missing.Value); objsheet = (Excel.Worksheet)objWorkbook.ActiveSheet; //設(shè)置EXCEL不可見 objExcel.Visible = false; //向Excel中寫入表格的表頭 int displayColumnsCount = 1; for (int i = 0; i <= dgv.ColumnCount - 1; i++) ![]() { if (dgv.Columns[i].Visible == true) ![]() { objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim(); displayColumnsCount++; } } //設(shè)置進度條 //tempProgressBar.Refresh(); //tempProgressBar.Visible = true; //tempProgressBar.Minimum=1; //tempProgressBar.Maximum=dgv.RowCount; //tempProgressBar.Step=1; //向Excel中逐行逐列寫入表格中的數(shù)據(jù) for (int row = 0; row <= dgv.RowCount - 1; row++) ![]() { //tempProgressBar.PerformStep(); displayColumnsCount = 1; for (int col = 0; col < colscount; col++) ![]() { if (dgv.Columns[col].Visible == true) ![]() { try ![]() { objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim(); displayColumnsCount++; } catch (Exception) ![]() { } } } } //隱藏進度條 //tempProgressBar.Visible = false; //保存文件 objWorkbook.SaveAs(fileNameString, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); } catch (Exception error) ![]() { MessageBox.Show(error.Message, "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } finally ![]() { //關(guān)閉Excel應(yīng)用 if (objWorkbook != null) objWorkbook.Close(Missing.Value, Missing.Value, Missing.Value); if (objExcel.Workbooks != null) objExcel.Workbooks.Close(); if (objExcel != null) objExcel.Quit(); objsheet = null; objWorkbook = null; objExcel = null; } MessageBox.Show(fileNameString + "\n\n導出完畢! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information); } #endregion |
|
|
來自: mylore > 《轉(zhuǎn)載》