读取excel文件的三种方法

VS2010  读取excel文件的三种方法

方法一:NPOI 

 NPOI参考

优点:

NPOI 是 POI 项目的 .NET 版本。POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。

使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写。

操作步骤:

一、下载NPOI:http://down.gougou.com/down?cid=DAEA322D9D7F934B898077FB01C3A8CB02A746E6

二、项目添加引用;

三、首先把如下代码封装成一个ExcelHelper类;

四、调用方法。

 

代码:(经测试)

    /// <summary>   
    /// 由Excel导入DataSet,如果有多个工作表,则导入多个DataTable   
    /// </summary>   
    /// <param name="excelFileStream">Excel文件流</param>   
    /// <param name="headerRowIndex">Excel表头行索引</param>   
    /// <returns>DataSet</returns>   
    public static DataSet ImportDataSetFromExcel(Stream excelFileStream, string sheetName, int headerRowIndex)
    {
       
        DataSet ds = new DataSet();
        HSSFWorkbook workbook = new HSSFWorkbook(excelFileStream);
        string sheetname = null;
        HSSFSheet sheet = null;
      
        try
        {
            sheetname = sheetName.Substring(0, sheetName.Length - 1);
            sheet = workbook.GetSheet(sheetname);//"BlankSubtraction1"

            if (sheet != null)
            {

                DataTable table = new DataTable();
                HSSFRow headerRow = sheet.GetRow(headerRowIndex);
                int cellCount = headerRow.LastCellNum;
                for (int i = headerRow.FirstCellNum; i < 20; i++)
                {
                    //string tst1 = headerRow.GetCell(1).ToString();
                    //string tst2 = headerRow.GetCell(1).StringCellValue.Trim();

                    if (headerRow.GetCell(i) != null)
                    {
                        如果遇到第一个空列,则不再继续向后读取                   
                        //cellCount = i + 1;
                        //break;
                        DataColumn column = new DataColumn(i.ToString());
                        table.Columns.Add(column);
                    }
                    //DataColumn column = new DataColumn(i.ToString());//headerRow.GetCell(i).StringCellValue
                    //table.Columns.Add(column);
                }
                for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
                {
                    HSSFRow row = sheet.GetRow(i);
                    if (row != null)
                    {
                        DataRow dataRow = table.NewRow();

                        cellCount = row.Cells.Count;

                        for (int j = row.FirstCellNum; j < 15; j++)
                        {
                            if (row.GetCell(j) != null)//row.GetCell(j) != null
                            {
                                string tst = row.GetCell(j).ToString();
                                dataRow[j] = row.GetCell(j).ToString();
                            }
                        }
                        table.Rows.Add(dataRow);
                    }
                }
                ds.Tables.Add(table);
            }           
        }
        catch
        {
 
        }
        excelFileStream.Close();
        workbook = null;
        return ds;
    }
    /// <summary>   
    /// 由Excel导入DataSet,如果有多个工作表,则导入多个DataTable   
    /// </summary>    /// <param name="excelFilePath">Excel文件路径,为物理路径。</param>   
    /// <param name="headerRowIndex">Excel表头行索引</param>   
    /// <returns>DataSet</returns>   
    public DataSet ImportDataSetFromExcel(string excelFilePath, string sheetName, int headerRowIndex)
    {
        using (FileStream stream = System.IO.File.OpenRead(excelFilePath))
        {
            long tt = stream.Length;
            //while (stream.Length() != null)
            int ss = stream.ReadByte();

            return ImportDataSetFromExcel(stream, sheetName, headerRowIndex);
        }
    }

 

方法二:使用COM组件。

缺点:

只能在安装excel 2003时才可以。

