`

C#读取excel文件

    博客分类:
  • C#
阅读更多

C#读取excel文件

   最近在项目中应用到读取excel文件的功能,在此总结一下开发经验。

   读取数据分为两种情况,一种是csv格式的文件,另一种是xlsx格式的文件。

首先需要注意的是:csv文件是以英文逗号间隔的文本文件,而xlsx是电子表格,包含文本、数值、公式和格式。

代码示例:

 

读取csv文件

public class StudentEntity {
            public String name;
            public String no;
            public String fileName;
        }
        public String ReadCsvFileToEntityList(string filePath, String fileName, List<StudentEntity> stuList)
        {
            LoadUtil util = new LoadUtil();
            String result = "S";
            int i = 0;
            try
            {
                String fileAllName = filePath + @"\" + fileName;
                using (StreamReader sr = new StreamReader(fileAllName, Encoding.Default))
                {
                    String line;
                    // 构造解析器
                    SeperatorBasedParser parser = new SeperatorBasedParser(seperator: SeperatorType.COMMA);
                    // 按行拆解数据文件
                    while (!String.IsNullOrEmpty(line = sr.ReadLine()))
                    {
                        //去掉文件头
                        if (line.Contains("学号"))
                        {
                            continue;
                        }
                        var entity = parser.ParseStringToEntity<StudentEntity>(line);
                        String[] lineList = line.Split(',');//根据英文逗号分隔
                        entity.fileName = fileName;//文件名
                        entity.no = lineList[0];//学号
                        entity.name = lineList[1];//姓名
                        stuList.Add(entity);
                        i++;
                    }
                    Console.WriteLine("Total lines: " + i.ToString());
                    FileLogger.log("LoadManager.ParseFileToEntityList Succeed! " + fileAllName);
                }
            }
            catch (Exception e)
            {
                // Let the user know what went wrong.
                Console.WriteLine("The file " + fileName + " could not be read: " + ", error line: " + i.ToString());
                Console.WriteLine(e.Message);
                FileLogger.log(e);
                return null;
            }
            return result;
        }

 读取xlsx文件:

 const string connectStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
        public string ReadXlsxFileToEntityList(string filePath, String fileName, List<StudentEntity> stuList)
        {
            String fileAllName = filePath + "\\" + fileName;
            string result = "S";
            FileInfo fileInfo = new FileInfo(fileAllName);
            try
            {
                DataTable sheetTable = GetSheetTable(fileAllName);

                //只需要取第一个Sheet的sheetName
                string sheetName = sheetTable.Rows[0][2].ToString();

                //读取Excel内容,将excel中的内容存在list中
                DataTable dataTable = GetDataTable(fileAllName, sheetName);
                result = GetFocList(dataTable, fileName, stuList);
            }
            catch (Exception e)
            {
                return "E_" + e.Message;
            }
            return result;
        }
        /// <summary>
        /// 根据文件名称和sheet读取文件内容
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="sheetName"></param>
        /// <returns></returns>
        public DataTable GetDataTable(string fileName, string sheetName)
        {
            DataTable dataTable = new DataTable();
            OleDbConnection dbConn = new OleDbConnection(string.Format(connectStr, fileName));

            try
            {
                dbConn.Open();

                OleDbCommand dbCmd = new OleDbCommand();
                dbCmd.Connection = dbConn;
                dbCmd.CommandText = "select * from [" + sheetName + "] ";
                dbCmd.CommandType = CommandType.Text;
                OleDbDataAdapter dbApt = new OleDbDataAdapter(dbCmd);
                dbApt.Fill(dataTable);

            }
            finally
            {
                dbConn.Close();
            }
            return dataTable;
        }
        /// <summary>
        /// 根据文件名称获取文件中所有的sheetname
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public DataTable GetSheetTable(string filePath)
        {
            OleDbCommand dbCmd = new OleDbCommand();
            OleDbConnection dbConn = new OleDbConnection(string.Format(connectStr, filePath));
            DataTable sheetTable = null;
            try
            {
                dbConn.Open();
                //dbTable装载了所有的sheetneame
                sheetTable = dbConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

                dbConn.Close();
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            finally
            {
                dbConn.Close();
            }
            return sheetTable;
        }
        /// <summary>
        /// 将dataTable转换为entityList
        /// </summary>
        /// <param name="dataTable"></param>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public String GetFocList(DataTable dataTable, String fileName, List<StudentEntity> stuList)
        {
            var result = "S";
            if (dataTable.Rows.Count > 0)
            {
                for (int i = 0; i < dataTable.Rows.Count; i++)
                {
                    try
                    {
                        //不读取文件头
                        if (dataTable.Rows[i][0].ToString().Trim().Contains("学号"))
                        {
                            continue;
                        }
                        StudentEntity entity = new StudentEntity();
                        entity.fileName = fileName;//文件名
                        entity.no = dataTable.Rows[i][0].ToString().Trim();//学号
                        entity.name = dataTable.Rows[i][1].ToString().Trim();//姓名
                        stuList.Add(entity);
                    }
                    catch (Exception e)
                    {
                        throw new Exception(e.Message + "   " + i + "   " + dataTable.Rows[i]);
                    }
                }
            }
            return result;
        }

 

0
0
分享到:
评论

相关推荐

    C# 读取EXCEL文件

    接下来,让我们了解如何使用C#读取Excel文件: ```csharp using OfficeOpenXml; // 引用EPPlus库 using System.Data; using System.IO; public void ReadExcelAndDisplayInListView() { string filePath = @"F:\...

    c#读取excel文件

    本文将详细讲解如何使用C#语言以及DataSet和DataTable来读取Excel文件。 首先,要理解DataSet和DataTable在.NET框架中的角色。DataSet是.NET中一个内存中的数据存储,它可以包含多个DataTable,每个DataTable相当于...

    c#读取excel文件.rar

    本示例“c#读取excel文件.rar”提供了一个解决方案,它着重解决了如何在C#应用中读取Excel文件的问题。下面将详细介绍相关的知识点。 首先,要读取Excel文件,你需要引入一个能与Excel接口的库。在.NET Framework中...

    C# 读取EXCEL文件的三种经典方法.docx

    在C#中,读取Excel文件有多种方法,这里我们将探讨三种经典方法。这些方法主要应用于需要从Excel文件中提取数据或与Excel文件交互的场景。 **方法一:采用OleDB读取Excel文件** OleDb是.NET Framework提供的一种...

    C#读取Excel文件

    本篇文章将深入探讨如何使用C#读取Excel文件,特别关注对Office 2003和Office 2007的支持,以及如何获取Excel工作表的名称。 首先,我们需要知道C#读取Excel文件主要依赖于第三方库,因为.NET框架的标准库并不直接...

    C#读取EXCEL文件案例

    本案例将深入探讨如何使用C#高效快速地读取Excel文件,具体通过ADO.NET进行操作。ADO.NET是微软.NET框架的一部分,它提供了一种与数据库交互的强大方式。 首先,我们需要引入必要的命名空间,以便在C#代码中使用ADO...

    读取Excel文件xls、xlsx、csv格式文件,读取txt文件

    //C# 读取Excel文件、C#读取xls文件、C#读取xlsx文件、C#读取csv文件 //C# 将xls文件转换为DataTable、C#将xlsx文件转换为DataTable //C#将csv文件转换为DataTable //C#将txt文件转换为DataTable(列与列之间空格隔...

    使用C#读取excel文件

    首先,我们需要理解C#读取Excel文件的核心是通过ADO.NET(ActiveX Data Objects .NET)框架,具体来说是使用`OleDbConnection`类来建立与Excel文件的连接,然后通过`OleDbDataAdapter`来填充数据到`DataSet`对象中。...

    C# 读取EXCEL文件的三种经典方法

    ### C# 读取 EXCEL 文件的三种经典方法 在日常工作中,经常需要处理 Excel 文件。对于使用 C# 进行开发的工程师来说,能够高效地读取 Excel 文件中的数据是一项重要的技能。本文将详细介绍三种经典的 C# 读取 Excel...

    c#读取excel文件并生成xml文件

    本文将详细介绍如何使用C#读取Excel文件,并将其内容转换为XML文件。首先,我们需要了解两个主要的库:用于处理Excel文件的`EPPlus`库和用于处理XML的.NET Framework内置类。 1. **EPPlus库**: EPPlus是一个开源的...

    C#读取excel文件avi视频教学

    本视频教程“C#读取Excel文件avi”针对的是C#开发者,特别是那些需要处理Excel数据的人员。教程内容详实,旨在教会观众如何高效地读取Excel文件,这对于数据分析、报告生成或任何需要从Excel文件中提取信息的应用来...

    C#读取导入Excel值为空解决方法

    通过上述方法,我们可以有效地解决C#读取Excel文件时遇到的空值问题。在实际开发中,还需要根据具体的业务场景和需求进行相应的调整和优化。例如,在处理大数据量时,可以考虑使用更高效的库,如EPPlus或NPOI,这些...

    C#读取Excel文件内容发送邮件GroupUpEmails

    在本文中,我们将深入探讨如何使用C#编程语言来实现一个功能,即读取...通过以上步骤,我们可以实现C#读取Excel文件内容并按照分组发送邮件的功能。确保在实际操作中根据具体需求调整代码,并注意数据安全和隐私保护。

    C#读取Excel文件内容发送邮件

    C#邮件发送功能实现,以163邮箱服务器为例,读取Excel文件内容的收信人发送邮件。

    C# winform 读取Excel文件 表名及内容

    在C#编程环境中,开发Windows...总的来说,读取Excel文件在C# Winform应用中是一项常见的任务,可以通过Microsoft Office Interop库轻松实现。理解并熟练运用这些知识,将有助于你更好地处理各种数据导入导出的需求。

    C# 导入Excel文件到ListView和导出ListView到Excel文件

    首先,要导入Excel文件到ListView,我们需要使用一个能够读取Excel文件的库,如Microsoft Office Interop库或更轻量级的第三方库,如NPOI。对于本示例,我们假设使用NPOI,因为它无需安装Office,可以跨平台运行。 ...

    c#读取excel文件的几种办法.pdf

    本文将详细介绍使用C#读取Excel文件的几种经典方法,包括使用OleDb和使用第三方库如EPPlus。以下是对这些方法的详细说明: 1. 方法一:采用OleDb读取Excel文件 这是最传统的方法,通过ADO.NET中的OleDbConnection...

    C#读取加密Excel文件

    C# 读取加密的Excel 文件... 开始研究NPOI读取加密的Excel文件,没有研究出来,后来才改用Microsoft.Office.Interop.Excel读取加密的Excle文件。若有那位大牛研究出NPOI读取加密的Excel文件,希望能共享出源码来。 谢谢

Global site tag (gtag.js) - Google Analytics