예제 #1
0
        public void F_LoadExcel()
        {
            //引用//ReferenceCode/ExcelColumn.cs的類別
            CustomerRate GetExcelDefine = new CustomerRate();

            //導入匯入table
            GetExcelDefine.RateDT();
            //上傳路徑
            String    savePath = Server.MapPath(@"~\ExcelUpLoad\Finance\CustomerRate");
            string    str頁簽名稱 = "", str三巡時間年 = "", str三巡時間月 = "", str三巡時間巡 = "";
            DataTable D_table = new DataTable("Excel");

            //建立Excel欄位
            D_table = GetExcelDefine.CustomerRateDataTable.Copy();
            DataTable D_errortable = new DataTable("Error");
            //實際顯示欄位
            int Excel欄位數 = D_table.Columns.Count - 2;
            int iyear    = 0;

            if (文件上傳FU.HasFile)
            {
                string fileName = 文件上傳FU.FileName;
                Session["FileName"] = fileName;
                savePath            = savePath + fileName;
                文件上傳FU.SaveAs(savePath);

                bool bCheckTime = true, bCheckDB = true;

                #region ErrorTable
                //                    D_errortable.Columns.Add("SheetName");
                D_errortable.Columns.Add("Error");
                //D_errortable.Columns.Add("Error");
                #endregion


                if (fileName.Substring(fileName.Length - 4, 4).ToUpper() == "XLSX")
                {
                    XSSFWorkbook workbook = new XSSFWorkbook(文件上傳FU.FileContent);  //==只能讀取 System.IO.Stream

                    for (int x = 0; x < workbook.NumberOfSheets; x++)
                    {
                        XSSFSheet u_sheet   = (XSSFSheet)workbook.GetSheetAt(x); //-- 0表示:第一個 worksheet工作表
                        XSSFRow   headerRow = (XSSFRow)u_sheet.GetRow(3);        //-- Excel 表頭列
                        //抓第一行資料
                        IRow DateRow = (IRow)u_sheet.GetRow(0);                  //-- v.1.2.4版修改
                        //Session["Date"] = SearchTB.Text;
                        str頁簽名稱 = u_sheet.SheetName.ToString();
                        //str三巡時間 = DateRow.GetCell(3).ToString();
                        if ("三巡外匯表" == str頁簽名稱)
                        {
                            try
                            {
                                if (string.IsNullOrEmpty(DateRow.Cells[5].ToString()))
                                {
                                    bCheckTime = false;
                                }
                                str三巡時間年 = DateRow.Cells[5].ToString();
                                if (string.IsNullOrEmpty(DateRow.Cells[7].ToString()))
                                {
                                    bCheckTime = false;
                                }
                                str三巡時間月 = DateRow.Cells[7].ToString();
                                if (string.IsNullOrEmpty(DateRow.Cells[9].ToString()))
                                {
                                    bCheckTime = false;
                                }
                                str三巡時間巡 = DateRow.Cells[9].ToString();
                                int.TryParse(str三巡時間年, out iyear);
                                if (iyear > 0)
                                {
                                    iyear    = iyear + 1911;
                                    str三巡時間年 = iyear.ToString();
                                }
                                else
                                {
                                    bCheckTime = false;
                                }
                                if (bCheckTime)
                                {
                                    bCheckDB = F_CheckData(str三巡時間巡, str三巡時間年 + str三巡時間月);
                                }
                            }
                            catch (Exception)
                            {
                                //日期確認失敗
                                bCheckTime = false;
                            }
                            //執行程式
                            if (bCheckTime && bCheckDB)
                            {
                                //i=1第二列開始
                                for (int i = 1; i <= u_sheet.LastRowNum; i++)   //-- 每一列做迴圈
                                {
                                    //--不包含 Excel表頭列的 "其他資料列"
                                    IRow row = (IRow)u_sheet.GetRow(i);
                                    F_資料確認(D_table, D_errortable, str頁簽名稱, row);
                                }
                            }
                            else if (!bCheckTime)
                            {
                                F_ErrorShow("三巡日期錯誤");
                            }
                        }
                        //-- 釋放 NPOI的資源
                        u_sheet = null;
                    }
                    //-- 釋放 NPOI的資源
                    workbook = null;
                }
                else
                {
                    HSSFWorkbook workbook = new HSSFWorkbook(文件上傳FU.FileContent);  //==只能讀取 System.IO.Stream
                    for (int x = 0; x < workbook.NumberOfSheets; x++)
                    {
                        HSSFSheet u_sheet   = (HSSFSheet)workbook.GetSheetAt(x); //-- 0表示:第一個 worksheet工作表
                        HSSFRow   headerRow = (HSSFRow)u_sheet.GetRow(3);        //-- Excel 表頭列
                        IRow      DateRow   = (IRow)u_sheet.GetRow(2);           //-- v.1.2.4版修改
                        str頁簽名稱 = u_sheet.SheetName.ToString();

                        if ("三巡外匯表" == str頁簽名稱)
                        {
                            try
                            {
                                if (string.IsNullOrEmpty(DateRow.Cells[5].ToString()))
                                {
                                    bCheckTime = false;
                                }
                                //str三巡時間年 = DateRow.Cells[5].ToString();
                                if (string.IsNullOrEmpty(DateRow.Cells[7].ToString()))
                                {
                                    bCheckTime = false;
                                }
                                str三巡時間月 = DateRow.Cells[7].ToString();
                                if (string.IsNullOrEmpty(DateRow.Cells[9].ToString()))
                                {
                                    bCheckTime = false;
                                }
                                str三巡時間巡 = DateRow.Cells[9].ToString();
                                int.TryParse(str三巡時間年, out iyear);
                                if (iyear > 0)
                                {
                                    iyear    = iyear + 1911;
                                    str三巡時間年 = iyear.ToString();
                                }
                                else
                                {
                                    bCheckTime = false;
                                }
                                if (bCheckTime)
                                {
                                    bCheckTime = F_CheckData(str三巡時間巡, str三巡時間年 + str三巡時間月);
                                }
                            }
                            catch (Exception)
                            {
                                //日期確認失敗
                                bCheckTime = false;
                            }
                            //執行程式
                            if (bCheckTime)
                            {
                                //i=1第二列開始
                                for (int i = 1; i <= u_sheet.LastRowNum; i++)   //-- 每一列做迴圈
                                {
                                    //--不包含 Excel表頭列的 "其他資料列"
                                    IRow row = (IRow)u_sheet.GetRow(i);
                                    F_資料確認(D_table, D_errortable, str頁簽名稱, row);
                                }
                            }
                            else
                            {
                                F_ErrorShow("三巡日期錯誤");
                            }
                        }
                        //-- 釋放 NPOI的資源
                        u_sheet = null;
                    }
                    //-- 釋放 NPOI的資源
                    workbook = null;
                }
            }
            else
            {
                F_Show(false);
                F_ErrorShow("????  ...... 請先挑選檔案之後,再來上傳");
            }   // FileUpload使用的第一個 if判別式

            if (D_table.Rows.Count > 0)
            {
                Session["Excel"]    = D_table;
                Session["三巡時間年"]    = iyear.ToString();
                Session["三巡時間月"]    = str三巡時間月;
                Session["str三巡時間巡"] = str三巡時間巡;
                YearLB.Text         = iyear.ToString();
                MonthLB.Text        = str三巡時間月;
                switch (str三巡時間巡)
                {
                case "1":
                    巡LB.Text = "上巡";
                    break;

                case "2":
                    巡LB.Text = "中巡";
                    break;

                default:
                    巡LB.Text = "下巡";
                    break;
                }
                F_Show(true);
                DataGV.DataSource = D_table;
                DataGV.DataBind();
            }
            else
            {
                Session["Excel"] = null;
            }

            if (D_errortable.Rows.Count > 0)
            {
                Session["ExcelError"] = D_errortable;
            }
            else
            {
                Session["ExcelError"] = null;
                ErrorGV.DataSource    = null;
                ErrorGV.DataBind();
            }
        }
