高效地实现不同系统之间的数据集成,有助于提升工作效率,并为决策提供可靠的数据支持。在这类应用场景中,Excel 与数据库之间的数据传输是一项常见需求。
将 Excel 文件导入数据库,可以利用数据库高效查询、事务支持和并发控制等功能,弥补 Excel 在这些方面的不足。另一方面,将数据库中的数据导出到 Excel,则便于进行深入分析、生成报表,以及以常见且易于使用的格式共享数据。
本文将介绍如何使用 C# 实现 Excel 数据与数据库之间的导入和导出操作。
首先,需要在 .NET 项目中添加用于处理 Excel 文件的相关 DLL 文件。你可以从官网下载所需文件,也可以通过 NuGet 安装相应的软件包。
PM> Install-Package Spire.XLS借助 Excel 文件处理库,我们可以使用 Workbook.LoadFromFile() 方法加载 Excel 文件,再通过 CellRange.Value 属性读取单元格数据。随后,可以利用相应的数据库操作模块(例如用于 SQLite 的 System.Data.SQLite 模块),将读取的数据写入数据库。通过这种方式,即可实现从 Excel 文件到数据库的数据导入。
以下以 SQLite 为例,介绍如何使用 C# 将 Excel 数据导入数据库:
完整示例代码如下:
using System.Data.SQLite;
using Spire.Xls;
namespace ExcelToSQLite
{
class Program
{
static void Main(string[] args)
{
// Excel 文件路径
string excelFilePath = "Sample.xlsx";
// SQLite 数据库路径
string sqliteFilePath = "output/Database.db";
// 打开 Excel 文件
Workbook workbook = new Workbook();
workbook.LoadFromFile(excelFilePath);
// 如果数据库文件不存在,则创建新文件
if (!File.Exists(sqliteFilePath))
{
SQLiteConnection.CreateFile(sqliteFilePath);
Console.WriteLine("已创建新的 SQLite 数据库文件:output.db");
}
// 创建 SQLite 数据库连接
using (SQLiteConnection connection = new SQLiteConnection($"Data Source={sqliteFilePath};Version=3;"))
{
connection.Open();
// 遍历每个工作表
foreach (Worksheet sheet in workbook.Worksheets)
{
string tableName = sheet.Name;
// 获取第一行作为列名
var columns = sheet.Rows[0].CellList;
string createTableQuery = $"CREATE TABLE IF NOT EXISTS [{tableName}] (";
foreach (var column in columns)
{
createTableQuery += $"[{column.Value}] TEXT,";
}
createTableQuery = createTableQuery.TrimEnd(',') + ");";
// 创建数据表
using (SQLiteCommand createTableCommand = new SQLiteCommand(createTableQuery, connection))
{
createTableCommand.ExecuteNonQuery();
}
// 插入数据
for (int i = 1; i < sheet.Rows.Length; i++) // 跳过第一行
{
var row = sheet.Rows[i];
string insertQuery = $"INSERT INTO [{tableName}] VALUES (";
foreach (var cell in row.CellList)
{
insertQuery += $"'{cell.Value?.Replace("'", "''")}',"; // 防止 SQL 注入
}
insertQuery = insertQuery.TrimEnd(',') + ");";
using (SQLiteCommand insertCommand = new SQLiteCommand(insertQuery, connection))
{
insertCommand.ExecuteNonQuery();
}
}
}
connection.Close();
workbook.Dispose();
}
Console.WriteLine("Excel 数据已成功写入新的 SQLite 数据库!");
}
}
}同样,我们可以使用数据库操作模块读取数据库中的数据。随后,通过创建 Workbook 对象生成 Excel 工作簿,并利用 CellRange.Value 属性将数据写入 Excel 文件。这样即可实现从数据库到 Excel 文件的数据导出。
以下以 SQLite 数据库为例,介绍如何使用 C# 将数据库中的数据导出为 Excel 文件:
完整示例代码如下:
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 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 文件!");
}
}
}本文介绍了如何使用 C# 实现 Excel 与数据库之间的数据双向传输,包括将 Excel 文件中的数据导入 SQLite 数据库,以及将数据库中的数据导出为 Excel 文件。
通过结合 Excel 文件处理功能与数据库操作模块,可以简化数据迁移和整理流程,减少手动复制粘贴带来的重复工作。无论是将 Excel 数据存储到数据库中,以便进行查询和管理,还是将数据库中的数据导出为 Excel,以便进一步分析和生成报表,都能提高数据处理效率。
开发者可以根据实际项目需求,灵活选择合适的数据库和 Excel 处理方式,构建更高效的数据导入、导出流程。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。