asp.net怎么样把excel文件导入到数据库和导出来(紧急求助+高分)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net怎么样把excel文件导入到数据库和导出来(紧急求助+高分)相关的知识,希望对你有一定的参考价值。

公司呢?有很多的execl文件,当中也有很复杂和庞大的数据量,而我的责任是用asp.net的界面上的一个上传按钮,把execl文件传入,并保存到数据库,必要的时候要显示数据出来。而我对这些方面一点都不懂,是不是数据库也要建立和execl的字段一样的名字呀,我的数据库是sql2008的,vs也是2008的。 请高手给出详细的代码和说明,在此先给出50分,若解决后4倍分数给出

如果你只是要把excel保存到数据库,并不需要进一步的数据统计查询,你就可以简单地在asp.net的界面上放一个上传文件按钮,后台收到上传的excel文件,把它以二进制流的形式保存到SQL Server的Image字段或文件字段(据说sql2008才有)。导出时,在页面上放一个附件下载链接,用户点连接时你从数据库字段读出二进制流把它通过Response.OutputStream输出到页面上,即可出现excel的下载保存框。

如果你需要以导入的excel数据为基础,进行更多的数据统计查询,你就必须分析设计数据库表、字段,把相应的excel单元格数据保存到数据库字段。关键是如何从web页面导入excel单元格数据、又如何把查询出来的数据放到web页面上显示成客户需要的图表?
有两种方案:
1.用Excel自动化技术。
引用Excel的类型库生成.Net的包装类。导入时采用页面放上传文件按钮的方法,在服务器端收到文件后,用excel自动化类打开excel文件,再学会VBA语法,书写大量的代码读取单元格,然后连接数据库保存。导出时,查询数据库,启动excel自动化对象,通过VBA语法填写单元格,保存成excel文件,再用Response.OutputStream输出到页面上,触发excel文件的下载保存框。缺点:容易在服务器端产生excel死进程,代码编写复杂、代码量大、还要掌握VBA语法,用户需要上传、下载操作
有人会说,显示数据时可以用网页直接显示,不用导出成excel。其实也很麻烦:用网页显示复杂的报表格式,网页设计工作量大;如果客户要求导出excel,这个工作就省不了;如果客户要求打印、打印预览、页面设置,比起excel浏览器的打印就捉襟见肘了。

2.用微软Office中间件——SOAOffice。(建议使用最新版的)
用SOAOffice输出Excel,就不会再有上述烦恼。通过SOAOffice不仅能够动态填充excel,读取excel单元格,而且还能在浏览器里直接浏览excel、或者下载、另存。SOAOffice提供标准C#.Net组件,组件在服务器端不使用自动化调用,稳定支持大量web并发访问,这是用com调用无法实现的。组件的属性方法都比较简单,易于调用,你完全不用去掌握复杂的VBA调用。

由于是纯.Net组件,所以服务器端不需安装office。 SOAOffice的excel组件SOAExcel含有Sheet、Cell等类似Excel的简化接口,调用简单。SOAExcel不但能能把数据库字段值动态填充到Excel单元格,还能把用户输入的单元格的值提出给开发者保存到数据库。
SOAExcel能够在客户端浏览器的网页里通过SOAOffice直接显示生成的Excel,用户不必先下载再打开观看内容。

举个导出excel的例子:
SOAOfficeX.ExcelResponse SOAExcel = new SOAOfficeX.ExcelResponse();
SOAOfficeX.ExcelResSheet sheet1 = SOAExcel.openSheet("Sheet1"); // 打开一个Sheet
sheet1.openCell("D"+String.valueOf(8+i)).setValue(rs.getString("Count")); //循环填充数据。
SOAOfficeX.SOAOfficeCtrl SOACtrl = new SOAOfficeX.SOAOfficeCtrl(response);
SOACtrl.assign(SOAExcel); // 绑定数据
// 打开模板并生成最终的excel报表
SOACtrl.webOpen("doc/test.xls", 1, UserName, "Excel.Sheet");

上述代码不但动态填充生成excel,而且在网页里直接显示生成的Excel给终端用户,由于使用了1打开模式,Excel是只读显示的。

