随着企业业务的增长和复杂性的增加,对数据进行有效的分析、共享和报告变得至关重要;而Excel,作为一款广泛接受的数据处理工具,提供了强大的计算能力、可视化选项以及与多种数据分析工具的兼容性,使得它成为从数据库导出数据的理想选择。通过利用C#编程语言的强大特性和丰富的.NET库支持,开发人员不仅能够高效地完成从数据库到Excel文件的数据迁移 ,还可以根据特定业务逻辑定制导出过程,确保数据的准确性和完整性,同时提升用户体验并满足不同用户的报表需求。
本文将介绍如何在.NET平台使用C#代码导出数据库数据到Excel文件。
文章目录
本文所使用的方法需要用到,免费的Free Spire.XLS for .NET,以及System.Data.SQLite和System.Data.OleDb。NuGet:
PM> Install-Package FreeSpire.XLS
PM> Install-Package System.Data.SQLite
PM> Install-Package System.Data.OleDb
导出SQLite数据库到Excel文件
System.Data.SQLite
模块可以直接从SQLite数据库文件中读取数据。读取到数据之后,我们可以使用Free Spire.XLS for .NET创建Excel文件并将数据写入其中。以下是操作步骤及代码示例:
- 定义文件路径
- 设置SQLite数据库文件路径为
Sample.db
。 - 设置Excel输出文件路径为
output/DatabaseToExcel.xlsx
。
- 设置SQLite数据库文件路径为
- 创建Excel工作簿实例
- 创建一个新的
Workbook
实例以表示要导出的Excel文件。 - 清除默认包含的工作表,确保工作簿为空。
- 创建一个新的
- 建立SQLite连接
- 使用
SQLiteConnection
类创建一个到SQLite数据库的新连接,并通过提供数据源和版本号来初始化连接字符串。 - 打开与SQLite数据库的连接。
- 使用
- 获取数据库中的所有表名
- 通过调用
GetSchema("Tables")
方法从数据库中获取所有表的名字,并将结果存储在一个DataTable
对象中。
- 通过调用
- 遍历每个表并处理
- 遍历
DataTable
对象中的每一行,提取表名。 - 对于每个表,添加一个新的工作表到Excel工作簿中,并将工作表命名为对应的表名。
- 遍历
- 读取表数据并写入Excel
- 构建SQL查询语句以选择当前表中的所有数据,并使用
SQLiteCommand
执行此查询。 - 使用
SQLiteDataReader
读取查询结果:- 获取列名并将它们写入新工作表的第一行。
- 设置第一行(即标题行)的字体样式为粗体,字号为12。
- 遍历数据行,将每一行的数据值写入相应的单元格中,同时自动调整每列的宽度以适应内容。
- 设置数据行的字体大小为11。
- 构建SQL查询语句以选择当前表中的所有数据,并使用
- 关闭数据库连接
- 完成所有表的数据读取和写入后,关闭与SQLite数据库的连接。
- 保存Excel文件
- 将生成的工作簿保存到之前定义的Excel文件路径。
- 释放
workbook
对象使用的资源。
代码示例
csharp
using System.Data;
using System.Data.SQLite;
using Spire.Xls;
namespace SQLiteToExcel
{
class Program
{
static void Main(string[] args)
{
// SQLite数据库路径
string sqliteFilePath = "Sample.db";
// Excel文件路径
string excelFilePath = "output/DatabaseToExcel.xlsx";
// 创建一个新的工作簿实例
Workbook workbook = new Workbook();
// 清除默认的工作表
workbook.Worksheets.Clear();
// 创建SQLite连接
using (SQLiteConnection connection = new SQLiteConnection($"Data Source={sqliteFilePath};Version=3;"))
{
connection.Open();
// 获取所有表名
DataTable tables = connection.GetSchema("Tables");
// 遍历每个表
foreach (DataRow tableRow in tables.Rows)
{
string tableName = tableRow["TABLE_NAME"].ToString();
// 创建一个新的工作表
Worksheet sheet = workbook.Worksheets.Add(tableName);
// 获取表数据
string selectQuery = $"SELECT * FROM [{tableName}]";
using (SQLiteCommand command = new SQLiteCommand(selectQuery, connection))
{
using (SQLiteDataReader reader = command.ExecuteReader())
{
// 获取列名并写入第一行
for (int col = 0; col < reader.FieldCount; col++)
{
sheet.Range[1, col + 1].Value = reader.GetName(col);
}
// 设置标题行的字体样式
sheet.Rows[0].Style.Font.IsBold = true;
sheet.Rows[0].Style.Font.Size = 12;
// 写入数据行
int rowIndex = 2;
while (reader.Read())
{
for (int col = 0; col < reader.FieldCount; col++)
{
sheet.Range[rowIndex, col + 1].Value = reader.GetValue(col).ToString();
// 自动调整列宽
sheet.AutoFitColumn(col + 1);
}
// 设置数据行的字体样式
sheet.Rows[rowIndex - 1].Style.Font.Size = 11;
rowIndex++;
}
}
}
}
connection.Close();
}
// 保存Excel文件
workbook.SaveToFile(excelFilePath);
workbook.Dispose();
Console.WriteLine("数据已成功导出到Excel文件!");
}
}
}
结果
导出Access数据库到Excel文件
System.Data.OleDb
可以直接读取Access数据库中的数据,我们可以使用同样的方法来导出Access数据库到Excel文件。以下是操作步骤及代码示例:
以下是将提供的C#代码转换为操作步骤的介绍,用于将Access数据库中的数据导出到Excel文件:
- 定义文件路径
- 设置Access数据库文件路径为
Database.accdb
。 - 设置Excel输出文件路径为
output/DatabaseToExcel.xlsx
。
- 设置Access数据库文件路径为
- 创建Excel工作簿实例
- 创建一个新的
Workbook
实例以表示要导出的Excel文件。 - 清除默认包含的工作表,确保工作簿为空。
- 创建一个新的
- 定义连接字符串
- 定义一个连接字符串,用于连接到指定路径的Access数据库。这里使用的是
Microsoft.ACE.OLEDB.12.0
提供程序,并指定了不持久化安全信息。
- 定义一个连接字符串,用于连接到指定路径的Access数据库。这里使用的是
- 建立OleDb连接
- 使用
OleDbConnection
类创建一个新的连接对象,并通过调用Open()
方法打开与Access数据库的连接。
- 使用
- 获取所有表名
- 通过调用
GetSchema("Tables")
方法从数据库中获取所有表的名字,并将结果存储在一个DataTable
对象中。
- 通过调用
- 遍历每个表并处理(跳过系统表)
- 遍历
DataTable
对象中的每一行,提取表名。 - 跳过非用户定义的表(例如,系统表)。这一步可以通过检查
TABLE_TYPE
列来完成,只处理类型为TABLE
的表。 - 对于每个用户定义的表,添加一个新的工作表到Excel工作簿中,并将工作表命名为对应的表名。
- 遍历
- 读取表数据并写入Excel
- 构建SQL查询语句以选择当前表中的所有数据,并使用
OleDbCommand
执行此查询。 - 使用
OleDbDataReader
读取查询结果:- 获取列名并将它们写入新工作表的第一行。
- 设置第一行(即标题行)的字体样式为粗体,字号为12。
- 遍历数据行,将每一行的数据值写入相应的单元格中,同时自动调整每列的宽度以适应内容。
- 设置数据行的字体大小为11。
- 构建SQL查询语句以选择当前表中的所有数据,并使用
- 关闭数据库连接
- 完成所有表的数据读取和写入后,关闭与Access数据库的连接。
- 保存Excel文件
- 将生成的工作簿保存到之前定义的Excel文件路径。
- 释放
workbook
对象使用的资源。
代码实例
csharp
using System.Data;
using System.Data.OleDb;
using Spire.Xls;
namespace AccessToExcel
{
class Program
{
static void Main(string[] args)
{
// Access数据库路径
string accessFilePath = "Database.accdb";
// Excel文件路径
string excelFilePath = "output/DatabaseToExcel.xlsx";
// 创建一个新的工作簿实例
Workbook workbook = new Workbook();
// 清除默认的工作表
workbook.Worksheets.Clear();
// 定义Access数据库的连接字符串
string connectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={accessFilePath};Persist Security Info=False;";
// 创建OleDb连接
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
connection.Open();
// 获取所有表名
DataTable tables = connection.GetSchema("Tables");
// 遍历每个表
foreach (DataRow tableRow in tables.Rows)
{
// 跳过系统表,您可以在这里添加更多条件
if (tableRow["TABLE_TYPE"].ToString() != "TABLE") continue;
string tableName = tableRow["TABLE_NAME"].ToString();
// 创建一个新的工作表
Worksheet sheet = workbook.Worksheets.Add(tableName);
// 获取表数据
string selectQuery = $"SELECT * FROM [{tableName}]";
using (OleDbCommand command = new OleDbCommand(selectQuery, connection))
{
using (OleDbDataReader reader = command.ExecuteReader())
{
// 获取列名并写入第一行
for (int col = 0; col < reader.FieldCount; col++)
{
sheet.Range[1, col + 1].Value = reader.GetName(col);
}
// 设置标题行的字体样式
sheet.Rows[0].Style.Font.IsBold = true;
sheet.Rows[0].Style.Font.Size = 12;
// 写入数据行
int rowIndex = 2;
while (reader.Read())
{
for (int col = 0; col < reader.FieldCount; col++)
{
sheet.Range[rowIndex, col + 1].Value = reader.GetValue(col)?.ToString() ?? "";
// 自动调整列宽
sheet.AutoFitColumn(col + 1);
}
// 设置数据行的字体样式
sheet.Rows[rowIndex - 1].Style.Font.Size = 11;
rowIndex++;
}
}
}
}
connection.Close();
}
// 保存Excel文件
workbook.SaveToFile(excelFilePath);
workbook.Dispose();
Console.WriteLine("数据已成功导出到Excel文件!");
}
}
}
结果
本文演示如何在.NET平台使用C#导出数据库到Excel文件。