读书人

DGV 导出Excel,该如何解决

发布时间: 2012-02-10 21:27:42 作者: rapoo

DGV 导出Excel
如题,最近要做一个DGV的导出功能,从网上找了个比较适合自己情况的办法,原理是用流的形式将DGV写入Excel,代码如下:

C# code
#region 方法【DataGridViewToExcel】:导出excel        private void DataGridViewToExcel(DataGridView dgv)        {            SaveFileDialog saveFileDialog = new SaveFileDialog();            saveFileDialog.Filter = "Execl files (*.xls)|*.xls";            saveFileDialog.FilterIndex = 0;            saveFileDialog.RestoreDirectory = true;            saveFileDialog.CreatePrompt = true;            saveFileDialog.Title = "保存为Excel";            if (saveFileDialog.ShowDialog() == DialogResult.OK)            {                Stream stream;                stream = saveFileDialog.OpenFile();                StreamWriter streamWriter = new StreamWriter(stream, System.Text.Encoding.GetEncoding(-0));                string columnTitle = "";                try                {                    #region 写入列标题                    for (int i = 0; i < dgv.ColumnCount; i++)                    {                        if (dgv.Columns[i].Visible == true)                        {                            if (i > 0)                            {                                columnTitle += "\t";                            }                            columnTitle += dgv.Columns[i].HeaderText;                        }                    }                    streamWriter.WriteLine(columnTitle);                    #endregion                    #region 写入列内容                    for (int j = 0; j < dgv.Rows.Count; j++)                    {                        string columnValue = "";                        for (int k = 0; k < dgv.Columns.Count; k++)                        {                            if (dgv.Columns[k].Visible == true)                            {                                if (k > 0)                                {                                    columnValue += "\t";                                }                                if (dgv.Rows[j].Cells[k].Value == null)                                {                                    columnValue += "";                                }                                else                                {                                    columnValue += dgv.Rows[j].Cells[k].Value.ToString();                                }                            }                        }                        streamWriter.WriteLine(columnValue);                    }                    #endregion                    streamWriter.Close();                    stream.Close();                }                catch (Exception ex)                {                    MessageBox.Show(ex.ToString());                }            }        }        #endregion


数据量很大,但是速度超快,一下子就导完了,只是有个缺点,就是导出来之后,将一些由纯数字组成的列(比如说手机号码),自动用16进制保存了,有些列调大了列宽之后就恢复正常,有些列还是不行。

纠结了很久,还是没搞好,只好向各位高手请教!

[解决办法]
把StreamWriter 换成FileStream!
[解决办法]
在字符前加个’号吧
[解决办法]
这个转换本身就只是保存成文本文件,无论你如何做EXCEL都不可能分清数字或数字型文本。所以只能在EXCEL中再做处理。除非你能保存为EXCEL格式的文件,用OLE方式来存。

以上个人想法,不对请指教。
[解决办法]
把StreamWriter 换成FileStream!
[解决办法]
你换个思路吧,你试试用grid++报表

读书人网 >C#

热点推荐