C# DataGridView導出excel的幾種方法


第一種、首先本form上游datagridview的控件及數據,再建一個button控件作為導出按鈕,在按鈕click事件中寫入以下代碼

此乃數據集的方式,即先將數據放入數據集表里 作為對象與excel一一對應

 //保存文件對話框
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "Excel文件|*.xlsx|Word文件|*.docx";
            sfd.FilterIndex = 0;
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                string search = "select * from 舊備件表 where(0=0)";
                if (this.textBox1.Text.Length > 0)
                {
                    search = search + " and 物料編碼=" + "'" + textBox1.Text + "'";
                }
                if (this.textBox2.Text.Length > 0)
                {
                    search = search + " and 設備號=" + "'" + textBox2.Text + "'";
                }
                if (this.textBox3.Text.Length > 0)
                {
                    search = search + " and 物料描述 like" + "'%" + textBox3.Text + "%'";//實現物料描述的模糊查詢
                }
                if (this.textBox4.Text.Length > 0)
                {
                    search = search + " and 備件序列號 like" + "'%" + textBox4.Text + "%'";//實現備件序列號的模糊查詢
                }
                //調用導出Excel的方法,傳入DataTable數據表和路徑
                SqlDataAdapter sda = new SqlDataAdapter(search, DataBase.GetSqlConnection());
                System.Data.DataTable dt = new System.Data.DataTable();
                //將數據庫中查到的數據填充到DataTable數據表
                sda.Fill(dt);
                ExportExcel(dt, sfd.FileName);
            }
        }
        void ExportExcel(System.Data.DataTable dt, string filepath)
        {
            //創建Excel應用程序類的一個實例,相當於從電腦開始菜單打開Excel
            ApplicationClass xlsxapp = new ApplicationClass();
            //新建一張Excel工作簿
            Workbook wbook = xlsxapp.Workbooks.Add(true);
            //第一個sheet頁
            Worksheet wsheet = (Worksheet)wbook.Worksheets.get_Item(1);
            //將DataTable的列名顯示在Excel表第一行
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                //注意Excel表的行和列的索引都是從1開始的
                wsheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;
            }
            //遍歷DataTable,給Excel賦值
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    //從第二行第一列開始寫入數據
                    wsheet.Cells[i + 2, j + 1] = dt.Rows[i][j];
                }
            }
            //保存文件
            wbook.SaveAs(filepath);
            //釋放資源
            xlsxapp.Quit();
        }
    

第二種、此乃直接將datagridview里的數據一一導出放入excel指定的單元格里。

private void button3_Click(object sender, EventArgs e)
        {
            string fileName = "";
            string saveFileName = "";
            SaveFileDialog saveDialog = new SaveFileDialog();
            saveDialog.DefaultExt = "xlsx";
            saveDialog.Filter = "Excel文件|*.xlsx";
            saveDialog.FileName = fileName;
            saveDialog.ShowDialog();
            saveFileName = saveDialog.FileName;
            if (saveFileName.IndexOf(":") < 0) return; //被點了取消
            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            if (xlApp == null)
            {
                MessageBox.Show("無法創建Excel對象,您的電腦可能未安裝Excel");
                return;
            }
            Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
            Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
            Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1 
            //寫入標題             
            for (int i = 0; i < dataGridView1.ColumnCount; i++)
            { worksheet.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText; }
            //寫入數值
            for (int r = 0; r < dataGridView1.Rows.Count; r++)
            {
                for (int i = 0; i < dataGridView1.ColumnCount; i++)
                {

          if (i == 3)//將這一列有前導零的加上一個單引號
          {
            worksheet.Cells[r + 2, i + 1] = "'" + dataGridView1.Rows[r].Cells[i].Value;
            string temp = "'" + dataGridView1.Rows[r].Cells[i].Value;//看下值
          }
          else
          {
            worksheet.Cells[r + 2, i + 1] = dataGridView1.Rows[r].Cells[i].Value;
          }

             }
                System.Windows.Forms.Application.DoEvents();
            }
            worksheet.Columns.EntireColumn.AutoFit();//列寬自適應
            MessageBox.Show(fileName + "資料保存成功", "提示", MessageBoxButtons.OK);
            if (saveFileName != "")
            {
                try
                {
                    workbook.Saved = true;
                    workbook.SaveCopyAs(saveFileName);  //fileSaved = true;                 
                }
                catch (Exception ex)
                {//fileSaved = false;                      
                    MessageBox.Show("導出文件時出錯,文件可能正被打開!\n" + ex.Message);
                }
            }
            xlApp.Quit();
            GC.Collect();//強行銷毀           }
        }
    

 第三種:網上的

