• 数据库数据用Excel导出的3种方法


    将数据库数据用Excel导出主要有3种方法:用Excel.Application接口、用OleDB、用HTML的Tabel标签

    方法1——Excel.Application接口:

    首先,需要要Excel.dll这个文件,确保自身机器上装有MS Office,在Office安装目录(../Microsoft Office/OFFICE11/,具体目录取决于自己的安装)中找到Excel.exe,然后放在(../Microsoft Visual Studio 8/SDK/v2.0/Bin)目录中,在CMD中输入“CD C:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/Bin(具体目录取决于自己的安装)”,然后输入“TlbImp EXCEL.EXE Excel.dll”。然后在Bin这个文件夹中就能找到Excel.dll这个文件。用到时候在项目中引用就可以。

    要使用命名空间

    using Excel;

    具体代码:

    /// <summary>
    /// 将SQLServer中的数据导出到Excel(使用Excel类,在没装Office时无效)
    /// </summary>
    /// <param name="ExelDt">要导出的数据集</param>
    /// <param name="fileName">输出到的文件目录</param>
    public static void SQLServerToExcel(DataSet ExelDt, string fileName)
    {
        int colIndex = 1, rowIndex = 1;
        Excel.Application excel;
        Workbook wBook;
        Worksheet wSheet;
        try
        {
            excel = new Excel.Application();
            wBook = excel.Application.Workbooks.Add(true);
            wSheet = wBook.Worksheets[1] as Worksheet;
            //excel.Visible = true;
        }
        catch
        {
            Win32.MsgBox(0, "您可能没有安装Office,请安装再使用该功能", "", 0);
            return;
        }
        try
        {
            foreach (DataColumn col in ExelDt.Tables[0].Columns)
            {
                wSheet.Cells[1, colIndex] = col.ColumnName; colIndex++;
            }
            foreach (DataRow row in ExelDt.Tables[0].Rows)
            {
                rowIndex++; colIndex = 0;
                foreach (DataColumn col in ExelDt.Tables[0].Columns)
                {
                    colIndex++;
                    if (colIndex == 1)
                    {
                        wSheet.Cells[rowIndex, colIndex] = "'" + row[col.ColumnName].ToString();
                    }
                    else
                    {
                        wSheet.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();
                    }
                }
            }
            //设置禁止弹出保存和覆盖的询问提示框
            excel.DisplayAlerts = false;
            excel.AlertBeforeOverwriting = false;
     
            //保存
            wSheet.SaveAs(fileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
                Missing.Value,Missing.Value, Missing.Value, Missing.Value, Missing.Value);
            wBook.Save();
        }
        catch (System.Exception)
        {
            Win32.MsgBox(0, "输出Excel有错误,请确认没有关闭Excel", "", 0);
            return;
        }
        finally
        {
            excel.Quit();
        }
    }

    其中要注意的是:

    wSheet.SaveAs(fileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
                Missing.Value,Missing.Value, Missing.Value, Missing.Value, Missing.Value);
    wBook.Save();

    这样就不会在保存的时候还会弹出保存对话框。

    还要记得关闭Excel,不然就一直占有着

    finally
    {
        excel.Quit();
    }

    方法2——用OleDB:

    个人觉得用OleDB最好,因为不需要安装Office也可以导出Excel,而且速度也比较快。

    具体代码:

    /// <summary>
    /// 将SQLServer中的数据导出到Excel(使用OleDB)
    /// </summary>
    /// <param name="ExelDt">要导出的数据集</param>
    /// <param name="filePath">输出到的文件目录</param>
    /// <returns>信息</returns>
    public static string SQLServerToExcel(System.Data.DataTable ExelDt, string filePath)
    {
        if (ExelDt == null)
        {
            return "数据不能为空";
        }
        //数据集的行总数、列总数
        int rows = ExelDt.Rows.Count;
        int cols = ExelDt.Columns.Count;
        if (rows == 0)
        {
            return "没有数据";
        }
     
        StringBuilder sb = new StringBuilder();
        string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + filePath + ";Extended Properties=Excel 8.0";
        OleDbCommand cmd = new OleDbCommand();
        OleDbConnection myConn = new OleDbConnection(strCon);
        try
        {
            //创建文件
            myConn.Open();
            //创建表
            cmd.Connection = myConn;
            sb.Append("create table ");
            sb.Append(ExelDt.TableName + "(");
            for (int i = 0; i < cols; i++)
            {
                if (i < cols - 1)
                {
                    sb.Append(string.Format("{0} varchar,", ExelDt.Columns[i].ColumnName));
                }
                else
                {
                    sb.Append(string.Format("{0} varchar)", ExelDt.Columns[i].ColumnName));
                }
            }
            cmd.CommandText = sb.ToString();
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            return "建立Exel文件失败:" + ex.ToString();
        }
     
        //---------------------------------------------------------------------------------
     
        //插入数据
        sb.Remove(0, sb.Length);
     
        sb.Append("INSERT INTO ");
        sb.Append(ExelDt.TableName + " ( ");
     
        for (int i = 0; i < cols; i++)
        {
            if (i < cols - 1)
                sb.Append(ExelDt.Columns[i].ColumnName + ",");
            else
                sb.Append(ExelDt.Columns[i].ColumnName + ") values (");
        }
     
        for (int i = 0; i < cols; i++)
        {
            if (i < cols - 1)
                sb.Append("@" + ExelDt.Columns[i].ColumnName + ",");
            else
                sb.Append("@" + ExelDt.Columns[i].ColumnName + ")");
        }
        cmd.CommandText = sb.ToString();
        OleDbParameterCollection param = cmd.Parameters;
     
        for (int i = 0; i < cols; i++)
        {
            param.Add(new OleDbParameter("@" + ExelDt.Columns[i].ColumnName, OleDbType.VarChar));
        }
     
         //遍历DataTable将数据插入新建的Excel文件中
        foreach (DataRow row in ExelDt.Rows)
        {
            for (int i = 0; i < param.Count; i++)
            {
                param[i].Value = row[i];
            }
     
            cmd.ExecuteNonQuery();
        }
     
        cmd.Connection.Close();
     
        return "数据已成功导入Excel";
    }

    其中注意:

    string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + filePath + ";Extended Properties=Excel 8.0";

    其中“Excel 8.0”是表示使用MS Office 2003,其他版本的没有用过,不确定是否只需修改版本号就可以。

     

    方法3——用HTML的Tabel标签:

    这个具体我没试过实现,这里给个思路,将要导出的数据用<tabel>、<tr>、<td>这几个标签输出成HTML文件,然后把扩展名改为.xls就可以。

  • 相关阅读:
    .NET开源B2C商城项目AssionShop开始开发设计(发布3小时撤下)
    AssionShop开源B2C电子商务系统概述
    ASP.NET中在不同的子域中共享Session
    单元测试框架"艾信.NET单元测试工具(AssionUnit)"开发第二步
    asp.net mvc 分页控件 MvcPager修改;使用范围增大
    Linux服务器测试网络连通性
    如何使用python连接mysql数据库
    mysql数据库基础知识
    使用python创建数据库并插入数据
    Linux下查看日志用到的常用命令
  • 原文地址:https://www.cnblogs.com/zyh-club/p/4986132.html
Copyright © 2020-2023  润新知