当前位置: 代码网 > it编程>编程语言>C# > C#实现读取Excel文件并将数据写入数据库和DataTable

C#实现读取Excel文件并将数据写入数据库和DataTable

2024年05月15日 C# 我要评论
excel文件是存储表格数据的普遍格式,因此能够高效地读取和提取信息对于我们来说至关重要。c#语言借助.net framework和各种库的广泛功能,能够进行高效的数据操作。利用c#读取excel文件

excel文件是存储表格数据的普遍格式,因此能够高效地读取和提取信息对于我们来说至关重要。c#语言借助.net framework和各种库的广泛功能,能够进行高效的数据操作。利用c#读取excel文件并将数据写入数据库和datatable,或者将数据用于其他目的,对于开发人员来说是一个处理excel数据的优秀解决方案。

本文所使用的方法需要用到excel文件处理库spire.xls for .net,可从官网下载或在nuget中搜索安装,也可在项目管理控制台输入:pm> install-package spire.xls安装。

使用c#读取excel文件引导

为了有效地利用spire.xls for .net读取excel文件数据并写入其他位置,需要熟悉其中的一些类、属性和方法。下表总结了一些主要的类、属性和方法以及它们的功能和描述:

项目描述
workbook代表excel工作簿并提供读取和操作其内容的方法
worksheet代表工作簿中的单个工作表
workbook.loadfromfile 方法从文件加载excel工作簿
workbook.worksheets 属性获取工作簿中的工作表集合
worksheet.range[] 属性获取工作表中的单元格范围(索引从1开始)
cellrange.value 属性获取或设置单元格的值
cellrange.text 属性获取或设置单元格的显示文本

读取excel文件的典型工作流程包括以下步骤:

  • 使用 workbook.loadfromfile() 方法加载excel文件。
  • 通过 workbook.worksheets[] 属性访问工作表。
  • 通过 worksheet.range[] 属性访问单元格。
  • 通过 cellrange.text 属性访问单元格中显示的文本,或通过 cellrange.value 属性访问单元格的值(文本、数字、公式等)。
  • 检索数据,将数据写入文本文件、数据库等,或执行其他所需操作。
  • 可以直接使用 worksheet.exportdatatable() 方法将单元格值导出到数据表,并返回一个datatable对象。
  • 还可以直接使用 workbook.savetofile() 方法将工作簿转换为任何支持的格式。

c#代码读取excel文件数据并写入文本

使用c#读取excel文件并将数据写入文本文件的步骤如下:

  • 导入所需的命名空间。
  • 创建 workbook 类的对象,并使用 workbook.loadfromfile() 方法加载excel文件。
  • 通过 workbook.worksheets[] 属性获取第一个工作表。
  • 创建一个文本文件用于写入工作表中的数据。
  • 遍历分配的行和列,在 worksheet.range[] 属性中访问单元格,并通过 cellrange.text 属性获取每个单元格的显示文本,然后将其写入文本文件中。
  • 释放资源。

代码示例:

using spire.xls;
using system.io;

class program
{
    static void main(string[] args)
    {
        // 加载excel文件
        workbook workbook = new workbook();
        workbook.loadfromfile("sample.xlsx");

        // 获取第一个工作表
        worksheet worksheet = workbook.worksheets[0];

        // 创建输出文本文件
        string outputfile = "output.txt";
        streamwriter writer = new streamwriter(outputfile);

        // 遍历工作表的行和列,并将数据写入文本文件
        for (int row = 1; row <= worksheet.lastrow; row++)
        {
            for (int col = 1; col <= worksheet.lastcolumn; col++)
            {
                cellrange range = worksheet.range[row, col];
                string cellvalue = range.text == null ? string.empty : range.text.tostring();
                writer.write(cellvalue + "\t"); // 使用制表符作为单元格数据的分隔符
            }
            writer.writeline(); // 写入换行符
        }

        // 关闭写入器并保存文本文件
        writer.close();

        // 释放资源
        workbook.dispose();
    }
}

读取结果:

使用c#代码将excel文件读取到datatable对象中

datatable是.net framework中表示数据表的对象。它用于在内存中存储和操作数据,并可以执行排序、筛选、修改和导出等操作。使用c#读取excel文件数据并将其写入datatable对象,可以方便进一步处理数据。以下是具体步骤:

  • 导入所需的命名空间。
  • 创建 workbook 类的对象,并使用 workbook.loadfromfile() 方法加载excel文件。
  • 通过 workbook.worksheets[] 属性获取第一个工作表。
  • 使用 worksheet.exportdatatable() 方法将工作表中的数据导出到一个 datatable 对象中。
  • 释放资源。