SaveFileDialog SaveDialog = new SaveFileDialog();
                    SaveDialog.Filter = "Excel 文件(*.xls)|*.xls|Excel 文件(*.xlsx)|*.xlsx|所有文件(*.*)|*.*";
                    SaveDialog.RestoreDirectory = true;
                    if (SaveDialog.ShowDialog() == DialogResult.OK)
                    {
                        GenerateAttachment(SaveDialog.FileName,dtExport);
                    }
 try
            {
                //需要添加 Microsoft.Office.Interop.Excel引用 
                Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
                if (app == null)//服務器上缺少Excel組件,需要安裝Office軟件
                {
                    return;
                }
                app.Visible = false;
                app.UserControl = true;
                string strTempPath = System.Windows.Forms.Application.StartupPath + "\\Template\\Form.xls";
                Microsoft.Office.Interop.Excel.Workbooks workbooks = app.Workbooks;
                Microsoft.Office.Interop.Excel._Workbook workbook = workbooks.Add(strTempPath); //加載模板
                Microsoft.Office.Interop.Excel.Sheets sheets = workbook.Sheets;
                Microsoft.Office.Interop.Excel._Worksheet worksheet = (Microsoft.Office.Interop.Excel._Worksheet)sheets.get_Item(1); //第一個工作薄。
                if (worksheet == null)//工作薄中沒有工作表
                {
                    return;
                }
 
                //1、獲取數據
                int rowCount = DT.Rows.Count;
                if (rowCount < 1)//沒有取到數據
                {
                    return;
                }
                //2、寫入數據,Excel索引從1開始
                for (int i = 1; i <= rowCount; i++)
                {
                    int row_ = 1 + i;  //Excel模板上表頭占了1行
                    int dt_row = i - 1; //dataTable的行是從0開始的 
                    worksheet.Cells[row_, 1] = DT.Rows[dt_row]["itemname"].ToString();
                    worksheet.Cells[row_, 2] = DT.Rows[dt_row]["Color"].ToString();
                    worksheet.Cells[row_, 3] = DT.Rows[dt_row]["Grade1"].ToString();
                   // worksheet.Cells[row_, 4] = DT.Rows[dt_row]["ProAreaName"].ToString();
                    worksheet.Cells[row_, 4] = DT.Rows[dt_row]["Quantity"].ToString();
                    worksheet.Cells[row_, 5] = DT.Rows[dt_row]["Unit_name"].ToString();
                    worksheet.Cells[row_, 6] = DT.Rows[dt_row]["TotalAmt"].ToString();
                    
                }
                worksheet.Cells[DT.Rows.Count + 2, 1] = "合計";
                worksheet.Cells[DT.Rows.Count + 2, 4] = DT.Compute("sum(Quantity)", "");
                worksheet.Cells[DT.Rows.Count + 2, 6] = DT.Compute("sum(TotalAmt)", "");
                //調整Excel的樣式。
                //Microsoft.Office.Interop.Excel.Range rg = worksheet.Cells.get_Range("A3", worksheet.Cells[rowCount + 2, 32]);
                //rg.Borders.LineStyle = 1; //單元格加邊框
                //worksheet.Columns.AutoFit(); //自動調整列寬
 
                //隱藏某一行
                //選中部分單元格,把選中的單元格所在的行的Hidden屬性設為true
                //worksheet.get_Range(app.Cells[2, 1], app.Cells[2, 32]).EntireRow.Hidden = true;
 
                //刪除某一行
               // worksheet.get_Range(app.Cells[2, 1], app.Cells[2, 32]).EntireRow.Delete(Microsoft.Office.Interop.Excel.XlDirection.xlUp);
 
                //3、保存生成的Excel文件
                //Missing在System.Reflection命名空間下
                //string savePath = System.Windows.Forms.Application.StartupPath+"/Temp/T1_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
 
                workbook.SaveAs(FileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                //workbook.SaveAs(FileName,FileFormat,Password,WriteResPassword,ReadOnlyRecommended,CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local) 
                //4、按順序釋放資源
                NAR(worksheet);
                NAR(sheets);
                NAR(workbook);
                NAR(workbooks);
                app.Quit();
                NAR(app);
                MessageBox.Show("保存成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            catch (Exception ex)
            {
               MessageBox.Show("異常,異常信息為:"+ex.ToString(),"");
            }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM