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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 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   如需转载请自行联系原作者

相关实践学习
使用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
相关文章
|
15天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
1月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
1月前
|
存储 监控 安全
数据库多实例的部署与配置方法
【10月更文挑战第23天】数据库多实例的部署和配置需要综合考虑多个因素,包括硬件资源、软件设置、性能优化、安全保障等。通过合理的部署和配置,可以充分发挥多实例的优势,提高数据库系统的运行效率和可靠性。在实际操作中,要不断总结经验,根据实际情况进行调整和优化,以适应不断变化的业务需求。
|
23天前
|
存储 监控 数据处理
flink 向doris 数据库写入数据时出现背压如何排查?
本文介绍了如何确定和解决Flink任务向Doris数据库写入数据时遇到的背压问题。首先通过Flink Web UI和性能指标监控识别背压,然后从Doris数据库性能、网络连接稳定性、Flink任务数据处理逻辑及资源配置等方面排查原因,并通过分析相关日志进一步定位问题。
155 61
|
1月前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
127 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
21天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
1月前
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。
|
1月前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
47 7
|
2月前
|
人工智能 Cloud Native 容灾
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
|
2月前
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
130 4