优点:(特殊情况下使用

使用于excel打开后需要点击“保存”才能用程序读取的情况。

操作步骤:

首先,在引用的COM中找到Microsoft Excel 11.0 Object Library,添加。

代码:(经测试)

public DataSet CSV_Getds(string filePath)
        {
            //创建Application对象
            Microsoft.Office.Interop.Excel.Application xApp = new Microsoft.Office.Interop.Excel.Application();


            xApp.Visible = false;//

            //得到WorkBook对象, 可以用两种方式之一: 下面的是打开已有的文件
            //Microsoft.Office.Interop.Excel.Workbook xBook = xApp.Workbooks._Open(@"C:\Watson Data Interface\Raw Data\Thermo multiscan\吸光度值原始数据(450-630-blank).xls",
            //Missing.Value, Missing.Value, Missing.Value, Missing.Value
            //, Missing.Value, Missing.Value, Missing.Value, Missing.Value
            //, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

            Microsoft.Office.Interop.Excel.Workbook xBook = xApp.Workbooks._Open(filePath,
            Missing.Value, Missing.Value, Missing.Value, Missing.Value
            , Missing.Value, Missing.Value, Missing.Value, Missing.Value
            , Missing.Value, Missing.Value, Missing.Value, Missing.Value);
            //xBook=xApp.Workbooks.Add(Missing.Value);//新建文件的代码
            //指定要操作的Sheet,两种方式:

            Microsoft.Office.Interop.Excel.Worksheet xSheet = (Microsoft.Office.Interop.Excel.Worksheet)xBook.Sheets[1];
            //Worksheet ws = (Worksheet)xBook.Worksheets[1];

            //Excel.Worksheet xSheet=(Excel.Worksheet)xApp.ActiveSheet;

            //读取数据,通过Range对象
            //Microsoft.Office.Interop.Excel.Range rng1 = xSheet.get_Range("A1", Type.Missing);


            //读取,通过Range对象,但使用不同的接口得到Range
            //Microsoft.Office.Interop.Excel.Range rng2 = (Microsoft.Office.Interop.Excel.Range)xSheet.Cells[3, 1];


            //保存方式三
            xBook.Save();
            xBook.Close();
            xSheet = null;
            xBook = null;
            xApp.Quit(); //这一句是非常重要的,否则Excel对象不能从内存中退出
            xApp = null;

 

            //保存方式二:保存WorkSheet
            //xSheet.SaveAs(@"C:\Watson Data Interface\Raw Data\Thermo multiscan\吸光度值原始数据(450-630-blank).xls",
            //            Missing.Value, Missing.Value, Missing.Value, Missing.Value,
            //            Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);


            try
            {
                string[] name = GetTablesFromOleDb(filePath);
                string a = string.Empty;
                for (int i = 0; i < name.Length; i++)
                {
                    if (name[i].Replace("'", "") == "BlankSubtraction1$")//BlankSubtraction1
                    {
                        a = name[i].Replace("'", "");
                    }
                }
                if (a == string.Empty)//不存在BlankSubtraction1时取Photometric1
                {
                    for (int i = 0; i < name.Length; i++)
                    {
                        if (name[i].Replace("'", "") == "Photometric1$")
                        {
                            a = name[i].Replace("'", "");
                        }
                    }
                }

                string OLEDBConnStr = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + filePath + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";


                OleDbDataAdapter oda = new OleDbDataAdapter("select * from [" + a + "]", OLEDBConnStr);


                DataSet sourceDataTable = new DataSet();
                oda.Fill(sourceDataTable);
                oda.Dispose();


                GC.Collect();

                return sourceDataTable;


            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                return null;
            }

        }

 

  /// <summary>
       /// 提供excel驱动和连接
       /// </summary>
       /// <param name="path"></param>
       /// <returns></returns>
        public static string[] GetTablesFromOleDb(string path)
        {

            string[] result = null;
            string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                                    "Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\";" + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且第一行作为数据返回,且以文本方式读取
                                    "data source=" + path;
            OleDbConnection conn = null;
            System.Data.DataTable tblSchema = null;


            // 初始化连接,并打开
            conn = new OleDbConnection(connStr);
            try
            {
                conn.Open();
                tblSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                result = new string[tblSchema.Rows.Count];
                for (int i = 0; i < tblSchema.Rows.Count; i++)
                {
                    result[i] = tblSchema.Rows[i][2].ToString();
                }
            }
            catch (Exception ex)
            {
                return null;
            }

            finally
            {
                // 关闭连接e
                conn.Close();
                conn.Dispose();
            }
            return result;
        }
      

方法三:使用office 驱动。

优点:

此方法最简单,也最普遍。

 

代码:(经测试)

        public DataSet CSV_Getds(string filePath)
        {
            try
            {
                string[] name = GetTablesFromOleDb(filePath);
                string a = string.Empty;
                for (int i = 0; i < name.Length; i++)
                {
                    if (name[i].Replace("'", "") == "BlankSubtraction1$")//BlankSubtraction1
                    {
                        a = name[i].Replace("'", "");
                    }
                }
                if (a == string.Empty)//不存在BlankSubtraction1时取Photometric1
                {
                    for (int i = 0; i < name.Length; i++)
                    {
                        if (name[i].Replace("'", "") == "Photometric1$")
                        {
                            a = name[i].Replace("'", "");
                        }
                    }
                }

                string OLEDBConnStr = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + filePath + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";


                OleDbDataAdapter oda = new OleDbDataAdapter("select * from [" + a + "]", OLEDBConnStr);

                DataSet sourceDataTable = new DataSet();
                oda.Fill(sourceDataTable);
                oda.Dispose();


                GC.Collect();

                return sourceDataTable;

 

            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                return null;
            }

        }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
读取Excel文件数据的方法有多种,以下是其中几种常用的方法: 1. 使用Python的pandas库:pandas是一个强大的数据处理库,可以轻松读取和处理Excel文件。首先需要安装pandas库,然后使用pandas的read_excel函数读取Excel文件,例如: ```python import pandas as pd data = pd.read_excel('file.xlsx') ``` 这样就可以将Excel文件中的数据读取到一个DataFrame对象中,可以方便地进行数据处理和分析。 2. 使用Python的xlrd库:xlrd是一个专门用于读取Excel文件的库。首先需要安装xlrd库,然后使用xlrd的open_workbook函数打开Excel文件,然后通过sheet_by_index或sheet_by_name方法选择要读取的工作表,最后使用row_values方法读取每一行的数据,例如: ```python import xlrd workbook = xlrd.open_workbook('file.xlsx') sheet = workbook.sheet_by_index(0) for row in range(sheet.nrows): data = sheet.row_values(row) # 处理数据 ``` 3. 使用Java的Apache POI库:Apache POI是一个用于操作Microsoft Office格式文件的Java库,可以读取和写入Excel文件。首先需要导入Apache POI相关的jar包,然后使用WorkbookFactory类打开Excel文件,通过Sheet类和Row类读取数据,例如: ```java import org.apache.poi.ss.usermodel.*; Workbook workbook = WorkbookFactory.create(new File("file.xlsx")); Sheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { String data = cell.getStringCellValue(); // 处理数据 } } ``` 以上是几种常用的读取Excel文件数据的方法,你可以根据自己的需求选择合适的方法进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值