예제 #2
0
        /// <summary>
        /// 將Session的資料上傳到資料庫
        /// </summary>
        public void F_UpLoad()
        {
            //有錯誤資料不給匯入
            //if (SearchTB.Text.Trim() != "" && F_CheckData() && Session["ExcelError"] == null)
            if (Session["ExcelError"] == null)
            {
                if (Session["Excel"] != null)
                {
                    DataTable dt = (DataTable)Session["Excel"];
                    using (SqlConnection conn1 = new SqlConnection(strConnectString))
                    {
                        SqlCommand     command1 = conn1.CreateCommand();
                        SqlTransaction transaction1;
                        conn1.Open();
                        transaction1 = conn1.BeginTransaction("CreateBas_customs_rateImport");

                        command1.Connection  = conn1;
                        command1.Transaction = transaction1;
                        try
                        {
                            DateTime dtTime = Convert.ToDateTime(Session["三巡時間年"].ToString() + "-" + Session["三巡時間月"].ToString() + "-01");

                            string   str三巡時間巡 = Session["str三巡時間巡"].ToString();
                            string   str三巡時間年 = Session["三巡時間年"].ToString();
                            string   str三巡時間月 = Session["三巡時間月"].ToString();
                            DateTime dt三巡起, dt三巡迄;
                            switch (str三巡時間巡)
                            {
                            case "1":
                                dt三巡起 = Convert.ToDateTime(str三巡時間年 + "-" + str三巡時間月 + "-01");
                                dt三巡迄 = Convert.ToDateTime(str三巡時間年 + "-" + str三巡時間月 + "-10");
                                break;

                            case "2":
                                dt三巡起 = Convert.ToDateTime(str三巡時間年 + "-" + str三巡時間月 + "-11");
                                dt三巡迄 = Convert.ToDateTime(str三巡時間年 + "-" + str三巡時間月 + "-20");
                                break;

                            default:
                                dt三巡起 = Convert.ToDateTime(str三巡時間年 + "-" + str三巡時間月 + "-21");
                                dt三巡迄 = dtTime.AddMonths(1).AddDays(-1);
                                break;
                            }
                            for (int i = 0; i < dt.Rows.Count; i++)
                            {
                                command1.CommandText = string.Format(@"INSERT INTO [dbo].[bas_customs_rate]
                                                    ([site]
                                                    ,[year_month]
                                                    ,[period_type]
                                                    ,[base_currency]
                                                    ,[work_currency]
                                                    ,[start_date]
                                                    ,[end_date]
                                                    ,[import_rate]
                                                    ,[export_rate]
                                                    ,[creator]
                                                    ,[create_date]
                                                    ,[modifier]
                                                    ,[modify_date])
                                                VALUES
                                                    (@site
                                                    ,@year_month
                                                    ,@period_type
                                                    ,'NTD'
                                                    ,@work_currency
                                                    ,@start_date
                                                    ,@end_date
                                                    ,@import_rate
                                                    ,@export_rate
                                                    ,@creator
                                                    ,getdate()
                                                    ,@creator
                                                    ,getdate()
                                                    )
                                                    ");
                                command1.Parameters.Add("@site", SqlDbType.NVarChar).Value          = 公司別DDL.SelectedValue;
                                command1.Parameters.Add("@year_month", SqlDbType.NVarChar).Value    = str三巡時間年 + str三巡時間月;
                                command1.Parameters.Add("@period_type", SqlDbType.NVarChar).Value   = str三巡時間巡;
                                command1.Parameters.Add("@work_currency", SqlDbType.NVarChar).Value = dt.Rows[i]["外匯幣別"].ToString();
                                command1.Parameters.Add("@start_date", SqlDbType.DateTime).Value    = dt三巡起;
                                command1.Parameters.Add("@end_date", SqlDbType.DateTime).Value      = dt三巡迄;
                                command1.Parameters.Add("@import_rate", SqlDbType.Decimal).Value    = dt.Rows[i]["買進匯率"].ToString();
                                command1.Parameters.Add("@export_rate", SqlDbType.Decimal).Value    = dt.Rows[i]["賣出匯率"].ToString();
                                command1.Parameters.Add("@creator", SqlDbType.NVarChar).Value       = "104056";

                                command1.ExecuteNonQuery();
                                command1.Parameters.Clear();
                            }



                            transaction1.Commit();
                        }
                        #region 匯入ErrorLog
                        catch (Exception ex1)
                        {
                            try
                            {
                                Log.ErrorLog(ex1, "Import Excel Error :" + Session["FileName"].ToString(), "Finance016.aspx");
                            }
                            catch (Exception ex2)
                            {
                                Log.ErrorLog(ex2, "Insert Error Error:" + Session["FileName"].ToString(), "Finance016.aspx");
                            }
                            finally
                            {
                                transaction1.Rollback();
                                F_ErrorShow("匯入失敗請連絡MIS");
                            }
                        }
                        #endregion
                        finally
                        {
                            conn1.Close();
                            conn1.Dispose();
                            command1.Dispose();
                            Session.RemoveAll();
                            DataGV.DataSource = null;
                            DataGV.DataBind();
                            F_Show(false);
                        }
                    }
                }
            }
            else
            {
                if (Session["ExcelError"] != null)
                {
                    F_ErrorShow("請修正錯誤資料");
                }
                //else if (SearchTB.Text.Trim() != "")
                //    Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "<script>alert('當日已有匯入資料');</script>");
                //else
                //    Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "<script>alert('請選擇匯入日期');</script>");
            }
        }