当前位置: 代码网 > it编程>编程语言>Asp.net > C#实现导出数据库数据到Excel文件

C#实现导出数据库数据到Excel文件

2024年12月10日 Asp.net 我要评论
随着企业业务的增长和复杂性的增加,对数据进行有效的分析、共享和报告变得至关重要;而excel,作为一款广泛接受的数据处理工具,提供了强大的计算能力、可视化选项以及与多种数据分析工具的兼容性,使得它成为

随着企业业务的增长和复杂性的增加,对数据进行有效的分析、共享和报告变得至关重要;而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文件并将数据写入其中。以下是操作步骤及代码示例:

1.定义文件路径

  • 设置sqlite数据库文件路径为sample.db。
  • 设置excel输出文件路径为output/databasetoexcel.xlsx。

2.创建excel工作簿实例

  • 创建一个新的workbook实例以表示要导出的excel文件。
  • 清除默认包含的工作表,确保工作簿为空。

3.建立sqlite连接

  • 使用sqliteconnection类创建一个到sqlite数据库的新连接,并通过提供数据源和版本号来初始化连接字符串。
  • 打开与sqlite数据库的连接。

4.获取数据库中的所有表名

通过调用getschema("tables")方法从数据库中获取所有表的名字,并将结果存储在一个datatable对象中。

5.遍历每个表并处理

  • 遍历datatable对象中的每一行,提取表名。
  • 对于每个表,添加一个新的工作表到excel工作簿中,并将工作表命名为对应的表名。

6.读取表数据并写入excel

构建sql查询语句以选择当前表中的所有数据,并使用sqlitecommand执行此查询。

使用sqlitedatareader读取查询结果:

  • 获取列名并将它们写入新工作表的第一行。
  • 设置第一行(即标题行)的字体样式为粗体,字号为12。
  • 遍历数据行,将每一行的数据值写入相应的单元格中,同时自动调整每列的宽度以适应内容。
  • 设置数据行的字体大小为11。

7.关闭数据库连接

完成所有表的数据读取和写入后,关闭与sqlite数据库的连接。

8.保存excel文件

将生成的工作簿保存到之前定义的excel文件路径。

释放workbook对象使用的资源。

代码示例

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文件:

1.定义文件路径

  • 设置access数据库文件路径为database.accdb。
  • 设置excel输出文件路径为output/databasetoexcel.xlsx。

2.创建excel工作簿实例

  • 创建一个新的workbook实例以表示要导出的excel文件。
  • 清除默认包含的工作表,确保工作簿为空。

3.定义连接字符串

定义一个连接字符串,用于连接到指定路径的access数据库。这里使用的是microsoft.ace.oledb.12.0提供程序,并指定了不持久化安全信息。

4.建立oledb连接

使用oledbconnection类创建一个新的连接对象,并通过调用open()方法打开与access数据库的连接。

5.获取所有表名

通过调用getschema("tables")方法从数据库中获取所有表的名字,并将结果存储在一个datatable对象中。

6.遍历每个表并处理(跳过系统表)

  • 遍历datatable对象中的每一行,提取表名。
  • 跳过非用户定义的表(例如,系统表)。这一步可以通过检查table_type列来完成,只处理类型为table的表。
  • 对于每个用户定义的表,添加一个新的工作表到excel工作簿中,并将工作表命名为对应的表名。

7.读取表数据并写入excel

构建sql查询语句以选择当前表中的所有数据,并使用oledbcommand执行此查询。

使用oledbdatareader读取查询结果:

  • 获取列名并将它们写入新工作表的第一行。
  • 设置第一行(即标题行)的字体样式为粗体,字号为12。
  • 遍历数据行,将每一行的数据值写入相应的单元格中,同时自动调整每列的宽度以适应内容。
  • 设置数据行的字体大小为11。

8.关闭数据库连接

完成所有表的数据读取和写入后,关闭与access数据库的连接。

9.保存excel文件

将生成的工作簿保存到之前定义的excel文件路径。

释放workbook对象使用的资源。

代码实例

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文件!");
        }
    }
}

结果

以上就是c#实现导出数据库数据到excel文件的详细内容,更多关于c#数据库数据导出至excel的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com