两个table的名字还不相同,  
里面的数据是第一个table 比第二个table少一列数据,
第二个table数据是正确的。
这是为什么?

解决方案 »

  1.   

                string fileName = file;
                string text = "Provider=Microsoft.Jet.OLEDB.4.0;";
                string text2 = "Data Source=" + fileName;
                string connectionString = text + text2 + ";Extended Properties='Excel 8.0;HDR=yes;IMEX=1;'";
                string[] sheetName;
                OleDbConnection selectConnection = new OleDbConnection(connectionString);
                DataSet dataSet = new DataSet();
                DataTable dataStruct = new DataTable();
                selectConnection.Open();
                try
                {
                    dataStruct = selectConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                    if (dataStruct != null)
                    {
                        sheetName = new string[dataStruct.Rows.Count];
                        int i = 0;
                        foreach (DataRow row in dataStruct.Rows)
                        {
                            sheetName[i] = row["TABLE_NAME"].ToString();
                            string selectCommandText = "select * from [" + sheetName[i] + "]";
                            OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommandText, selectConnection);
                            adapter.Fill(dataSet, sheetName[i]);
                            i++;
                        }
                    }
                }
    这个不就是大家通用的方法嘛。
      

  2.   

    我用sql的导入数据工作   直接导入  就显示了两张,
    但是在excel里只显示一个工作表   去除隐藏那个功能还是 显示一个
      

  3.   

    你把excel那个工作表里面的数据复制一份出来新建个excel再导入试试看
      

  4.   

    两个table的名字还不相同, 
    里面的数据是第一个table 比第二个table少一列数据,
    第二个table数据是正确的。
    这是为什么?
    用Excel用xml文件打开看看你的表结构 
    当你修改要插入的表时 你的表结构就发生的变化
    你修改不同值的数据时 你的xml结构也会变化的(郁闷吧)试试这个:
    可以在bin中引用NExcel.dll 组件 操作
    读取不同的sheet(根据需要)sheet数据插入到table中 在插入数据库 不过性能上有些影响 毕竟2次搬数据参考:
    #region 读取增值税应交明细表Excel文件的数据并显示出来    /*-*******************************************************************/
        /*  函数名     :Add_excel                                   */
        /*  处理内容   :增值税的Excel文件读取                            */
        /*  形式     :Add_excel(string fullPath)                       */
        /*                       (string fullPath, string compId,            */
        /* string compName)                                                  */
        /*  序号 参数名      型   I/O  说 明                        */
        /*  (1)   fullPath      string                                       */
        /*  (2)   compId          string                                     */
        /*  (3)   compName      string                                       */
        /*  返回值    :DataTable                                        */
        /*******************************************************************-*/
        public DataTable Add_excel(string fullPath, string compId, string compName)
        {
            //@获得表结构
            DataTable eAddedTaxDetail = new DataTable();
            //@
            eAddedTaxDetail.TableName = "eAddedTaxDetail";
            //@
            DataRow dr;
            DataRow drEnd;
            eAddedTaxDetail.Columns.Add("YYMM");
            eAddedTaxDetail.Columns.Add("UnBalance", typeof(Decimal));
            eAddedTaxDetail.Columns.Add("CancelTax", typeof(Decimal));
            eAddedTaxDetail.Columns.Add("ExpRetTax", typeof(Decimal));
            eAddedTaxDetail.Columns.Add("ImpTaxOut", typeof(Decimal));
            eAddedTaxDetail.Columns.Add("OutAddedTax", typeof(Decimal));
            eAddedTaxDetail.Columns.Add("ImportTax", typeof(Decimal));
            eAddedTaxDetail.Columns.Add("AlreadyTax", typeof(Decimal));
            eAddedTaxDetail.Columns.Add("OutUnTax", typeof(Decimal));
            eAddedTaxDetail.Columns.Add("EndUnBalance", typeof(Decimal));
            eAddedTaxDetail.Columns.Add("StartUnpay", typeof(Decimal));
            eAddedTaxDetail.Columns.Add("InputPay", typeof(Decimal));
            eAddedTaxDetail.Columns.Add("AlreadyPay", typeof(Decimal));
            eAddedTaxDetail.Columns.Add("EndUnpay", typeof(Decimal));        eAddedTaxDetail.Columns.Add("DeleteFlg");
            eAddedTaxDetail.Columns.Add("UpdateUser");
            eAddedTaxDetail.Columns.Add("UpdateDate");
            eAddedTaxDetail.Columns.Add("CompID");
            eAddedTaxDetail.Columns.Add("CompName");
            eAddedTaxDetail.Columns.Add("DataCol");
            //@获得要读取Excel文件
            Workbook wb = Workbook.getWorkbook(fullPath);
            //@初始化要读的sheet
            Sheet mysheet = null;
            //T@ 获得要读取的Sheet
            foreach (Sheet sheet in wb.Sheets)
            {
                if (sheet.Name.Equals("利润表"))
                {
                    mysheet = sheet;
                    break;
                }
            }        //T@ 判断是否存在sheet的情况
            if (mysheet == null)
            {
                return null;
            }
            //@增加两行
            dr = eAddedTaxDetail.NewRow();
            drEnd = eAddedTaxDetail.NewRow();
            //T@ 读取Excel中的本月数和本年累计数
            for (int irow = FiAnaConstant.BeginRowAdd; irow <= FiAnaConstant.EndRowAdd; irow++)
            {            int beginCol = FiAnaConstant.BeginColAdd;
                //@ 隐藏列
                Cell cell = mysheet.getCell(beginCol, irow);
                if (cell.Value == "" || cell.Value == null)
                {
                    continue;
                }
                //@获得隐藏标记
                int colIndex = Convert.ToInt32(cell.Value);
                beginCol++;
                //@ 本月数
                cell = mysheet.getCell(beginCol, irow);
                dr[colIndex] = cell.Value.ToString();            //@本年累计数
                beginCol++;
                cell = mysheet.getCell(beginCol, irow);
                drEnd[colIndex] = cell.Value.ToString();
            }        //@给本月数赋值
            dr["YYMM"] = YearList.Value.ToString() + MonthList.Value.ToString();
            dr["DeleteFlg"] = CommonConstant.DELETE_ZERO;
            dr["UpdateUser"] = GetSCGSession().GetUserInfo().UserId;
            dr["UpdateDate"] = DateTime.Now;
            //@获得公司ID
            dr["CompID"] = compId;
            //@获得公司名称
            dr["CompName"] = compName;
            //@本月数
            dr["DataCol"] = CommonConstant.PROFIT_DATACOL_MONTH;
            eAddedTaxDetail.Rows.Add(dr);        //@给本年累计数赋值
            drEnd["YYMM"] = YearList.Value.ToString() + MonthList.Value.ToString();
            drEnd["DeleteFlg"] = CommonConstant.DELETE_ZERO;
            drEnd["UpdateUser"] = GetSCGSession().GetUserInfo().UserId;
            drEnd["UpdateDate"] = DateTime.Now;
            //@获得公司ID
            drEnd["CompID"] = compId;
            //@获得公司名称
            drEnd["CompName"] = compName;
            //@本年累计数
            drEnd["DataCol"] = CommonConstant.PROFIT_DATACOL_YEAR;
            eAddedTaxDetail.Rows.Add(drEnd);        return eAddedTaxDetail;
        }
        #endregion
      

  5.   

    protected  void WriteExcel(DataTable dtSource, string strPath,string sheetname)
        {        System.Data.OleDb.OleDbConnection OleDb_Conn = new OleDbConnection();
            OleDb_Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=Yes';" + "Data Source=\"" + strPath + "\"";
          
            try
            {
                OleDb_Conn.Open();
                OleDbCommand OleDb_Comm = new OleDbCommand();
                OleDb_Comm.Connection = OleDb_Conn;            string strCmd;
                try
                {
                    strCmd = "drop table ["+sheetname+"]";
                    OleDb_Comm.CommandText = strCmd;
                    OleDb_Comm.ExecuteNonQuery();
                }
                catch
                {
                }            strCmd = "create Table ["+sheetname+"](";
                foreach (DataColumn dc in dtSource.Columns)
                {
                    strCmd += "[" + dc.ColumnName + "] nchar(50),";
                }
                strCmd = strCmd.Trim().Substring(0, strCmd.Length - 1);
                strCmd += ")";
                OleDb_Comm.CommandText = strCmd;            OleDb_Comm.ExecuteNonQuery();            foreach (DataRow dr in dtSource.Rows)
                {
                    if (dr.RowState != System.Data.DataRowState.Deleted)
                    {
                        strCmd = "insert into ["+sheetname+"] values(";
                        foreach (DataColumn dc in dtSource.Columns)
                        { 
                                strCmd += "'" + dr[dc.ColumnName].ToString() + "',";                        
                        }                    strCmd = strCmd.Substring(0, strCmd.Length - 1);
                        strCmd += ")";                    OleDb_Comm.CommandText = strCmd;
                        OleDb_Comm.ExecuteNonQuery();                }
                }
                OleDb_Conn.Close();
            }
            catch (Exception ex)
            {
                tool.WarningDialog(ex.Message);
            }
            finally
            {
                OleDb_Conn.Close();
            }
        }