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

【前言】

       还是前两天做那个抽奖系统, 因为抽完奖要保存到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();

                    }
                }

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

【总结】

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

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农胖虎-java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值