2024年8月21日 星期三

V80202I: 整機抽換紀錄匯出- 匯出, 套表 / V80202K: F16V_CHECK - 匯出, 不套表 - 簡單子畫面 - 顯示等待訊息

 目的: V80202I: 整機抽換紀錄匯出- 匯出XLS, 套表 

            V80202K: F16V_CHECK - 匯出XLS, 不套表(直接填寫報表標題)

處理說明: 1>匯出套表  - V80202I: 整機抽換紀錄匯出            (SS_FILES)
                  2>匯出不套表  -  V80202K: F16V_CHECK匯出     (直接寫XLS欄位標題)


一.套表 - 匯出 xls
1>*.js
// 專案別(PROJID)
    var cmp_sub_PROJID = get_cmp_txt1('專案別', 'sub_PROJID', 80, 110);
    var cmp_pick_sub_PROJID = get_pick_btn0('挑選專案別', 'sub_btn_PROJID',
        '../api/V80202IAPI/get_sub_PROJIDPick',
        ['PROJID'], ['sub_PROJID'], J_pickstore_sub_PROJID, J_pickcolumns_sub_PROJID);
    cmp_sub_PROJID.items.push(cmp_pick_sub_PROJID);

      var np = {};
      np["PROJID"] = Ext.getCmp("sub_PROJID").getValue();                        
      np["ACNO_"] = Ext.getCmp("sub_ACNO_").getValue();                                            

             Ext.getCmp('s_form').submit({      
                        url: '../../api/V80202IAPI/XlsOut',
                        method: 'POST',
                        async: false,
                        standardSubmit: true, //若要傳送檔案至前端, standardSubmit必需設為 true  
                        params: np,
                    });

                    //顯示結果訊息..
                    var mask = new Ext.LoadMask(Ext.getBody(), {
                        msg: '處理中,請稍待...'
                    });

                    mask.show();//使用 mask 需手動呼叫show() 方法下
                    //每1秒檢核一次,是否已完成, 若已完成,則不再檢核
                    var timer = setInterval(function () {
                        var r = r_cookies('EX_DFile');
                        //console.log("r_cookies=", r);
                        if (!checkisnull(r)) {
                            mysuccessalert(r);
                            clearInterval(timer);
                            mask.hide();
                            timer = null;
                        }
                    }, 1000);  //1000ms = 1sec
                }  // end of  function Call_V120602B() {

2>*.cs
// 1>將 SS_FILES.FBOLD 存成 Local檔案  - 因為需讀取 BODY , 所以需 conn , 透過 reader 讀取
            OracleConnection conn = new OracleConnection(DBService.ConnectionString(DBLINK));//
            OracleCommand cmd = new OracleCommand();
            conn.Open();
            conn.ClientInfo = User.Identity.Name;
            conn.ModuleName = BaseSYS + "_" + BaseMODID;
            conn.ActionName = ActionName;
            cmd.Connection = conn;
            string Tmp_Str = "";                        
            string Tmp_FName = "V80202_整機抽換紀錄_匯出格式.xlsx";      //套表的檔案名稱 , 
            //documentPath = c:\\inetpub\wwwroot\TLS5\TLSWEB_AMM5\document\
            string documentPath = HttpContext.Current.Server.MapPath("~") + "document\\";  // 取得實實的路徑            
            string pathFName = documentPath + Tmp_FName;
            //需要擷取大量資料時,DataReader 是很好的選擇,因為資料不會快取至記憶體。
            OracleDataReader reader;
            Workbook wk = null;
            MemoryStream mstream = new MemoryStream();
            string FileName = "V80202_整機抽換紀錄_匯出格式_" + Tmp_PROJID +"_"+Tmp_ACNO_+ ".xlsx";
            string FileName1 = documentPath + FileName;
            HttpCookie MyCookie;
            try
            {
                wk = new Workbook();
                //1>將  SS_FILES. FBODY , 存至Local目錄.檔案                 
                if (File.Exists(pathFName))
                {
                    File.Delete(pathFName);
                }
                Tmp_Sql = " SELECT  FNAME,FBODY "
                                + " FROM     SS_FILES   "
                                + "   WHERE   1 = 1  "
                                + "  AND         FNAME = " + myfunc.AA(Tmp_FName);
                cmd.CommandText = Tmp_Sql;
                reader = cmd.ExecuteReader();
                byte[] file = null;
                //FileMode.OpenOrCreate: 開啟檔案若無檔案則新增
                //FileAccess.ReadWrite: 允許檔案讀取/寫入
                FileStream fs = File.Open(pathFName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
                BinaryWriter bw = new BinaryWriter(fs);
                if (reader.HasRows)
                {
                    if (reader.Read())
                    {
                        file = (byte[])reader["FBODY"];
                        //fs.Write(file,0,50000);
                        bw.Write(file);
                        wk.LoadFromStream(fs);
                        bw.Close();
                        fs.Close();
                    }
                }




二.不套表 - 匯出 xls
1>*.cs
     wk = new Workbook();
     Worksheet ws = wk.Worksheets[0];//獲取第一個工作表
      //共 6 欄, Card# Noum 區域 工單情況 工號 版本
      //不套表 , 匯出欄位標題
      string[] outFieldArray = { "Card #","Noum","區域", "工單情況", "工號", "版本",};
      for (int i = 0; i < outFieldArray.Length; i++)
       {
         ws.Range[myfunc.GetExcelPos(i, 0)].Text = outFieldArray[i];
       }

      DataTable dt = new DataTable();
      Tmp_Sql = "SELECT   PLANCARD,Noum,ACAREA,STAT,SAPNO,ED,ACNO  "
                               + "  FROM  "
                               +   :  ;   
      dt = myfunc.SqlOpen(dt, Tmp_Sql);
      Tmp_Cnt = dt.Rows.Count;
                //Tmp_Str = "已匯出完成!!  ("+Tmp_Cnt.ToString() +"筆) ";
      for (int i = 0; i < dt.Rows.Count; i++)
                {
                    //Card# Noum 區域 工單情況 工號 版本
                    //PLANCARD,NOUM,ACAREA ,STAT ,SAPNO,ED,ACNO
                    ws.Range[myfunc.GetExcelPos(0, i + 1)].Text = dt.Rows[i]["PLANCARD"].ToString();
                    ws.Range[myfunc.GetExcelPos(1, i + 1)].Text = dt.Rows[i]["NOUM"].ToString();
      


沒有留言:

張貼留言