数据库数据用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
相关文章
|
1天前
|
存储 SQL 关系型数据库
数据库事务:确保数据完整性的关键20
【7月更文挑战第20天】事务是数据库操作的基本逻辑单位,确保数据一致性。ACID原则包括:原子性(操作全成或全败),一致性(事务前后数据合法性),隔离性(并发操作互不影响),持久性(提交后更改永久保存)。MySQL的InnoDB引擎支持事务,通过undo log实现回滚,redo log确保数据持久化。开启事务可使用`BEGIN`或`START TRANSACTION`,提交`COMMIT`,回滚`ROLLBACK`。
123 70
|
4天前
|
存储 负载均衡 定位技术
现代数据库系统中的数据分片策略与优化
数据分片在现代数据库系统中扮演着关键角色,特别是在面对海量数据和高并发访问的情况下。本文探讨了数据分片的基本概念、常见的分片策略(如水平分片与垂直分片)、以及如何通过优化和选择合适的分片策略来提升数据库系统的性能和可扩展性。
|
6天前
|
数据采集 分布式计算 大数据
MaxCompute产品使用合集之数据集成中进行数据抽取时,是否可以定义使用和源数据库一样的字符集进行抽取
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
6天前
|
Java 数据安全/隐私保护
Java无模版导出Excel 0基础教程
经常写数据导出到EXCEL,没有模板的情况下使用POI技术。以此作为记录,以后方便使用。 2 工具类 样式工具: 处理工具Java接口 水印工具 导出Excel工具类 3 测试代码 与实际复杂业务不同 在此我们只做模拟 Controller Service 4 导出测试 使用Postman进行接口测试,没接触过Postman的小伙伴可以看我这篇博客Postman导出excel文件保存为文件可以看到导出很成功,包括水印 sheet页名称自适应宽度。还有一些高亮……等功能可以直接搜索使用
Java无模版导出Excel 0基础教程
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
数据的资产怎么被AI驱动的数据库理解
数据的资产怎么被AI驱动的数据库理解
|
5天前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库误删除的数据恢复方法
相信有很多oracle数据库用户都遇到过在操作Oracle数据库时误删除某些重要数据的情况,这个时候如果数据库没有备份且数据十分重要的,怎么才能恢复误删除的数据呢?北亚企安数据恢复工程师下面简单介绍几个误删除Oracle数据库数据的恢复方法。
|
6天前
|
前端开发
使用Postman导出excel
在本文档中,作者分享了如何使用Postman测试导出Excel接口的两种方法。配以四张图片说明了设置步骤,包括选择接口请求方式、设置Header(Content-Type: multipart/form-data)、Body中选取form-data类型以及指定文件。尽管代码指定了文件名,但在Postman的响应中不会显示,提示需要前端进一步处理。
|
18天前
|
存储 关系型数据库 MySQL
探索MySQL:关系型数据库的基石
MySQL,作为全球最流行的开源关系型数据库管理系统(RDBMS)之一,广泛应用于各种Web应用、企业级应用和数据仓库中
|
16天前
|
关系型数据库 MySQL 网络安全
Mysql 数据库主从复制
在MySQL主从复制环境中,配置了两台虚拟机:主VM拥有IP1,从VM有IP2。主VM的`my.cnf`设置server-id为1,启用二进制日志;从VM设置server-id为2,开启GTID模式。通过`find`命令查找配置文件,编辑`my.cnf`,在主服务器上创建复制用户,记录二进制日志信息,然后锁定表并备份数据。备份文件通过SCP传输到从服务器,恢复数据并配置复制源,启动复制。检查复制状态确认运行正常。最后解锁表,完成主从同步,新用户在从库中自动更新。
990 7
Mysql 数据库主从复制
|
16天前
|
缓存 运维 关系型数据库
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。