在现代企业环境中,确保 Excel 文件与数据库之间顺畅的数据交换对于优化工作流程和提升数据分析的效率至关重要。通过高效的数据导入导出操作,企业能够充分利用数据库的强大处理能力和 Excel 的灵活性,实现更精准的业务决策支持。本文将探讨如何使用 Spire.XLS for .NET 在 C# 程序中导入 Excel 数据到数据库以及导出数据库到 Excel 文件,实现数据在 Excel 和数据库之间无缝流转。
安装 Spire.XLS for .NET
首先,您需要将 Spire.XLS for .NET 包含的 DLL 文件作为引用添加到您的 .NET 项目中。DLL 文件可以从此链接下载,也可以通过 NuGet 安装。
PM> Install-Package Spire.XLS
用 C# 将 Excel 数据导入数据库
借助 Spire.XLS for .NET,我们可以使用 Workbook.LoadFromFile() 方法载入 Excel 文件,并通过 CellRange.Value 属性访问单元格数据。然后,可以利用相关的数据库操作模块(如适用于 SQLite 的 System.Data.SQLite 模块)将数据写入数据库,从而实现将 Excel 文件中的数据无缝导入到数据库的功能。
以下步骤和代码以 SQLite 数据库为例,展示如何使用 C# 将 Excel 数据导入到数据库:
- 定义 Excel 文件的路径以及目标数据库的路径。
- 创建 Workbook 类的实例,并使用 Workbook.LoadFromFile() 方法加载 Excel 文件。
- 创建一个新的 SQLite 数据库,或连接到现有数据库。
- 遍历工作簿中的每个工作表,为每个工作表在数据库中创建一个对应的表。
- 使用 Worksheet.Rows.CellList 属性获取第一行的单元格。
- 遍历这些单元格,通过 CellRange.Value 属性获取其值,并将这些值作为数据库表的列名。
- 遍历其余的行和单元格,将数据作为表的内容插入到数据库中。
- 关闭数据库连接并释放相关资源。
- C#
using System.Data.SQLite;
using Spire.Xls;
namespace ExcelToSQLite
{
class Program
{
static void Main(string[] args)
{
// Excel文件的路径
string excelFilePath = "示例.xlsx";
// SQLite数据库的文件路径
string sqliteFilePath = "output/Excel导入数据库.db";
// 打开Excel文件
Workbook workbook = new Workbook();
workbook.LoadFromFile(excelFilePath);
// 如果数据库文件不存在,则创建一个新的数据库文件
if (!File.Exists(sqliteFilePath))
{
SQLiteConnection.CreateFile(sqliteFilePath);
Console.WriteLine("新的SQLite数据库文件已创建。");
}
// 创建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数据库!");
}
}
}
用 C# 将数据从数据库导出到 Excel 文件
同样,我们可以利用数据库操作模块从数据库中读取数据,然后创建 Workbook 对象并使用 CellRange.Value 属性将读取的数据写入 Excel 工作簿中,从而实现从数据库导出数据到 Excel 文件的功能。
以下步骤和代码以 SQLite 数据库为例,展示了如何将数据库中的数据导出到 Excel 文件:
- 定义数据库的路径和目标 Excel 文件的路径。
- 创建一个 Workbook 实例,用于生成新的 Excel 工作簿,并通过 Workbook.Worksheets.Clear() 方法清空默认的工作表。
- 连接到数据库并获取所有表名。
- 使用 Workbook.Worksheets.Add() 方法为每个表创建一个工作表,并将表名作为工作表的名称。
- 获取表中的列名,并通过 Worksheet.Range[].Value 属性将列名写入工作表的第一行。
- 获取表中的数据,并通过 Worksheet.Range[].Value 属性将数据依次写入工作表。
- 如果需要,可以通过 CellRange.Style 属性格式化工作表。
- 关闭数据库连接,并使用 Workbook.SaveToFile() 方法保存工作簿。
- C#
using System.Data;
using System.Data.SQLite;
using Spire.Xls;
namespace SQLiteToExcel
{
class Program
{
static void Main(string[] args)
{
// SQLite数据库的文件路径
string sqliteFilePath = "示例.db";
// Excel文件的保存路径
string excelFilePath = "output/数据库导出到Excel.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文件!");
}
}
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。