有趣的地方

有趣的地方

C#使用EPPlus导入Excel数据

EPPlus的介绍

EPPlus是一个用于处理Excel文件的开源C#库。它允许开发人员创建、读取和编辑Excel工作簿、工作表和单元格,而无需安装Microsoft Office或使用COM互操作。EPPlus是在.NET平台上构建的,因此它与.NET应用程序无缝集成,并提供了强大的Excel文件处理功能。

EPPlus的基本使用

从NuGet导入EPPlus

从NuGet上搜索EPPlus,如下图所示,然后添加到项目

一个简单的案例

我现在想从Excel中导入数据并进行一些处理,然后需要把处理完成后的数据再写入一个Excel文件

需要导入的数据所下图所示:

总共有392578条数据

导入数据的代码如下所示:

            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "Excel Files (*.xlsx; *.xls)|*.xlsx; *.xls";
            openFileDialog.FilterIndex = 1;
            openFileDialog.Multiselect = false;

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                selectedFile = openFileDialog.FileName;
                MessageBox.Show($"您选中的文件路径为:{selectedFile}");
                ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial;

                using (var package = new ExcelPackage(new                       System.IO.FileInfo(selectedFile)))
                {
                    // 获取工作簿的第一个工作表
                    var worksheet = package.Workbook.Worksheets[0];

                    // 获取工作表的行数和列数
                    int rowCount = worksheet.Dimension.Rows;
                    int colCount = worksheet.Dimension.Columns;

                    // 循环遍历工作表中的数据
                    for (int row = 0; row < rowCount - 1; row++)
                    {
                        RawData data = new RawData();
                        data.id = (double)worksheet.Cells[row + 2, 1].Value;
                        data.speed = (double)worksheet.Cells[row + 2, 2].Value;
                        data.power = (double)worksheet.Cells[row + 2, 3].Value;
                        data.fcrr = (double)worksheet.Cells[row + 2, 4].Value;
                        DataList.Add(data);

                    }
                    MessageBox.Show("导入数据成功!!!");
                }

运行看看

导入39万条数据的性能分析如下图所示,不到10秒,内存只从一百多M升高到了四百多M

成功导入Excel数据,如下图所示:

当我们对数据进行的一些处理完成之后,需要重新写入Excel

写入Excel的代码如下所示:

            // 设置Excel文件路径
            string filePath = "test.xlsx";

            // 创建一个新的Excel包
            FileInfo file = new FileInfo(filePath);
            using (ExcelPackage package = new ExcelPackage(file))
            {
                // 添加一个工作表
                ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet1");
                string[] headers = { "序号", "主机转速取整", "主机功率取整", "主机油耗率-右" };
                // 写入表头
                for (int col = 1; col <= headers.Length; col++)
                {
                    worksheet.Cells[1, col].Value = headers[col - 1];
                }

                // 写入数据
                for (int row = 1; row <= FirstWashData.Count; row++)
                {


                    worksheet.Cells[row + 1, 1].Value = FirstWashData[row - 1].id;
                    worksheet.Cells[row + 1, 2].Value = FirstWashData[row - 1].speed;
                    worksheet.Cells[row + 1, 3].Value = FirstWashData[row - 1].power;
                    worksheet.Cells[row + 1, 4].Value = FirstWashData[row - 1].fcrr;

                }

                // 保存Excel文件
                package.Save();
                MessageBox.Show("写入到Excel文件成功!!!");

需要写入的2万9千多条数据

写入2万9千多条数据非常快,不到一秒就完成了

打开写入的Excel,成功写入2万九千多条数据

以上,就是C#使用EPPlus从Excel上读取数据与写入数据的例子,其实EPPlus还有很多强大的功能,还请读者们自行探索。

总结

使用EPPlus方便了我们操作Excel,比起使用**Microsoft.Office.Interop.Excel**效率提升了很多,使用方式也更简单了。

发表评论:

Powered By Z-BlogPHP 1.7.3

© 2018-2020 有趣的地方 粤ICP备18140861号-1 网站地图