`
woai671
  • 浏览: 31700 次
社区版块
存档分类
最新评论

C# 导出标准格式的Excel 可用迅雷下载

    博客分类:
  • C#
阅读更多
C# 将数据库里的数据整理出来导出Excel

    标题中有"标准格式的Excel"是指,网上很多导出Excel的方法,但是打开该导出的Excel会弹出"您尝试打开的**.xls文件格式与文件扩展名指定的格式不一致",是因为该方法导出的文件只是扩展名是xls而已,并不是真正意义上的Excel。

    可用迅雷下载是指迅雷可真正下载到导出的Excel文件,解决了网上很多人用迅雷下载完成只是个页面文件的疑问。文件名乱码等解决方案都包含在其中。

    本案例利用第三方组件myxls来实现导出真正意义上的Excel,myxls的介绍很多,大家可以自己搜。在项目中尧使用myxls,只要导入一个dll文件,本文附件中有提供。

    注:整个解决方案包含2个aspx文件和1个js文件,至于为什么要使用2个aspx页面,是因为要让迅雷下载到真正Excel文件,而不是下载aspx页面。项目需要引用到附件中的dll文件,请记得添加引用。


A.aspx页面(显示内容,包含导出按钮)文件:
<asp:Button ID="Button1" runat="server" Text="导出报名表" ClientIDMode="Static" />
//这里仅列出导出按钮  ClientIDMode表示id不变可方便js中获取该元素


js文件:
//这是按钮点击事件 即点击"导出报名表"按钮后的处理
$("#Button1").click(function () {
        var title = escape(ActivityTitle);
        window.open('ExportExcel.aspx?id=' + ActivityID + '&title=' + title);
    });
//这里title是指文件名,使用escape是因为"文件名包含中文" ,必须使用这样的方式传中文参


B.aspx页面并不需要写任何内容,浏览器或迅雷检测到Excel文件后,该页面会自动关闭。
[这里很关键]B.aspx.cs文件:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using org.in2bits.MyXls;
using System.Data.SqlClient;
using System.Text;
using Microsoft.JScript;
namespace XXXXX
{
    public partial class B: System.Web.UI.Page
    {
        DataTable table = new DataTable();  //定义一个DataTable用来存放从数据库得到的数据
        protected void Page_Load(object sender, EventArgs e)
        {
            GetData();     //获取数据
            SendExcel();   //导出Excel
        }

        private void SendExcel()
        {
            org.in2bits.MyXls.XlsDocument doc = new org.in2bits.MyXls.XlsDocument();
            string Title = Microsoft.JScript.GlobalObject.unescape(Request.QueryString["title"]); //解码传递过来的中文参
            string FileName = Title + "-报名表";
            string eFileName = HttpUtility.UrlEncode(FileName, Encoding.UTF8);  //这里解决中文乱码
            doc.FileName = eFileName + ".xls";//excel文件名称
            //设置Excel格式,如果没有要求可忽略
            XF TitleXF = doc.NewXF();    //设置表头的实例
            TitleXF.UseBorder = true;
            TitleXF.TopLineStyle = 1;
            TitleXF.TopLineColor = Colors.Black;
            TitleXF.BottomLineStyle = 1;
            TitleXF.BottomLineColor = Colors.Black;
            TitleXF.LeftLineStyle = 1;
            TitleXF.LeftLineColor = Colors.Black;
            TitleXF.RightLineStyle = 1;
            TitleXF.RightLineColor = Colors.Black;
            //TitleXF.HorizontalAlignment = HorizontalAlignments.Centered; // 设定文字居中
            TitleXF.VerticalAlignment = VerticalAlignments.Centered; // 垂直居中
            TitleXF.Font.Bold = true; // 是否加粗
            XF dataXF = doc.NewXF();   //设置单元格的实例
            dataXF.UseBorder = true;
            dataXF.TopLineStyle = 1;
            dataXF.TopLineColor = Colors.Black;
            dataXF.BottomLineStyle = 1;
            dataXF.BottomLineColor = Colors.Black;
            dataXF.LeftLineStyle = 1;
            dataXF.LeftLineColor = Colors.Black;
            dataXF.RightLineStyle = 1;
            dataXF.RightLineColor = Colors.Black;
            //Excel格式设置结束
            org.in2bits.MyXls.Worksheet sheet = doc.Workbook.Worksheets.AddNamed("sheet1");//Excel工作表名称
            org.in2bits.MyXls.Cells cells = sheet.Cells;
            string[] Header = { "昵称", "姓名", "联系电话", "备注", "报名时间"};  //定义Excel表头
            for (int i = 0; i < Header.Length; i++)
            {
                cells.Add(1, (i + 1), Header[i], TitleXF);//导出表头 其中TitleXF为上面设置的格式,如果不需要不用加这个参数,可写成cells.Add(1, (i + 1), Header[i]);
            }
            for (int i = 0; i < table.Rows.Count; i++)
            {
                for (int j = 0; j < Header.Length; j++)
                {
                    cells.Add((i + 2), (j + 1), table.Rows[i][j].ToString(), dataXF); //导出数据 其中dataXF为上面设置的格式,如果不需要不用加这个参数,可写成ells.Add((i + 2), (j + 1), table.Rows[i][j].ToString());
                }
            }
           //这一段也是格式设置,可忽略
            ColumnInfo col0 = new ColumnInfo(doc, sheet); // 列对象 
            col0.ColumnIndexStart = 0; // 起始列为第1列,索引从0开始
            col0.ColumnIndexEnd = 4; // 终止列为第1列,索引从0开始
            col0.Width = 20 * 256; // 列的宽度计量单位为 1/256 字符宽
            sheet.AddColumnInfo(col0); // 把格式附加到sheet页上
           //格式设置结束
            string path = Server.MapPath("TempFile/");     //设置存储路径
            doc.Save(path, true);                          //为了解决让迅雷下载到Excel而保存在服务器的临时文件
            doc.Send();                                    //发送Excel给客户端
            System.IO.File.Delete(path + doc.FileName);    //删除之前保存的临时文件
        }

        private void GetData()
        {
            string ActivityID = Request.QueryString["id"];  //该值是执行SQL语句需要用到的参数
            SqlConnection sqlcon;
            string strCon = "Data Source=(local);Database=数据库名;user=用户名;password=密码";
            string sqlstr = "select * from 表名 where 列名=ActivityID  order by time desc";       //SQL语句,请自行改动
            sqlcon = new SqlConnection(strCon);
            //需要导出到Excel的每列值的数据类型,需要几列请定义几列,列名请与SQL语句查询结果的列名相对应
            table.Columns.Add("列名1", Type.GetType("System.String"));
            table.Columns.Add("列名2", Type.GetType("System.String"));
            table.Columns.Add("列名3", Type.GetType("System.String"));
            table.Columns.Add("列名4", Type.GetType("System.String"));
            table.Columns.Add("列名5", Type.GetType("System.String"));

            //新建SqlCommand对象
            SqlCommand cmd = new SqlCommand(sqlstr, sqlcon);
            //打开数据库连接
            sqlcon.Open();
            //返回dr对象
            SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            //循环读取SQL查询结果并赋给DataTable
            while (dr.Read())
            {
                string[] strs;  //定义一数组 
                DataRow row = table.NewRow();
                row[0] = dr["列名1"].ToString();
                //假设列2会出现空值,需要以下处理,不然使用ToString会出错或单元格内容为&nbsp;
                if (dr["列名2"] != "")
                    row[1] = dr["列名2"].ToString();
                row[2] = dr["列名3"].ToString();
                row[3] = dr["列名4"].ToString();
                row[4] = dr["列名5"].ToString();
                table.Rows.Add(row);
            }
            sqlcon.Close();
        }
    }
}
分享到:
评论

相关推荐

    c# 导出到Excel (C# winform)

    c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#) winform

    C#导出图片到EXCEL

    在C#编程中,将图片导出到Excel是一项常见的任务,尤其在数据分析、报表生成或者数据可视化场景下。本文将详细介绍如何使用C#实现这一功能,主要包括以下知识点: 1. **Excel Interop库**:微软提供了Excel Interop...

    C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法

    "C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法" 在导出Excel文件时,经常会遇到“文件格式与扩展名指定格式不一致”的问题,这是因为大多数人在导出Excel文件时,都是默认保存Excel的格式...

    C#导出excel文件

    Excel文件在商业环境中广泛使用,因此,了解如何在C#中导出数据到Excel文件是一项重要的技能。本篇文章将深入探讨如何使用C#来创建和导出Excel文件。 首先,你需要一个库来处理Excel文件。Microsoft提供了`...

    C#导出Excel 导出PDF

    本主题聚焦于如何利用C#实现数据的导出功能,包括将查询结果或表格信息导出为Excel文件和PDF文档。这两种格式在数据共享、报告生成和打印等方面非常常见。 首先,我们来看C#导出Excel的实现。Excel文件通常以`.xlsx...

    C#导出数据到Excel(百万级3秒)

    C# datatable直接导出数据到Excel,(数据量百万级只需3秒)

    C# NPOI 导出Excel

    总之,C# NPOI库为处理Excel文件提供了一套强大而灵活的工具,无论你是做数据导出、报表生成还是数据分析,它都能成为你不可或缺的助手。通过实践和学习,你将能熟练地利用NPOI实现各种复杂的Excel操作。

    C#导出到Excel

    通过NPOI库,C#开发者能够方便地导出数据到Excel文件,无论是简单的数据表还是复杂的格式化表格,都能轻松实现。NPOI提供了丰富的API,使得操作Excel文件变得直观而灵活。结合上述步骤,你可以根据实际需求创建符合...

    C#导出数据到Excel

    本话题聚焦于如何利用C#将数据导出到Excel文件,这在数据分析、报表生成以及数据交换等场景中非常常见。JavaScript,尽管主要用在前端,但在与后端C#交互时也扮演着重要角色,特别是在处理动态数据和用户交互时。 1...

    C#把数据导出为Excel格式

    ### C#将数据导出为Excel格式的知识点详解 #### 一、导出到Excel的基本原理与步骤 在本示例中,我们主要探讨如何使用C#编程语言将数据导出为Excel格式。该示例提供了较为完整的实现过程,包括用户界面交互、Excel...

    【原创】C#导出数据到EXCEL方法谈(附实例源码和超级无敌详细讲解)

    C#导出数据到EXCEL表格是个老生常谈的问题了,写这篇文章主要是给和我一样的新手朋友提供两种导出EXCEL的方法并探讨一下导出的效率问题,本文中的代码直接就可用,其中部分代码参考其他的代码并做了修改,抛砖引玉,...

    C# 导出excel表格(xls、xlsx两种格式)

    本文将详细讲解如何使用C#来实现Excel表格的导出,包括xls和xlsx两种常见格式。 首先,我们需要理解这两种格式的区别。Xls是Excel早期版本(2003及更早)使用的文件格式,它基于二进制文件结构,支持的最大行数和列...

    C#大量数据导出到Excel自动分页导出

    C#大量数据导出到Excel,超过65536行时自动分页导出

    C#导出Excel复杂表头解决方案

    标题"**C#导出Excel复杂表头解决方案**"涉及的是在C#应用程序中如何高效地创建包含复杂结构的Excel表头,这在数据报告、数据分析或自动化办公场景中非常常见。复杂表头可能包括多级标题、合并单元格、自定义样式等。...

    C#导出图片到EXCEL源码

    在C#编程中,将图片导出到Excel是一项常见的任务,尤其在数据分析、报表生成或者可视化展示时。本文将深入探讨如何使用C#实现这一功能,并结合提供的源码"ProjToExcel"进行详细讲解。 首先,我们需要理解Excel文档...

    C#导出数据到EXCEL源码

    本示例源码“C#导出数据到EXCEL”是针对C# WinForm应用的一个功能,允许开发者将数据导出到Microsoft Excel文件中。这个功能广泛应用于数据报告、数据分析或用户需要以Excel格式保存数据的场景。 要理解这段源码的...

    C#数据导出到Excel自定义样式

    本文将深入探讨如何使用C#将数据导出到Excel,并且实现自定义样式,包括添加图片功能。这在数据分析、报表生成、数据共享等方面非常实用。 首先,让我们了解基础的C#数据导出到Excel的过程。这个过程通常涉及到创建...

    C#导出Excel,利用第三方控件,改变导出样式,字体等

    在C#编程中,我们经常需要将数据导出为Excel格式以便用户进行分析或进一步处理。在.NET框架中,虽然可以使用Microsoft.Office.Interop.Excel库来实现这个功能,但这种方法需要安装Office环境,且运行时效率较低。...

    C# Treeview 导出Excel

    以上就是使用C#和EPPlus库将`TreeView`数据导出到Excel的基本步骤。在实际应用中,可能需要根据具体需求进行调整,比如处理自定义数据、设置样式、处理错误等。记住,确保在项目中正确引用EPPlus库,并在使用前检查...

Global site tag (gtag.js) - Google Analytics