C# 读取Excel和DBF文件

//获excel中多个sheet中的数据

  /// <summary>
        /// 读取导入Excel文件内容
        /// </summary>
        /// <param name="fileName">文件路径(上传后)</param>
        /// <param name="columnString">Excel中的列 名</param>
        /// <param name="isReadAllExcelSheet">是否读取多个Sheet</param>
        /// <param name="message">(out)消息提示</param>
        /// <returns></returns>
        public DataTable ReadDataFromExcel(string fileName, string columnString, bool isReadAllExcelSheet, out string message)
        {
            message = "";
            try
            {
                string strCon = "";

                string fileExt = Path.GetExtension(fileName).ToLower();

                if (fileExt == ".xls")
                {
                    strCon = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + fileName + ";Extended Properties=" + (char)34 + "Excel 8.0;HDR=Yes;IMEX=1;" + (char)34;
                }
                else if (fileExt == ".xlsx")
                {
                    strCon = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + fileName + ";Extended Properties=" + (char)34 + "Excel 12.0;HDR=Yes;IMEX=1;" + (char)34;
                }
                else
                {
                    message = "读取失败,非excel文件格式。";
                    return null;
                }

                OleDbConnection excelConnection = new OleDbConnection(strCon);

                excelConnection.Open();

                #region 获取所有sheet表名称

                DataTable excelData = new DataTable();

                DataTable getTableNameData = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

                //获取excel中的第一个sheet中的数据
                //ReadEachExcelSheetData(excelConnection, ((String)getTableNameData.Rows[0]["TABLE_NAME"]).ToString(), columnString, ref excelData);

                //获取excel中有多个sheet中的数据
                foreach (DataRow row in getTableNameData.Rows)
                {

                    excelData = ReadEachExcelSheetData2(excelConnection, ((String)row["TABLE_NAME"]).ToString(), columnString);

                    if (excelData.Rows.Count <= 0)
                    {
                        break;
                    }
                }
                getTableNameData = null;

                #endregion

                return excelData;
            }
            catch (Exception ex)
            {
                message = "数据文件或者内容格式有严重错误(" + ex.Message + "),请检查!";
                return null;
            }
        }

        public void ReadEachExcelSheetData(OleDbConnection excelConnection, string tableName, string columnString, ref DataTable excelData)
        {
            try
            {
                tableName = "[" + tableName + "]";
                string sql = "";

                string queryFieldText = string.Empty;

                if (string.IsNullOrEmpty(queryFieldText))
                {
                    queryFieldText = "*";
                }
                else
                {
                    foreach (string column in columnString.Split(‘,‘))
                    {
                        queryFieldText += "[" + column + "],";
                    }
                    queryFieldText = queryFieldText.Trim(‘,‘);

                }
                sql = @"
                                SELECT
                                        {0}
                                FROM
                                        {1}
                                ";
                sql = string.Format(sql, queryFieldText, tableName);

                DataSet ds = new DataSet();
                OleDbDataAdapter myAdp = new OleDbDataAdapter(sql, excelConnection);
                myAdp.Fill(ds, tableName);

                if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    excelData.Merge(ds.Tables[0]);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }

//获取excel中第一个sheet中的数据

  /// <summary>
        /// 读取导入Excel文件内容
        /// </summary>
        /// <param name="fileName">文件路径(上传后)</param>
        /// <param name="columnString">Excel中的列 名</param>
        /// <param name="isReadAllExcelSheet">是否读取多个Sheet</param>
        /// <param name="message">(out)消息提示</param>
        /// <returns></returns>
        public DataTable ReadDataFromExcel(string fileName, string columnString, bool isReadAllExcelSheet, out string message)
        {
            message = "";
            try
            {
                string strCon = "";

                string fileExt = Path.GetExtension(fileName).ToLower();

                if (fileExt == ".xls")
                {
                    strCon = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + fileName + ";Extended Properties=" + (char)34 + "Excel 8.0;HDR=Yes;IMEX=1;" + (char)34;
                }
                else if (fileExt == ".xlsx")
                {
                    strCon = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + fileName + ";Extended Properties=" + (char)34 + "Excel 12.0;HDR=Yes;IMEX=1;" + (char)34;
                }
                else
                {
                    message = "读取失败,非excel文件格式。";
                    return null;
                }

                OleDbConnection excelConnection = new OleDbConnection(strCon);

                excelConnection.Open();

                #region 获取所有sheet表名称

                DataTable excelData = new DataTable();

                DataTable getTableNameData = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

                //获取excel中的第一个sheet中的数据
                ReadEachExcelSheetData(excelConnection, ((String)getTableNameData.Rows[0]["TABLE_NAME"]).ToString(), columnString, ref excelData);

                //获取excel中有多个sheet中的数据
                //foreach (DataRow row in getTableNameData.Rows)
                //{

                //    excelData = ReadEachExcelSheetData2(excelConnection, ((String)row["TABLE_NAME"]).ToString(), columnString);

                //    if (excelData.Rows.Count <= 0)
                //    {
                //        break;
                //    }
                //}
                getTableNameData = null;

                #endregion

                return excelData;
            }
            catch (Exception ex)
            {
                message = "数据文件或者内容格式有严重错误(" + ex.Message + "),请检查!";
                return null;
            }
        }

  public DataTable ReadEachExcelSheetData2(OleDbConnection excelConnection, string tableName, string columnString)
        {
            DataTable excelData = new DataTable();
            try
            {
                tableName = "[" + tableName + "]";
                string sql = "";

                string queryFieldText = string.Empty;

                if (string.IsNullOrEmpty(queryFieldText))
                {
                    queryFieldText = "*";
                }
                else
                {
                    foreach (string column in columnString.Split(‘,‘))
                    {
                        queryFieldText += "[" + column + "],";
                    }
                    queryFieldText = queryFieldText.Trim(‘,‘);

                }
                sql = @"
                                SELECT
                                        {0}
                                FROM
                                        {1}
                                ";
                sql = string.Format(sql, queryFieldText, tableName);

                DataSet ds = new DataSet();
                OleDbDataAdapter myAdp = new OleDbDataAdapter(sql, excelConnection);
                myAdp.Fill(ds, tableName);

                if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    excelData.Merge(ds.Tables[0]);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return excelData;

        }
时间: 2024-10-31 16:44:33

C# 读取Excel和DBF文件的相关文章

Java读取Level-1行情dbf文件极致优化(3)

最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1行情没有Level-2快,但是作为系统支持的行情源,我们还是需要优化它,使得从文件读取,到用户通过socket收到行情,端到端的时延尽可能的低.本文主要介绍对level-1行情dbf文件读取的极致优化方案.相信对其他的dbf文件读取应该也有借鉴意义. Level-1行情是由行情小站,定时每隔几秒把d

Java读取Level-1行情dbf文件极致优化(2)

最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1行情没有Level-2快,但是作为系统支持的行情源,我们还是需要优化它,使得从文件读取,到用户通过socket收到行情,端到端的时延尽可能的低.本文主要介绍对level-1行情dbf文件读取的极致优化方案.相信对其他的dbf文件读取应该也有借鉴意义. Level-1行情是由行情小站,定时每隔几秒把d

PHP读取Excel里的文件

下载phpExcelReader  http://sourceforge.net/projects/phpexcelreader 解压后得到下面这些文件 jxlrwtest.xls这个excel文件有错误,自己重新建了个 example.php和example2.php两个文件的输出不一样 example.php example2.php 另外,在运行example.php的时候可能报一些错误,下面是在网上找的解决办法: 错误一:Deprecated: Assigning the return

用PHP读取Excel、CSV文件

PHP读取excel.csv文件的库有很多,但用的比较多的有: PHPOffice/PHPExcel.PHPOffice/PhpSpreadsheet,现在PHPExcel已经不再维护了,最新的一次提交还是在2017年12月25号,建议直接使用PhpSpreadsheet,而且这两个项目都是同一个组织维护的,本文介绍PhpSpreadsheet的使用. 介绍PhpSpreadsheet PhpSpreadsheet这个库是纯PHP写的,提供了非常丰富的类和方法,而且支持很多文件格式: 环境要求

Java读取Level-1行情dbf文件极致优化(1)

最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1行情没有Level-2快,但是作为系统支持的行情源,我们还是需要优化它,使得从文件读取,到用户通过socket收到行情,端到端的时延尽可能的低.本文主要介绍对level-1行情dbf文件读取的极致优化方案.相信对其他的dbf文件读取应该也有借鉴意义. Level-1行情是由行情小站,定时每隔几秒把d

新手上路之DBF文件的读取

初次了解DBF文件,因为有需求要将其中的数据导出,并插入到数据库中.开始的时候用Excel把它打开了,以为它就是一个Excel文件,就想着用NPOI来实现,显然是作为一个新人太天真了,后来在别人的博客上了解到,读取这个文件有多种方式,根据不同的难易用不同的方法,由于我所接触的这个文件中没有过多的约束,我也就用了最简单的一种. /// <summary> /// 读取DBF文件,此方法适用于简单的DBF文件,即类似深交所的文件 /// </summary> /// <param

java无依赖读取Excel文件

说到Java读取Excel文件,用得多的当然是POI或jxls,但今天在看一本书的时候.当中提到使用JdbcOdbcDriver这个驱动类在不依赖第三方库的情况下也能够完毕对Excel文件的读取操作,网上搜了一下原因然后自己写了个样例跑通了,在此记录一下. Java读取数据库大家都非常熟悉,须要一个数据源与对应的驱动.开发人员通过JDBC操作驱动.驱动再去操作数据库.那么Java读取Excel文件也是类似的.在Windows系统中,能够将一个Excel文件注冊为一个ODBC数据源,注冊过程为:

java读取Excel文件

package 读取excel; /* *导入jxl包,注意不能读取最新版本的Excel文件 */ import java.io.File;    import java.io.FileInputStream;     import java.io.InputStream;    import jxl.Cell; import jxl.CellType;    import jxl.Sheet;    import jxl.Workbook;    import jxl.write.Label;

使用Apache下poi创建和读取excel文件

一:使用apache下poi创建excel文档 1 @Test 2 /* 3 * 使用Apache poi创建excel文件 4 */ 5 public void testCreateExcel() { 6 // 1:创建一个excel文档 7 HSSFWorkbook workbook = new HSSFWorkbook(); 8 // 2:创建一个sheet工作表,名为“学生成绩” 9 HSSFSheet sheet = workbook.createSheet("学生成绩");