C#向excel中写入数据的三种方式

第一种:将DataGrid中的数据以流的形式写到excel中,格式以html的形式存在

            Response.Clear();
            Response.Buffer = true;
            Response.Charset = "GB2312";
            Response.AppendHeader("Content-Disposition", "attachment;filename=DialoutTemplate.xls");
            // 如果设置为GetEncoding("GB2312");导出的文件将会出现乱码!!!
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
            //Response.ContentType = "application/vnd.ms-excel";//输出类型
            //Response.Charset = "";
            //关闭ViewState
            EnableViewState = false;
            System.IO.StringWriter tw = new System.IO.StringWriter();//将信息写入字符串
            System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);//在WEB窗体页上写出一系列连续的HTML特定字符和文本。
            //此类提供ASP.NET服务器控件在将HTML内容呈现给客户端时所使用的格式化功能
            //获取control的HTML
            dg.RenderControl(hw);//将table中的内容输出到HtmlTextWriter对象中
            // 把HTML写回浏览器
            Response.Write(tw.ToString());
            Response.Flush();
            Response.End();

第二种:将数据源中的数据以文件流的形式写到excel中,格式以txt的形式存在

            FileStream fs = new FileStream(Server.MapPath("report_export/DialoutTemplate.xls"), FileMode.Create, FileAccess.Write);
            StreamWriter rw = new StreamWriter(fs, Encoding.Default);//建立StreamWriter为写作准备;
            DataTable dt = GetDataTableSource();
            int count = dt.Columns.Count;
            string head = "";
            string values = "";
            for (int i = 0; i < count; i++)
            {
                string h = dt.Columns[i].ColumnName + "\t";
                string v = dt.Rows[0][i].ToString() + "\t";
                head += h;
                values += v;
            }
            rw.WriteLine(head);
            rw.WriteLine(values);
            rw.Close();
            fs.Close();
            Response.Redirect("report_export/DialoutTemplate.xls");

第三种:将数据源中的数据直接写到excel中,格式以xls形式存在,好处导出的

               数据可以直接导入,可以将数字格式自动转化为文本格式,可以减少

               格式转化的繁琐环节,还可以预留将数字转换为文本的格式的行数,

               可以完全自定义

            Excel.Application xlApp;
            Excel.Workbook xlBook;
            Excel.Workbooks xlBooks;
            //Excel.Range xlRange;
            Excel.Sheets xlsheets;
            Excel.Worksheet xlSheet;
            int k = 0;
            try
            {
                string strCurrentPath = Server.MapPath("report_export/DialoutTemplate.xls");
                string FilePath = strCurrentPath;
                FileInfo fi = new FileInfo(FilePath);
                if (fi.Exists)     //判断文件是否已经存在,如果存在就删除!
                {
                    fi.Delete();
                }
                xlApp = new Excel.Application();
                xlBooks = xlApp.Workbooks;
                xlBook = xlBooks.Add(Type.Missing);
                xlsheets = xlBook.Worksheets;
                IntPtr intptr = new IntPtr(xlApp.Hwnd);
                xlSheet = (Excel.Worksheet)xlsheets.get_Item(1);
                DataTable dt = GetDataTableSource();
                int count = dt.Columns.Count;
                for (int i = 0; i < count; i++)
                {
                    string h = dt.Columns[i].ColumnName;
                    string v = dt.Rows[0][i].ToString();
                    ((Excel.Range)xlSheet.Cells[1, i + 1]).Value2 = h;
                    Excel.Range r1 = xlSheet.get_Range(xlSheet.Cells[1, 1], xlSheet.Cells[1, i + 1]);
                    r1.NumberFormatLocal = "@";
                    ((Excel.Range)xlSheet.Cells[2, i + 1]).Value2 = v;
                    Excel.Range r2 = xlSheet.get_Range(xlSheet.Cells[2, 1], xlSheet.Cells[2, i + 1]);
                    r2.NumberFormatLocal = "@";
                }
                for (int j = 1; j < 500; j++)
                {
                    Excel.Range r = xlSheet.get_Range(xlSheet.Cells[2 + j, 1], xlSheet.Cells[2 + j, count]);
                    r.NumberFormatLocal = "@";
                }
                xlBook.SaveAs(FilePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                xlBook.Close(false, Type.Missing, Type.Missing);
                xlBooks.Close();
                xlApp.Quit();
                Response.Redirect("report_export/DialoutTemplate.xls");
                GetWindowThreadProcessId(intptr, out k);
                System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
                p.Kill();
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
            finally
            {
                //xlRange = null;
                xlSheet = null;
                xlBook = null;
                xlApp = null;
            }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏博客园

使用异步操作时的注意要点(翻译)

在使用异步方法中最好不要使用void当做返回值,无返回值也应使用Task作为返回值,因为使用void作为返回值具有以下缺点

13520
来自专栏更流畅、简洁的软件开发方式

一个页面搞定几乎所有的列表需求的实现思路和一点代码。

     其实如果要单独实现一个能够显示数据的表格,那么是很简单的,写一个for循环,把DataTable里面数据循环出来就OK了。相信大家都会做吧,如果是从a...

33980
来自专栏博客园

MongoDB Driver 简单的CURD

c#中我们可以使用MongoDB.Driver驱动进行对MongoDB数据库的增删改查.

66610
来自专栏技术博客

C# XML与Json之间的相互转换

对于这转换其实很简单,其中最重要的就是先要引用类库。可以到官网进行下载引用http://json.codeplex.com。

57130
来自专栏Danny的专栏

在Cookie中存储对象

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

84040
来自专栏Create Sun

mvc+webapi 单元测试 3.使用Moq模拟AspnetMvc中的Request.Form

 1.前言     现在这个项目已经有阶段性的模块完成了,所以就想着对这些模块进行单元测试,以保证项目的代码的质量。首先虽然标题是mvc+webapi实质上我只...

64490
来自专栏木宛城主

工欲善其事,必先利其器:分享一套Code Smith 搭建N层架构模板

 开篇 平常开发时,由于冗余代码过多,程序员做重复的工作过多势必会影响开发效率。倘若对重复性代码简单的复制、粘贴,虽然也能节省时间,但也需仔细一步步替换,这无...

19880
来自专栏圣杰的专栏

Parallel线程安全问题

废话不多说,上代码: using System; using System.Collections.Generic; using System.Threadin...

33050
来自专栏GreenLeaves

C#核编之System.Environment类

      在前面的例子中用来了Environment.GetCommandLineArgs()这个方法,这个方法就是获取用户的命令行输入,是Environme...

25970
来自专栏菩提树下的杨过

MVC RC2中关于HtmlHelper给DropDownList设置初始选中值的问题

Asp.Net MVC RC2中Helper提供的DropDownList好象并不太好用,特别想给下拉框设置初始选中值的时候(可能我还没找到正确的方法) 小试了...

25650

扫码关注云+社区

领取腾讯云代金券