现在的位置: 首页 > 综合 > 正文

winform 导出excel文件

2013年07月25日 ⁄ 综合 ⁄ 共 3477字 ⁄ 字号 评论关闭

/// <summary>
        ///  导出Excel(按照拖到的列的顺序)(流)
        /// </summary>      
        /// <param name="fileName">窗体的文本名称</param>
        /// <param name="myDGV">要导出的DatagridView数据</param>
        public static void PrintDataGridViewSave(string fileName, DataGridView myDGV)//另存新档按钮   导出成Excel       
        {
            if (myDGV.Rows.Count > 0)
            {
                SaveFileDialog saveFileDialog = new SaveFileDialog();
                saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
                saveFileDialog.FilterIndex = 0;
                saveFileDialog.RestoreDirectory = true;
                saveFileDialog.CreatePrompt = true;
                saveFileDialog.Title = "保存为Excel文件";
                saveFileDialog.FileName = fileName;
                saveFileDialog.ShowDialog();
                if (saveFileDialog.FileName.IndexOf(":") < 0) return; //被点了"取消"
             
                Thread.Sleep(1000); //休眠1秒

                Stream myStream;
                myStream = saveFileDialog.OpenFile();
                StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0)); //生成文件
                //StreamWriter sw = new StreamWriter(fileName, false, System.Text.Encoding.GetEncoding("gb2312"));
                StringBuilder sb = new StringBuilder();            
                try
                {
                    string[] array = new string[myDGV.Columns.Count];
                    //获取Visble =true 的列 
                    foreach (DataGridViewColumn column in myDGV.Columns)
                    {
                        if (column.Visible == true)
                        {
                            array[column.DisplayIndex] = column.HeaderText + '|' + column.Name;
                        }
                    }
                    int RowsCount = myDGV.Rows.Count;
                    int ColumnsCount = array.Length;
                    //取列名称
                    for (int i = 0; i < ColumnsCount; i++)
                    {
                        string[] str = new string[2];
                        try
                        {
                            str = array.GetValue(i).ToString().Split('|');                         
                            sb.Append(str[0] + "\t");                                                 
                        }
                        catch
                        {
                            continue;
                        }
                    }
                    sb.Append(Environment.NewLine); //换行字符
                    //导出列内容
                    for (int j = 0; j < RowsCount; j++)
                    {
                        //int mm = 0;
                        System.Windows.Forms.Application.DoEvents();
                        for (int k = 0; k < ColumnsCount; k++)
                        {
                            string[] str = new string[2];
                            if (array.GetValue(k) == null)
                                continue;
                            str = array.GetValue(k).ToString().Split('|');                          
                            sb.Append(myDGV.Rows[j].Cells[str[1]].FormattedValue.ToString().Trim() + "\t");                           
                        }                      
                        sb.Append(Environment.NewLine);
                    }
                    sw.WriteLine(sb.ToString());                  
                    sw.Flush();                
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.ToString());
                }
                finally
                {
                    sw.Close();
                    myStream.Close();
                }
            }
        }

抱歉!评论已关闭.