当前位置:首页 > 行业动态 > 正文

c#动态数据库导出excel

使用C#动态导出数据库到Excel,需借助第三方库如EPPlus或NPOI。

在C#中实现动态数据库导出到Excel文件,通常需要借助一些第三方库来简化操作,下面将介绍使用Free Spire.XLS for .NET库和System.Data.SQLite库将SQLite数据库数据导出到Excel文件的详细步骤及代码示例。

准备工作

1、安装必要的NuGet包

Free Spire.XLS:用于创建和操作Excel文件。

System.Data.SQLite:用于连接和操作SQLite数据库。

你可以在Visual Studio的NuGet包管理器中搜索并安装这些包,或者使用以下命令行安装:

 Install-Package FreeSpire.XLS
   Install-Package System.Data.SQLite

2、准备数据库和数据

假设你已经有一个SQLite数据库文件(例如Sample.db),并且其中包含一些表和数据。

代码实现

以下是一个完整的C#示例,演示如何从SQLite数据库读取数据并导出到Excel文件:

using System;
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.Range[1, 1, 1, reader.FieldCount].CellStyle.Font.Bold = true;
                            sheet.Range[1, 1, 1, reader.FieldCount].CellStyle.Font.Size = 12;
                            // 遍历数据行,将每一行的数据值写入相应的单元格中
                            int rowIndex = 2;
                            while (reader.Read())
                            {
                                for (int col = 0; col < reader.FieldCount; col++)
                                {
                                    sheet.Range[rowIndex, col + 1].Value = reader[col].ToString();
                                }
                                rowIndex++;
                            }
                            // 设置数据行的字体大小为11
                            sheet.Range[2, 1, rowIndex 1, reader.FieldCount].CellStyle.Font.Size = 11;
                        }
                    }
                }
            }
            // 保存Excel文件
            workbook.SaveToFile(excelFilePath);
            Console.WriteLine($"Excel file has been saved to {excelFilePath}");
        }
    }
}

代码解释

1、连接数据库:使用SQLiteConnection类连接到SQLite数据库文件。

c#动态数据库导出excel

2、获取表名:通过调用connection.GetSchema("Tables")方法获取数据库中的所有表名,并存储在一个DataTable对象中。

3、遍历表并处理:遍历DataTable对象中的每一行,提取表名,对于每个表,执行以下操作:

创建一个新的工作表,并将其命名为表名。

构建SQL查询语句以选择当前表中的所有数据。

使用SQLiteCommand执行查询,并通过SQLiteDataReader读取查询结果。

将列名写入新工作表的第一行,并设置标题行的字体样式为粗体,字号为12。

c#动态数据库导出excel

遍历数据行,将每一行的数据值写入相应的单元格中,同时自动调整每列的宽度以适应内容,设置数据行的字体大小为11。

4、保存Excel文件:将生成的工作簿保存到指定的Excel文件路径。

5、释放资源:确保在使用完数据库连接后正确关闭它,以释放资源。

注意事项

确保你的项目中已经正确安装了Free Spire.XLSSystem.Data.SQLite库。

根据实际需要修改数据库路径、Excel文件路径以及SQL查询语句。

如果处理大量数据,考虑优化性能,例如分批处理数据或使用异步操作。

c#动态数据库导出excel

异常处理:在实际应用中,应添加适当的异常处理逻辑,以确保程序的稳定性和健壮性。

FAQs

Q1: 如果数据库中的表结构发生变化,比如新增了列,如何确保导出的Excel文件能够正确反映这些变化?

A1: 在导出之前,可以先读取数据库表的结构信息(如列名、数据类型等),然后根据这些信息动态地构建Excel工作表的列标题和格式,这样可以确保即使数据库表结构发生变化,导出的Excel文件也能正确反映最新的结构,定期更新导出脚本以适应可能的数据库结构变化也是一个好习惯。

Q2: 如何处理数据库中包含特殊字符或换行符的数据,以确保它们在Excel中正确显示?

A2: 在读取数据库数据时,应对特殊字符进行转义或编码处理,以防止在Excel中显示错误或造成格式问题,对于换行符,可以将其替换为Excel支持的换行符表示(如`

`),还可以在导出前对数据进行清洗和验证,确保数据的完整性和准确性,如果遇到无法直接处理的特殊字符,可以考虑将其转换为可显示的Unicode编码形式。