1. 程式人生 > >ASP.NET操作Excel---上傳Excel後解析Excel檔案

ASP.NET操作Excel---上傳Excel後解析Excel檔案

         <tr>
             <td width="16%" class="c_tdleft">
                   上傳Excel檔案:
             </td>  
             <td width="70%" class="c_td">
                 <asp:FileUpload ID="FU_Excel" runat="server" Width="202" />
                 <asp:Button ID="Button2" runat="server" Text="匯入Excel資料"   onclick="Button2_Click" />
                 <asp:Label ID="lblMessage"  runat="server" Text=""></asp:Label>
             </td>
         </tr>

//一個固定的訪問Excel方法
 //訪問Excel檔案
    public static DataSet ExcelToDS(string Path)
    {
        string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" +                 System.Web.HttpContext.Current.Server.MapPath(Path) + ";" + "Extended Properties=Excel 8.0;";
        OleDbConnection conn = new OleDbConnection(strConn);
        conn.Open();
        string strExcel = "";
        OleDbDataAdapter myCommand = null;
        DataSet ds = null;
        strExcel = "select * from [sheet1$]";
        myCommand = new OleDbDataAdapter(strExcel, strConn);
        ds = new DataSet();
        myCommand.Fill(ds, "table1");
        return ds;
    }


//上傳Excel到伺服器之後,再解析到伺服器顯示資料

 protected void Button2_Click(object sender, EventArgs e)
    {
        if (FU_Excel.HasFile)   
        {   
            //判斷檔案是否小於10Mb   
            if (FU_Excel.PostedFile.ContentLength < 10485760)   
            {   
                try  
                {   
                    //上傳檔案並指定上傳目錄的路徑   
                    FU_Excel.PostedFile.SaveAs(Server.MapPath("~/admin/TelePhoneExcel/") //在伺服器的路徑,上傳Excel的路徑
                        + FU_Excel.FileName);   
                    /*注意->這裡為什麼不是:FileUpLoad1.PostedFile.FileName  
                    * 而是:FileUpLoad1.FileName?  
                    * 前者是獲得客戶端完整限定(客戶端完整路徑)名稱  
                    * 後者FileUpLoad1.FileName只獲得檔名.  
                    */  
  
                    //當然上傳語句也可以這樣寫(貌似廢話):   
                    //FileUpLoad1.SaveAs(@"D:\"+FileUpLoad1.FileName);   
                    lblMessage.Text = "上傳成功!";   
                }   
               catch (Exception ex)   
                {
                    lblMessage.Text = "出現異常,無法上傳!";   
                    //lblMessage.Text += ex.Message;   
                }   
  
            }   
            else  
            {
                lblMessage.Text = "上傳檔案不能大於10MB!";   
            }   
        }   
        else  
        {
            lblMessage.Text = "尚未選擇檔案!";   
        }

        //解析Excel
        DataSet ds = new DataSet();
        string excelPath = "../TelePhoneExcel/"+FU_Excel.FileName; //獲取Excel路徑
        ds = buss.ExcelToDS(excelPath); //呼叫上面那個方法解析Excel
        string telePhone="";
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
             telePhone+= ds.Tables[0].Rows[i][0].ToString()+",";//取第i行的第0列的值
        }
        txtProduct_name.Text = telePhone.Substring(0,telePhone.Length-1); //擷取逗號
        TextBox2.Text = ds.Tables[0].Rows.Count.ToString(); //手機號碼個數
  }