代码示例:

using spire.xls;
using system.data;

namespace exceltoaccess
{
    class program
    {
        static void main(string[] args)
        {
            // 创建workbook类的对象
            workbook workbook = new workbook();

            // 加载excel文件
            workbook.loadfromfile("sample.xlsx");

            // 获取第一个工作表
            worksheet worksheet = workbook.worksheets[0];

            // 将工作表中的数据导出到一个datatable对象
            datatable datatable = worksheet.exportdatatable();

            workbook.dispose();
        }
    }
}

c#代码读取excel文件并插入到数据库中

这个示例展示了如何使用c#代码将excel工作表数据写入access数据库。这种方法还需要使用system.data.oledb命名空间。如果你使用的.net framework没有它,你可以通过在package management console中输入以下代码来安装它:install-package system.data.oledb。

读取excel文件并插入到数据库的步骤如下:

  • 导入所需的命名空间。
  • 创建 workbook 类的对象,并使用 workbook.loadfromfile() 方法加载excel文件。
  • 通过 workbook.worksheets[] 属性获取第一个工作表。
  • 通过访问 worksheet.name 属性,获取工作表名称作为表名。
  • 通过使用 worksheet.rows[] 属性访问第一行的 cellrange 对象,将每个列的值存储在一个字符串数组中,作为列名。
  • 使用 oledbconnection 连接到access数据库,指定连接字符串和数据库文件路径。
  • 通过动态生成一个用于创建表的sql查询字符串,包括表名、列名和数据类型,创建数据表。
  • 使用 oledbcommand 对象和 executenonquery 方法执行创建表的查询。
  • 通过遍历excel工作表的每一行(从第二行开始),构造带有参数化查询的插入语句,将每一行的数据插入access数据库表中。
  • 关闭数据库连接并释放资源。

代码示例:

using spire.xls;
using system.data.oledb;

class program
{
    static void main(string[] args)
    {
        // 设置excel文件路径
        string excelfilepath = "sample.xlsx";
        // 设置access数据库文件路径
        string accessdbfilepath = "sample.accdb";

        // 加载excel文件
        workbook workbook = new workbook();
        workbook.loadfromfile(excelfilepath);

        // 获取第一个工作表
        worksheet worksheet = workbook.worksheets[0];

        // 使用工作表名称作为表名
        string tablename = worksheet.name;

        // 获取第一行作为列名
        cellrange headerrange = worksheet.rows[0];
        string[] columnnames = new string[headerrange.columns.length];
        for (int i = 0; i < headerrange.columns.length; i++)
        {
            columnnames[i] = headerrange.columns[i].value.replace(" ", "_");
        }

        // 连接到access数据库
        string connectionstring = $"provider=microsoft.ace.oledb.12.0;data source={accessdbfilepath};persist security info=false;";
        using (oledbconnection connection = new oledbconnection(connectionstring))
        {
            connection.open();

            // 创建表
            string createtablequery = $"create table [{tablename}] ({string.join(", ", columnnames.select(c => $"[{c}] memo"))})";
            using (oledbcommand createtablecommand = new oledbcommand(createtablequery, connection))
            {
                createtablecommand.executenonquery();
            }

            // 插入数据
            string insertquery = $"insert into [{tablename}] ({string.join(", ", columnnames.select(c => $"[{c}]"))}) values ({string.join(", ", columnnames.select(c => $"@{c}"))})";
            using (oledbcommand insertcommand = new oledbcommand(insertquery, connection))
            {
                foreach (cellrange row in worksheet.rows.cast().skip(1))
                {
                    for (int i = 0; i < row.columns.length; i++)
                    {
                        insertcommand.parameters.addwithvalue($"@{columnnames[i]}", row.columns[i].value);
                    }

                    insertcommand.executenonquery();
                    insertcommand.parameters.clear();
                }
            }

            connection.close();
            workbook.dispose();
        }
    }
}

读取写入结果:

本文中介绍了如何使用 c# 来读取 excel 文件并提取数据用于各种用途。通过利用 spire.xls for .net 的强大功能,开发人员可以高效地处理 excel 数据、将其导出为不同格式并增强数据驱动型应用程序。

以上就是c#实现读取excel文件并将数据写入数据库和datatable的详细内容,更多关于c#读取excel的资料请关注代码网其它相关文章!

(0)

相关文章:

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

发表评论

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