将数据库数据用Excel导出主要有3种方法

简介:

将数据库数据用Excel导出主要有3种方法

(2011-04-27 09:05:05)
将数据库数据用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/744256   如需转载请自行联系原作者

相关文章
|
6月前
|
Python
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。
|
6月前
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。
|
7月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
1221 1
|
8月前
|
存储 安全 大数据
网安工程师必看!AiPy解决fscan扫描数据整理难题—多种信息快速分拣+Excel结构化存储方案
作为一名安全测试工程师,分析fscan扫描结果曾是繁琐的手动活:从海量日志中提取开放端口、漏洞信息和主机数据,耗时又易错。但现在,借助AiPy开发的GUI解析工具,只需喝杯奶茶的时间,即可将[PORT]、[SERVICE]、[VULN]、[HOST]等关键信息智能分类,并生成三份清晰的Excel报表。告别手动整理,大幅提升效率!在安全行业,工具党正碾压手动党。掌握AiPy,把时间留给真正的攻防实战!官网链接:https://www.aipyaipy.com,解锁更多用法!
|
4月前
|
SQL 关系型数据库 MySQL
如何将Excel表的数据导入RDS MySQL数据库?
本文介绍如何通过数据管理服务DMS将Excel文件(转为CSV格式)导入RDS MySQL数据库,涵盖建表、编码设置、导入模式选择及审批执行流程,并提供操作示例与注意事项。
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库中进行日期比较的多种方法介绍。
以上方法提供了灵活多样地处理和对比MySQL数据库中存储地不同格式地日子信息方式。根据实际需求选择适当方式能够有效执行所需操作并保证性能优化。
528 10
|
6月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
309 11
|
6月前
|
Python
Excel中如何批量重命名工作表与将每个工作表导出到单独Excel文件
本文介绍了如何在Excel中使用VBA批量重命名工作表、根据单元格内容修改颜色,以及将工作表导出为独立文件的方法。同时提供了Python实现导出工作表的代码示例,适用于自动化处理Excel文档。
|
6月前
|
Python
将Excel特定某列数据删除
将Excel特定某列数据删除
|
7月前
|
Java 测试技术 数据库
spring号码归属地批量查询,批量查询号码归属地,在线工具,可按省份城市运营商号段分类分开分别导出excel表格
简介:文章探讨Spring Boot项目启动优化策略,通过自定义监听器、异步初始化及分库分表加载优化等手段,将项目启动时间从280秒缩短至159秒,提升约50%,显著提高开发效率。

热门文章

最新文章