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

简介:

数据库数据用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    如需转载请自行联系原作者

相关文章
|
4月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
4月前
|
人工智能 Java 关系型数据库
使用数据连接池进行数据库操作
使用数据连接池进行数据库操作
134 11
|
5月前
|
存储 数据管理 数据库
数据字典是什么?和数据库、数据仓库有什么关系?
在数据处理中,你是否常困惑于字段含义、指标计算或数据来源?数据字典正是解答这些问题的关键工具,它清晰定义数据的名称、类型、来源、计算方式等,服务于开发者、分析师和数据管理者。本文详解数据字典的定义、组成及其与数据库、数据仓库的关系,助你夯实数据基础。
数据字典是什么?和数据库、数据仓库有什么关系?
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库中进行日期比较的多种方法介绍。
以上方法提供了灵活多样地处理和对比MySQL数据库中存储地不同格式地日子信息方式。根据实际需求选择适当方式能够有效执行所需操作并保证性能优化。
531 10
|
5月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
463 0
|
6月前
|
Python
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。
|
6月前
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。
|
8月前
|
存储 安全 大数据
网安工程师必看!AiPy解决fscan扫描数据整理难题—多种信息快速分拣+Excel结构化存储方案
作为一名安全测试工程师,分析fscan扫描结果曾是繁琐的手动活:从海量日志中提取开放端口、漏洞信息和主机数据,耗时又易错。但现在,借助AiPy开发的GUI解析工具,只需喝杯奶茶的时间,即可将[PORT]、[SERVICE]、[VULN]、[HOST]等关键信息智能分类,并生成三份清晰的Excel报表。告别手动整理,大幅提升效率!在安全行业,工具党正碾压手动党。掌握AiPy,把时间留给真正的攻防实战!官网链接:https://www.aipyaipy.com,解锁更多用法!
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
2200 10

热门文章

最新文章