protected void btnImPrice_Click(object sender, EventArgs e)
        {
            String path;
            String name = null;
            if (this.FdExcel.PostedFile.FileName.Trim() != "")
            {
                path = FdExcel.PostedFile.FileName.ToString();
                name = System.IO.Path.GetFileName(path);
                int i = path.LastIndexOf(".");
                string name1 = path.Substring(i);
                if (name1 == ".xls" || name1 == ".xlsx")
                {
                    FdExcel.PostedFile.SaveAs(path );
                    //string delete = "delete enduserpriceinfo";
                    //string deleteenduserprice = "delete frominfo";
                    //DataBase db = new App_Data.SqlServer();
                    //db.excuteSql(delete);
                    //db.excuteSql(deleteenduserprice);
                    this.OpenExcel(path);                }
            }        }
        private void OpenExcel(string path)
        {
            DataBase db = new App_Data.SqlServer();
            db.Open();
            object missing = System.Reflection.Missing.Value;
            Excel.Application excel = new Excel.Application();//lauch excel application 
            string filename = path;
            if (excel == null)
            {
                Response.Write("<script>alert('Can't access excel')</script>");
            }
            else
            {
                excel.Visible = false;
                excel.UserControl = true;
                // 以只读的形式打开EXCEL文件  
                Excel.Workbook wb = excel.Workbooks.Open(filename, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);//取得第一个工作薄 
                //Excel.Workbook workbook = wb[1];
                Excel.Sheets sheets = wb.Worksheets;
                Excel._Worksheet ws = (Excel._Worksheet)wb.Sheets.get_Item(1); //取得总记录行数   (包括标题列)
                string DowID= "";
                string material= "";
                string Condition = "";
                double Rate;
                string Curr;
                string CustomerId;
                
                string MaterialText;
                string UOM;
                int iRow = 2;
                int sheetCount = sheets.Count;
                //循环遍历工作簿
                for (int i = 1; i <= sheetCount; i++)
                {
                    ws = (Excel._Worksheet)wb.Sheets.get_Item(i);//这里一直报错不知道该怎么解决(错误:被调用的对象已与其客户端断开连接。 (异常来自 HRESULT:0x80010108 (RPC_E_DISCONNECTED)))
                    //单个工作薄的数据读取,把你上面的代码拷贝到这里
                    try
                    {
                        while (ws.get_Range("A" + iRow + "", Type.Missing).Value2 != null)
                        {
                            DowID = ws.get_Range("A" + iRow + "", Type.Missing).Value2.ToString();
                            material = ws.get_Range("D" + iRow + "", Type.Missing).Value2.ToString();
                            MaterialText = ws.get_Range("E" + iRow + "", Type.Missing).Value2.ToString();
                            Condition = ws.get_Range("G" + iRow + "", Type.Missing).Value2.ToString();
                            CustomerId = ws.get_Range("I" + iRow + "", Type.Missing).Value2.ToString();
                            Rate = (double)ws.get_Range("T" + iRow + "", Type.Missing).Value2;
                            Curr = ws.get_Range("U" + iRow + "", Type.Missing).Value2.ToString();
                            UOM = ws.get_Range("V" + iRow + "", Type.Missing).Value2.ToString();
                            if (Condition =="End User Customer/Material")
                            {                                string sql = "insert into enduserpriceinfo(CustomerID,DistributionID,MaterialNumber,Curr,Rate) values('" + CustomerId + "','" + DowID + "','" + material + "','" + Curr + "'," + Rate + ")";                                db.excuteSqlNoOpen(sql);
                            }
                            else
                            {                                string sql2 = "insert into priceSold(CustomerID,DistributionID,MaterialNumber,Currency,Rate) values('" + CustomerId + "','" + DowID + "','" + material + "','" + Curr + "','" + Rate + ")";                                db.excuteSqlNoOpen(sql2);
                            }
                            string sql3 = "insert into productinfo(DistributionID,MaterialName,BaseUnit) values('" + DowID + "','" + material + "','" + MaterialText + "','" + UOM + ")";
                            db.excuteSqlNoOpen(sql3);                            iRow++;
                        }
                        db.Close();
                        wb.Close(false, Type.Missing, Type.Missing);
                        excel.Quit();
                        System.GC.Collect();
                       // File.Delete(filename);
                        
                    }
                    catch (Exception ex)
                    {
                        db.Close();
                        wb.Close(false, Type.Missing, Type.Missing);
                        excel.Quit();
                        System.GC.Collect();
                        //File.Delete(filename);
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "shoebox", "<script language=javascript>alert('导入失败!第" + iRow + "行')</script>");
                    }
                }
                Page.ClientScript.RegisterStartupScript(this.GetType(), "shoebox", "<script language=javascript>alert('导入成功!')</script>");
                
            }
        }
    }

解决方案 »

  1.   

    this.FdExcel.PostedFile.FileName.Trim() != ""  改 !=string.Empty 更好
    System.IO.Path.GetExtension(FileUploadExcel.FileName)!=".xls" 还有比这个更好的方法
    Response.Write("<script>alert('Can't access excel')</script>");Page.ClientScript.RegisterStartupScript(GetType(), "Message", "<script type='text/javascript'>alert('请先登录!');</script>");不看了 代码太长了 50分不容易拿啊~
      

  2.   

    随便看了一下:
    Response.Write("<script>alert('Can't access excel')</script>");
    改为:
    Response.Write("<script>alert(\"Can't access excel\")</script>");
      

  3.   

    主要是帮我看这段代码怎么处理 ws = (Excel._Worksheet)wb.Sheets.get_Item(i);//这里一直报错不知道该怎么解决(错误:被调用的对象已与其客户端断开连接。 (异常来自 HRESULT:0x80010108 (RPC_E_DISCONNECTED)))
      

  4.   

    有啊 !
    ws = (Excel._Worksheet)wb.Sheets.get_Item(i);//这里一直报错不知道该怎么解决(错误:被调用的对象已与其客户端断开连接。 (异常来自 HRESULT:0x80010108 (RPC_E_DISCONNECTED)))
      

  5.   

    你在for循环里就把db.Close();
                            wb.Close(false, Type.Missing, Type.Missing);
                            excel.Quit();
                            System.GC.Collect();
    下个循环当然会报错了
      

  6.   

    db.Close();
                            wb.Close(false, Type.Missing, Type.Missing);
                            excel.Quit();
                            System.GC.Collect();
    放在for循环外面,就不会报错了