读取excel单元格的代码也很简单:
SOAOfficeX.ExcelRequest SOAExcel = new SOAOfficeX.ExcelRequest();
SOAOfficeX.IExcelReqSheet sheetOrder = SOAExcel.OpenSheet("销售订单");
SOAOfficeX.IExcelReqCell cell1;
cell1 = sheetOrder.OpenCell("I5");//订单编码
string sOrderNum = cell1.Value;//cell1.Value就是读取的结果

参考资料:Asp.net下C#自动化调用Word的实例与总结

参考技术A 你用access传到数据库很方便,EXECL复制到access一很方便,复制好数据库就有了,但要做个模板,列和数据库的对应,在access里面点打开,选择文件类型ODBC数据库(),连接到数据库,找到相应的表就可以了。最好2007版,更方便些

ASP.NET——导入Excel数据

原文:http://www.cnblogs.com/xiaopin/archive/2011/03/31/2001199.html

本代码目前只支持xls文件,不支持xlsx文件。 

protected void btnImport_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件
        {
            Response.Write("<script>alert(\'请您选择Excel文件\')</script> ");
            return;//当无文件时,返回
        }
        string IsXls = System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
        if (IsXls != ".xls")
        {
            Response.Write("<script>alert(\'只可以选择Excel文件\')</script>");
            return;//当选择的不是Excel文件时,返回
        }
        string filename = FileUpload1.FileName;              //获取Execle文件名  DateTime日期函数
        string savePath = Server.MapPath(("upfiles\\\\") + filename);//Server.MapPath 获得虚拟服务器相对路径
        FileUpload1.SaveAs(savePath);                        //SaveAs 将上传的文件内容保存在服务器上
        DataSet ds = ExcelSqlConnection(savePath, filename);           //调用自定义方法
        DataRow[] dr = ds.Tables[0].Select();            //定义一个DataRow数组
        int rowsnum = ds.Tables[0].Rows.Count;
        if (rowsnum == 0)
        {
            Response.Write("<script>alert(\'Excel表为空表,无数据!\')</script>");   //当Excel表为空时,对用户进行提示
        }
        else
        {
            for (int i = 0; i < dr.Length; i++)
            {
                //前面除了你需要在建立一个“upfiles”的文件夹外,其他的都不用管了,你只需要通过下面的方式获取Excel的值,然后再将这些值用你的方式去插入到数据库里面
                string title = dr[i]["标题"].ToString();
                string linkurl = dr[i]["链接地址"].ToString();
                string categoryname = dr[i]["分类"].ToString();
                string customername = dr[i]["内容商"].ToString();
                
                //Response.Write("<script>alert(\'导入内容:" + ex.Message + "\')</script>");
            }
            Response.Write("<script>alert(\'Excle表导入成功!\');</script>");
        }

    }

    #region 连接Excel  读取Excel数据   并返回DataSet数据集合
    /// <summary>
    
/// 连接Excel  读取Excel数据   并返回DataSet数据集合
    
/// </summary>
    
/// <param name="filepath">Excel服务器路径</param>
    
/// <param name="tableName">Excel表名称</param>
    
/// <returns></returns>
    public static System.Data.DataSet ExcelSqlConnection(string filepath, string tableName)
    {
        string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=\'Excel 8.0;HDR=YES;IMEX=1\'";
        OleDbConnection ExcelConn = new OleDbConnection(strCon);
        try
        {
            string strCom = string.Format("SELECT * FROM [Sheet1$]");
            ExcelConn.Open();
            OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, ExcelConn);
            DataSet ds = new DataSet();
            myCommand.Fill(ds, "[" + tableName + "$]");
            ExcelConn.Close();
            return ds;
        }
        catch
        {
            ExcelConn.Close();
            return null;
        }
    }

    #endregion 

以上是关于asp.net怎么样把excel文件导入到数据库和导出来(紧急求助+高分)的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 导出EXCEL时如何不把一些不是EXCEL的符号一起导出到EXCEL?

asp.net怎么把div中的内容导出到word文档中;而且导出的内容不能含有源代码

ASP.NET中如何把Excel的数据导入到数据库中,最好给详细的代码和注释

ASP.NET从数据库导出到EXCEL

ASP.NET把数据查询出来保存在了一个datatable里面了,之后我想把这个datatable的数据导入到access数据库

如何在 ASP.NET 中执行导入导出到 Excel 功能?