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

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

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

分类: .Net    173人阅读  评论(2)  收藏  举报
将数据库数据用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就可以。

本文转自9pc9com博客,原文链接:     http://blog.51cto.com/215363/744257    如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
8天前
|
关系型数据库 MySQL 数据库
ORM对mysql数据库中数据进行操作报错解决
ORM对mysql数据库中数据进行操作报错解决
32 2
|
6天前
|
SQL C# 数据库
EPPlus库的安装和使用 C# 中 Excel的导入和导出
本文介绍了如何使用EPPlus库在C#中实现Excel的导入和导出功能。首先,通过NuGet包管理器安装EPPlus库,然后提供了将DataGridView数据导出到Excel的步骤和代码示例,包括将DataGridView转换为DataTable和使用EPPlus将DataTable导出为Excel文件。接着,介绍了如何将Excel数据导入到数据库中,包括读取Excel文件、解析数据、执行SQL插入操作。
EPPlus库的安装和使用 C# 中 Excel的导入和导出
|
7天前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
|
9天前
|
Java 关系型数据库 MySQL
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术的房屋租赁系统,旨在通过自动化和信息化手段提升房屋管理效率,优化租户体验。系统采用JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Layui和Spring Boot 2.0等技术栈,实现了高效的房源管理和便捷的租户服务。通过该系统,房东可以轻松管理房源,租户可以快速找到合适的住所,双方都能享受数字化带来的便利。未来,系统将持续优化升级,提供更多完善的服务。
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
|
4天前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
|
13天前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
阿里云数据库重磅升级!元数据服务OneMeta + OneOps统一管理多模态数据
|
15天前
|
存储 Java
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
34 2
|
23天前
|
SQL NoSQL Java
彻底革新你的数据库操作体验!Micronaut数据访问技巧让你瞬间爱上代码编写!
【9月更文挑战第10天】Java开发者们一直在寻找简化应用程序与数据库交互的方法。Micronaut作为一个现代框架,提供了多种工具和特性来提升数据访问效率。本文介绍如何使用Micronaut简化数据库操作,并提供具体示例代码。Micronaut支持JPA/Hibernate、SQL及NoSQL(如MongoDB),简化配置并无缝集成。通过定义带有`@Repository`注解的接口,可以实现Spring Data风格的命名查询。
44 6
|
24天前
|
数据采集 存储 数据挖掘
使用Python读取Excel数据
本文介绍了如何使用Python的`pandas`库读取和操作Excel文件。首先,需要安装`pandas`和`openpyxl`库。接着,通过`read_excel`函数读取Excel数据,并展示了读取特定工作表、查看数据以及计算平均值等操作。此外,还介绍了选择特定列、筛选数据和数据清洗等常用操作。`pandas`是一个强大且易用的工具,适用于日常数据处理工作。
|
15天前
|
存储 数据挖掘 测试技术
Python接口自动化中操作Excel文件的技术方法
通过上述方法和库,Python接口自动化中的Excel操作变得既简单又高效,有助于提升自动化测试的整体质量和效率。
19 0
下一篇
无影云桌面