# datagridview导出到excel【转载】

    技术2022-05-20  56

    # datagridview导出到excel【转载】 http://hi.baidu.com/weizier/blog/item/8212caea1123b4d6d439c9fe.html

    方法一:添加dll引用

    右击选择你所在的项目的“引用”,选择“添加引用”。

    弹出“添加引用”对话框。

    选择“COM”选项卡。

    选择“Microsoft Excel 11.0 Object Library”

    单击“确定”按钮。

    代码

    public static bool ExportForDataGridview(DataGridView gridView, string fileName, bool isShowExcle)         {

                //建立Excel对象

                Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();             try             {                 if (app == null)                 {                     return false;                 }                                 app.Visible = isShowExcle;                 Workbooks workbooks = app.Workbooks;                 _Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);                 Sheets sheets = workbook.Worksheets;                 _Worksheet worksheet = (_Worksheet)sheets.get_Item(1);                 if (worksheet == null)                 {                     return false;                 }                 string sLen = "";                 //取得最后一列列名                 char H = (char)(64 + gridView.ColumnCount / 26);                 char L = (char)(64 + gridView.ColumnCount % 26);                 if (gridView.ColumnCount < 26)                 {                     sLen = L.ToString();                 }                 else                 {                     sLen = H.ToString() + L.ToString();                 }

                    //标题                 string sTmp = sLen + "1";                 Range ranCaption = worksheet.get_Range(sTmp, "A1");                 string[] asCaption = new string[gridView.ColumnCount];                 for (int i = 0; i < gridView.ColumnCount; i++)                 {                     asCaption[i] = gridView.Columns[i].HeaderText;                 }                 ranCaption.Value2 = asCaption;

                    //数据                 object[] obj = new object[gridView.Columns.Count];                 for (int r = 0; r < gridView.RowCount - 1; r++)                 {                     for (int l = 0; l < gridView.Columns.Count; l++)                     {                         if (gridView[l, r].ValueType == typeof(DateTime))                         {                             obj[l] = gridView[l, r].Value.ToString();                         }                         else                         {                             obj[l] = gridView[l, r].Value;                         }                     }                     string cell1 = sLen + ((int)(r + 2)).ToString();                     string cell2 = "A" + ((int)(r + 2)).ToString();                     Range ran = worksheet.get_Range(cell1, cell2);                     ran.Value2 = obj;                 }                 //保存                 workbook.SaveCopyAs(fileName);                 workbook.Saved = true;             }             finally             {                 //关闭                 app.UserControl = false;                 app.Quit();             }             return true;

            }

     

    方法二

    用流保存成xls文件. 这种方法比较好,不用引用Excel组件.   下面是具体例子,可以参考

    using System.IO;

           

            /// <summary>

            /// 另存新档按钮

            /// </summary>

            private void SaveAs() // 另存新档按钮   导出成Excel

            {

                SaveFileDialog saveFileDialog = new SaveFileDialog ();

                saveFileDialog.Filter = "Execl files (*.xls)|*.xls" ;

                saveFileDialog.FilterIndex = 0;

                saveFileDialog.RestoreDirectory = true ;

                saveFileDialog.CreatePrompt = true ;

                saveFileDialog.Title = "Export Excel File To" ;

                saveFileDialog.ShowDialog();

                Stream myStream;

                myStream = saveFileDialog.OpenFile();

                //StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312"));

                StreamWriter sw = new StreamWriter (myStream, System.Text.Encoding .GetEncoding(-0));

                string str = "" ;

                try

                {

                    // 写标题

                    for (int i = 0; i < dgvAgeWeekSex.ColumnCount; i++)

                    {

                        if (i > 0)

                        {

                            str += "/t" ;

                        }

                        str += dgvAgeWeekSex.Columns[i].HeaderText;

                    }

                    sw.WriteLine(str);

                    // 写内容

                    for (int j = 0; j < dgvAgeWeekSex.Rows.Count; j++)

                    {

                        string tempStr = "" ;

                        for (int k = 0; k < dgvAgeWeekSex.Columns.Count; k++)

                        {

                            if (k > 0)

                            {

                                tempStr += "/t" ;

                            }

                            tempStr += dgvAgeWeekSex.Rows[j].Cells[k].Value.ToString();

                        }

                       

                        sw.WriteLine(tempStr);                    

                    }

                    sw.Close();

                    myStream.Close();

                }

                catch (Exception e)

                {

                    MessageBox .Show(e.ToString());

                }

                finally

                {

                    sw.Close();

                    myStream.Close();

                }          

           }


    最新回复(0)