【C#项目实战】高效Excel导出到默认位置

来源:互联网 发布:网络棋牌充值漏洞 编辑:程序博客网 时间:2024/05/01 18:32

【前言】

       还是前两天做那个抽奖系统, 因为抽完奖要保存到Excel表格里所以用到了导出功能。 之前写过一篇用WPS导出的,但是那种导出方法效率太低,经常点击导出以后还要等它转两圈。所以就有了这篇博客。 PS:我们抽奖系统的最终界面和上一版有不小的变化。


       亮哥给我们的系统还提了些思想,应该建立一个后台,配置都在后台,页面就留一个按钮就好。 感觉设计的境界确实有差距。

【正文】

           下面我们来看高效导出具体如何实现的。 主要思想是通过流把dataset里的数据都放到流里,然后通过流一次性输出成文件。这样就不用多次和Excel交互。从而减少时间。

 

  public void DataSetExportToExcel(DataGridView dgv, string strTitle)        {            //System.DateTime currentTime = new DateTime();            String currentTime = System.DateTime.Now.ToString("yyyy年M月d日HHmmss");            SaveFileDialog saveFileDialog = new SaveFileDialog();//实例化一个SaveFileDialog保存文件对话框             saveFileDialog.Filter = "Execl files (*.xls)|*.xls";//设置文件类型             saveFileDialog.FilterIndex = 1;//设置默认文件类型显示顺序             //saveFileDialog.RestoreDirectory = true;//设为true时,对话框选择的目录会重新回到关闭此对话框时候的当前目录,就是点保存后,对话选择的默认目录为上次关闭时的目录            //saveFileDialog.CreatePrompt = false;            //saveFileDialog.Title = "导出Excel文件到";            saveFileDialog.FileName = strTitle + currentTime + ".xls";            //没有数据的话进行提示            if (dgv.Rows.Count == 0)            {                MessageBox.Show("没有数据可保存,请先抽奖!");            }            else            {                //DialogResult result = saveFileDialog.ShowDialog();//弹出保存对话框                //if (result == DialogResult.OK)//点了保存按钮进入                 //{                    Stream myStream;//stream类是读写字节数据的数据流类中最基础的基类                      myStream = saveFileDialog.OpenFile();//打开用户选定的具有读写权限的文件,并把获取的文件路径赋值给mystream                      StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312"));//实例化数据流的写入,encoding获取编码方式                     // StreamWriter sw = File.CreateText(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "2.xls");                                           string strHeaderText = "";                    try                    {                        //表中有数据则进行保存                        //写标题                        for (int i = 0; i < dgv.ColumnCount; i++)                        {                            //worksheet.Cells[1, i + 1] = dgv.Columns[i].HeaderText;                            if (i > 0)                            {                                strHeaderText += "\t";                            }                            strHeaderText += dgv.Columns[i].HeaderText;//获取列标题                        }                        sw.WriteLine(strHeaderText);                        //写内容                        string strItemValue = "";                        for (int r = 0; r < dgv.Rows.Count; r++)                        {                            for (int i = 0; i < dgv.ColumnCount; i++)                            {                                if (i > 0)                                {                                    strItemValue += "\t";                                }                                strItemValue += dgv.Rows[r].Cells[i].Value.ToString().Trim();                            }                            sw.WriteLine(strItemValue);//把dgv的每一行的信息写为sw的每一行                            strItemValue = "";                        }                    }                    catch (Exception)                    {                        MessageBox.Show("导出遇到异常", "失败提示");                    }                    finally                    {                       // MessageBox.Show(strTitle + currentTime + "成功导出到excel", "提示");                        sw.Close();                        myStream.Close();                    }                }

里边一些注释了的代码打开以后就会变成弹窗选择保存地址那种。

【总结】

          这里有很多巨人,多爬到巨人肩膀上踩一踩。 一定要爬上去,亲自踩一踩,光看用处不大的。

0 0
原创粉丝点击