顯示具有 不分頁 標籤的文章。 顯示所有文章
顯示具有 不分頁 標籤的文章。 顯示所有文章

2023年7月31日 星期一

V40A – [過濾資料]鈕 – 不分頁, 顯示在同一頁 -T1C– 取得 SQL全部資料後, 過濾資料, 再顯示在同一頁 - 重設總筆數

目的: V40A – [過濾資料]顯示在同一頁 取得 SQL全部資料後, 過濾資料, 再顯示在同一頁

處理說明: 1> getGridData_M 取全部資料 , 不分頁(par_paging=false)
                 2> 取得 CaluField  - SAP單況(I0001/I0002/..)         
                 3> 過濾  SAP單況 , 符合條件的保留, 不符合的 dr.delete()
                 4> 傳回符合條件的 ds , 必需修改 ["T1C"]  欄位值(總筆數)
                      ds.Tables["T1C"].Rows[0]["TOTAL"] = ds.Tables["T1"].Rows.Count;
                  5> 不分頁, 全部顯示在同一頁,設定每頁筆數=9999(store.pageSize)
                        Ext.getCmp('grid_Single').store.pageSize = 9999;   
              6>[過濾SAP單況]鈕, 必需將過濾欄位值記錄為[過濾條件欄位(s_Filter_Str)]-隱藏欄位,
                     以便顯示時,依該過濾條件過濾
                     --> [資料顯示]時,再清除該欄位值(s_Filter_Str)    


    1>*.js
//[過濾 SAP單況]鈕
 {
            xtype: 'button', text: '確定', id: 'OkBtn_V40AB',
            listeners: {
                click: function (me, e, eOpts) {
                    //1>更新資料庫資料(AMM_COMPQTY)
                    var Tmp_Str = "";
                    if (!(Ext.getCmp("s_SAPSTAT1").getValue()) && !(Ext.getCmp("s_SAPSTAT2").getValue()) && !(Ext.getCmp("s_SAPSTAT3").getValue())) {
                        Tmp_Str = "SAP單況不可均不勾選<br>"
                            + " 敬請檢核 !!";
                        mywarnalert(Tmp_Str);
                        return;
                    }
                    var Tmp_Filter_Str = "";
                    if (Ext.getCmp("s_SAPSTAT1").getValue()) {
                        Tmp_Filter_Str = Tmp_Filter_Str + "I0001" + ",";
                    }
                    if (Ext.getCmp("s_SAPSTAT2").getValue()) {
                        Tmp_Filter_Str = Tmp_Filter_Str + "E0014" + "," + "E0015" + ",";
                    }
                    if (Ext.getCmp("s_SAPSTAT3").getValue()) {
                        Tmp_Filter_Str = Tmp_Filter_Str + "I0002" + ",";
                    }
                    if (checkisnull(Tmp_Filter_Str)) {
                        Tmp_Filter_Str = Tmp_Filter_Str.substr(0, Tmp_Filter_Str.length - 1);
                    }
                    // 重新顯示 - 全部顯示在同一頁
                    var np = s_JSON('s_form'); //TMFunction.js, 組合form上的查詢條件為json參數傳遞      
                    np["s_isSAPSTAT"] = Ext.getCmp('s_isSAPSTAT').getValue();
                    np["s_TYPEAF"] = Ext.getCmp('s_TYPEAF').getValue();
                    np["s_Filter_Str"] = Tmp_Filter_Str;
                    //console.log('1 gridstore: ', gridstore);
                    var gridstore = Ext.getCmp('grid_Single').store;                            
                    gridstore.getProxy().url = '../api/V40AAPI/getGridData_M?par_paging=false';
                    gridstore.getProxy().extraParams = np; //分頁OK,篩選條件OK                            
                    Ext.getCmp('grid_Single').store.pageSize = 9999;                        
                    Ext.getCmp('grid_Single').reloadGridData();      
                    this.up("window").close();
                    this.up("window").destroy();
                }
            },
        },


//[顯示資料]鈕, 一般正常分頁顯示
  {
                        xtype: 'button',
                        id: 'btn_Show',
                        flex: 2,
                        border: 1,
                        text: '資料顯示',
                        iconCls: 'icon-search',
                        handler: function () {
                            // 更新 STP欄位值                            
                       var np = s_JSON('s_form'); //TMFunction.js, 組合form上的查詢條件為json參數傳遞  
                            np["s_isSAPSTAT"] = Ext.getCmp('s_isSAPSTAT').getValue();
                            np["s_TYPEAF"] = Ext.getCmp('s_TYPEAF').getValue();
                            np["s_Filter_Str"] = "";   //[過濾SAP單況]鈕,才會有值過濾SAP單況條件空白
                            //console.log('1 gridstore: ', gridstore);
                            //var gridstore = Ext.getCmp('grid_Single').store;                            
                            gridstore.getProxy().url = '../api/V40AAPI/getGridData_M';
                            gridstore.getProxy().extraParams = np; //分頁OK,篩選條件OK                            
                            Ext.getCmp('grid_Single').store.pageSize = 30;
                            Ext.getCmp('grid_Single').reloadGridData();          
                            
                        }
                    },  // end of 顯示資料

2>V40A*.cs
  [HttpPost]
        public dynamic getGridData_M(bool par_paging = true)
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;

            //panel1
            string Tmp_AMMNO = nvc["s_AMMNO"];
            string Tmp_SAPNO = nvc["s_SAPNO"];
            string Tmp_WBSNO = nvc["s_WBSNO"];
            string Tmp_PN = nvc["s_PN"];
            //panel2
            string Tmp_OGONOAF = nvc["s_OGONOAF"];  //拆檢提領編號
            string Tmp_NGONOAF = nvc["s_NGONOAF"]; //維修提領編號
            string Tmp_MRPNOAF = nvc["s_MRPNOAF"];  //拆檢交修編號
            string Tmp_RPNOAF = nvc["s_RPNOAF"];  //維修交修編號
            //panel3
            string Tmp_SAPMAN = nvc["s_SAPMAN"];
            string Tmp_FIXSN = nvc["s_FIXSN"];
            string Tmp_CREMPLYID = nvc["s_CREMPLYID"];
            string Tmp_FACWC = nvc["s_FACWC"];
            //panel4
            string Tmp_isSAPSTAT = nvc["s_isSAPSTAT"];   //料號
            string Tmp_TYPEAF = nvc["s_TYPEAF"];   //'3'/'4' : 拆檢約/維條約
            string Tmp_Filter_Str = nvc["s_Filter_Str"];  //過濾 SAP單況
            string Tmp_SAPDT1 = "";   //發工日期  - 起迄
            string Tmp_SAPDT2 = "";   //發工日期  - 起迄
            if (!myfunc.checkisnull(nvc["s_SAPDT1"]))
            {
                Tmp_SAPDT1 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_SAPDT1"]));
            };
            if (!myfunc.checkisnull(nvc["s_SAPDT2"]))
            {
                Tmp_SAPDT2 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_SAPDT2"]));
            };
            OracleCommand cmd = new OracleCommand();
            string Tmp_Sql = " SELECT  RNK,     "
                                       + "   AMMNO,SAPNO,PN,FIXSN,PNNAME,SAPMAN,SAPDT,WBS,QTY,UNIT, "
                                       + "    FMNO,OGONOAF,NGONOAF,MRPNOAF,RPNOAF,TYPEAF,FACWC,"
                                       + "     CREMPLYID,NEMPID,MEMPID  "
                                       + "  FROM  ( "
                                      + "   SELECT    dense_rank()  over(order by  A.AMMNO,B.FMNO) as RNK,"
                       + "   A.AMMNO,A.SAPNO,A.PN,A.FIXSN,A.PNNAME,A.SAPMAN,A.SAPDT,A.WBS, A.QTY,A.UNIT, "
                       + "   B.FMNO,B.OGONOAF,B.NGONOAF,B.MRPNOAF,B.RPNOAF,B.TYPEAF,B.FACWC, "
                                                     + "   B.CREMPLYID,B.NEMPID,B.MEMPID "
                                      + "  FROM    AMM_SRO A, AMM_FM B "
                                      + "  WHERE  A.AMMNO=B.AMMNO   "
                                      + "   AND       A.AMMSTS  NOT  IN ('A','B','F','G','H','I','W','X','Y','Z')  "
                                      + "   AND      A.SAPNO   IS NOT NULL  "
                                      + "   AND     A.ISSYS='Y'   ";
            //AMM單號
            if (!myfunc.checkisnull(Tmp_AMMNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.AMMNO  = " + myfunc.AA(Tmp_AMMNO);
            };
            //工號
            if (!myfunc.checkisnull(Tmp_SAPNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.SAPNO=" + myfunc.AA(Tmp_SAPNO);
            };
            //WBS
            if (!myfunc.checkisnull(Tmp_WBSNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.WBS  LIKE  " + myfunc.AA("%"+Tmp_WBSNO+"%");
            };
            //件號
            if (!myfunc.checkisnull(Tmp_PN))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.PN   LIKE   " + myfunc.AA("%" + Tmp_PN+"%");
            };

            //拆檢提領編號
            if (!myfunc.checkisnull(Tmp_OGONOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND   B.OGONOAF  LIKE " + myfunc.AA('%' + Tmp_OGONOAF + '%');
            };
            //維修提領編號
            if (!myfunc.checkisnull(Tmp_NGONOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND   B.NGONOAF  LIKE " + myfunc.AA('%' + Tmp_NGONOAF + '%');
            };
            //拆檢交修單號
            if (!myfunc.checkisnull(Tmp_RPNOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND   B.RPNOAF  LIKE " + myfunc.AA('%' + Tmp_RPNOAF + '%');
            };
            //維修交修單號
            if (!myfunc.checkisnull(Tmp_MRPNOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND   B.MRPNOAF  LIKE " + myfunc.AA('%' + Tmp_MRPNOAF + '%');
            };

            //發工人員
            if (!myfunc.checkisnull(Tmp_SAPMAN))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.SAPMAN=" + myfunc.AA(Tmp_SAPMAN);
            };
            //維修件序號
            if (!myfunc.checkisnull(Tmp_FIXSN))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.FIXSN  LIKE " + myfunc.AA("%"+Tmp_FIXSN+ "%");
            };
            //管制人員
            if (!myfunc.checkisnull(Tmp_CREMPLYID))
            {
                Tmp_Sql = Tmp_Sql + " AND   B.CREMPLYID=" + myfunc.AA(Tmp_CREMPLYID);
            };
            //承修工場
            if (!myfunc.checkisnull(Tmp_FACWC))
            {
                Tmp_Sql = Tmp_Sql + " AND   B.FACWC= " + myfunc.AA(Tmp_FACWC);
            };

            //約別
            if (!myfunc.checkisnull(Tmp_TYPEAF))
            {

                Tmp_Sql = Tmp_Sql + " AND   B.TYPEAF  IN  (" + myfunc.AddQuoteStr(Tmp_TYPEAF)+")";
            };
            string Tmp_Sql1 = "";
            //發工日期 - 起  - 迄
            if ((!myfunc.checkisnull(Tmp_SAPDT1)) || (!myfunc.checkisnull(Tmp_SAPDT2)))
            {
                if (!myfunc.checkisnull(Tmp_SAPDT1))
                {
                    Tmp_Sql1 = Tmp_Sql1 + "  AND        SAPDT>=" + myfunc.AA(Tmp_SAPDT1);
                };
                if (!myfunc.checkisnull(Tmp_SAPDT2))
                {
                    Tmp_Sql1 = Tmp_Sql1 + "  AND        SAPDT<=" + myfunc.AA(Tmp_SAPDT2);
                }
                Tmp_Sql = Tmp_Sql + Tmp_Sql1;
            };
            Tmp_Sql = Tmp_Sql + "   )   ";

            cmd.CommandText = Tmp_Sql;
            string countSql = " SELECT COUNT(*) as total FROM (" + Tmp_Sql + ")";
            //匯出時 ,取全部資料, par_paging =false
            DataSet ds = getDataTable(cmd, countSql, par_paging);

            //////新增  CaluField 欄位 
            //- [約別(TYPEAF) ]            
            Tmp_Sql = " select    KEY_CODE as  TYPEAF, DESCPT "
                           + " from      KEYCODE  "
                           + "  where   TBL_NAME = 'AMM_FM'  "
                           + "  and        KEY_NAME = 'TYPEAF'   ";
            getKeyCode("TYPEAF", ref ds, Tmp_Sql);

            ////新增  CaluField [SAP工單單況_(AMM_SRO.SAPSTAT_)]
            int Tmp_Cnt = ds.Tables["T1"].Rows.Count;
            ds.Tables["T1"].Columns.Add(new DataColumn("SAPMAN_", typeof(string)));
            ds.Tables["T1"].Columns.Add(new DataColumn("CREMPLYID_", typeof(string)));
            ds.Tables["T1"].Columns.Add(new DataColumn("SAPSTAT_", typeof(string)));
            ds.Tables["T1"].Columns.Add(new DataColumn("SAPSTAT__", typeof(string)));

            string Tmp_SAPMAN_ = "";
            string Tmp_CREMPLYID_ = "";
            string Tmp_SAPNO1 = "";
            string Tmp_SAPNO_ = "";
            string Tmp_SAPSTAT_ = "", Tmp_SAPSTAT__ = "";
            string Tmp_TYPEAF_ = "";
            string Tmp_Str;
            for (int i = 0; i < Tmp_Cnt; i++)
            {
                DataRow dr = ds.Tables["T1"].Rows[i];
                //取得  發工人員/管制人員(SAPMAN/CREMPLYID).姓名
                Tmp_SAPMAN_ = myfunc.getEmp_NM(dr["SAPMAN"].ToString());
                Tmp_CREMPLYID_ = myfunc.getEmp_NM(dr["CREMPLYID"].ToString());
                dr["SAPMAN_"] = Tmp_SAPMAN_;
                dr["CREMPLYID_"] = Tmp_CREMPLYID_;

                //取得 SAP工單狀態(SAPSTAT)
                Tmp_SAPNO1 = dr["SAPNO"].ToString();
                //轉換成 SAP系統的工號
                Tmp_SAPNO_ = myfunc.get_SAPNO(Tmp_SAPNO1, "OR");
                //取得 SAP工號的單況       
                if (Tmp_isSAPSTAT!="true") { //若!="true" , 則不顯示 [SAP工單狀態]
                    dr["SAPSTAT_"] = "";
                    continue;
                }
                Tmp_SAPSTAT_ = ""; Tmp_SAPSTAT__ = "";
                if (!myfunc.checkisnull(Tmp_SAPNO_))
                {
                    //Tmp_Sql = " SELECT  OBJNR,STAT,INACT,CHGNR,UDATE,UTIME "
                    Tmp_Sql = " SELECT    STAT "
                                    + "  FROM     SAPR3.JCDS@SAP  "
                                    + "  WHERE   1 = 1  "
                                    + " AND         MANDT = '999'    "
                                    + " AND         OBJNR = " + myfunc.AA(Tmp_SAPNO_)
                                    + "  AND        INACT = ' '    "
                                    + "  AND        STAT IN('I0001','I0002', 'E0015', 'I0076', 'E0022', 'E0012', 'I0045', 'I0013', 'I0012', 'I0046')  "
                                    + "  AND       (STAT, CHGNR) NOT IN   "
                                                    + "  ( SELECT   STAT, LPAD((to_number(CHGNR)-1),3,0) as CHGNR  "
                                                    + "    FROM     SAPR3.JCDS@SAP  "
                                                    + "   WHERE   1 = 1  "
                                                    + "   AND         MANDT = '999'   "
                                                    + "   AND         OBJNR = " + myfunc.AA(Tmp_SAPNO_)
                                                    + "   AND         INACT = 'X'   "
                                                    + "  AND          STAT IN('I0001','I0002', 'E0015', 'I0076', 'E0022', 'E0012', 'I0045', 'I0013', 'I0012', 'I0046')  "
                                                    + "  )  "
                                    + " ORDER BY UDATE DESC, UTIME DESC   ";
                    Tmp_Str = myfunc.SqlValue(Tmp_Sql);
                    if (Tmp_Str.Length > 0)
                    {
                        Tmp_SAPSTAT_ = myfunc.StrExtract(Tmp_Str, 1, ";");
                        Tmp_SAPSTAT__ = get_SAPSTAT_NM(Tmp_SAPSTAT_);
                    }
                }  //  if (!myfunc.checkisnull(Tmp_SAPNO_))
                dr["SAPSTAT_"] = Tmp_SAPSTAT_;        //SAP單況碼 : I0001/I0002/E0014/E0015
                dr["SAPSTAT__"] = Tmp_SAPSTAT__;  //SAP單況碼說明 : CREATE/RELEASE/ROFF                                                              //[過濾 SAP單況]鈕 , 若欲過濾 SAP單況  --> 即符合的單況才保留,其他刪除
            }  // end of for (int i = 0; i < Tmp_Cnt; i++)
            //[過濾SAP單況]鈕, 處理
            if (Tmp_Filter_Str.Length > 0)
            {
                for (int i = 0; i < Tmp_Cnt; i++)
                {
                    DataRow dr = ds.Tables["T1"].Rows[i];
                    Tmp_SAPSTAT_ = dr["SAPSTAT_"].ToString();                   
                    //若i> 目前的資料數量,則離開
                    if (i >= ds.Tables["T1"].Rows.Count)
                    {
                        break;
                    }
                    if (myfunc.checkisnull(Tmp_SAPSTAT_))
                    {
                        dr.Delete();
                        continue;
                    }
                    if (Tmp_Filter_Str.IndexOf(Tmp_SAPSTAT_) == -1)
                    {
                        dr.Delete();
                    }
                }  // end of for (int i=0;
                //重新設定總筆數
                ds.Tables["T1"].AcceptChanges();
                ds.Tables["T1C"].Rows[0]["TOTAL"] = ds.Tables["T1"].Rows.Count;
            }// end of if (Tmp_Filter_Str.Length > 0)
            
            //var Tmp_Filter = "SAPSTAT__='RELEASE'";
            //ds.Tables["T1"].Select(Tmp_Filter);
                return ds;
        }

2022年8月25日 星期四

V20306 - 套表列印 - 依勾選的資料匯出 - 將目前所選的資料,當成 np參數 , 傳至後端 - SS_FILES

 目的: 畫面的欄位值,直接匯出至套表, 不分頁

處理說明: 1>讀取套表檔案 SS_FILES

                  2>讀取 store 資料匯出至 XLS



1>*.js , 依所勾選的資料匯出轉成 JSONString 當參數, 傳至後端
//查詢  - 將目前所選的資料,匯出成報表
    function LookBtn_click() {
        var Tmp_Grid = Ext.getCmp('grid_Single');
        var cur_recs,cur_rec;
        var Tmp_SAPNO, Tmp_PN, Tmp_QTY, Tmp_EOCND, Tmp_RMK;
        var Tmp_data_JSON = "";  //將store資料轉成 JSON 的字串
        var Tmp_sub_np = {};
        let Tmp_DataAry1 = [];
        var Tmp_Str = "";
        cur_recs = Tmp_Grid.getView().selModel.getSelection();
        console.log("cur_recs:", cur_recs);
        if (cur_recs.length == 0) {
            mywarnalert("請先選擇要查詢的資料");
            return;
        }
        for (var i = 0; i < cur_recs.length; i++) {
            cur_rec = cur_recs[i];
            console.log(Tmp_Str + "cur_rec:", cur_rec);
            Tmp_DataAry1.push(cur_rec.data);
        }

        console.log("Tmp_DataAry1:", Tmp_DataAry1);
        // 將目前子畫面的資料(Table)轉成 JSON字串
        let Tmp_DataString1 = JSON.stringify(Tmp_DataAry1);
        console.log("Tmp_DataString1:", Tmp_DataString1);        
        var np = {};
        np = {
            DataString1: Tmp_DataString1,            
        };
        //Ext.Ajax.request   --> 傳送檔案至前端,不可使用 Ext.Ajax, 必需使用 Form.submit
        Ext.getCmp('s_form').submit({
            url: '../../api/V20306API/DoPRNLIST',
            method: 'POST',
            async: false,
            standardSubmit: true, //若要傳送檔案至前端, standardSubmit必需設為 true  
            params: np,
        });

        //顯示結果訊息..
        var mask = new Ext.LoadMask(Ext.getBody(), {
            msg: '處理中,請稍待...'
        });
        mask.show();//使用 mask 需手動呼叫show() 方法下
        var timer = setInterval(function () {
            clearInterval(timer);
            mask.hide();
            timer = null;
            var r = r_cookies('EX_DFile');
            console.log("r_cookies=", r);
            if (!checkisnull(r)) {
                mysuccessalert(r);
            }
        }, 5000);  //3000ms = 3sec
    }  // end of  function LookBtn_click() {





2>*.cs - 依傳入的資料參數, 匯出至 XLS

//加入JSON格式轉換參考 , JsonConvert 必需使用如下  library
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

//查詢 - 將所選的資料匯出至 xls - 套表
[HttpPost]

public void DoPRNLIST()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            // 1>將 SS_FILES.FBOLD 存成 Local檔案
            //取得目前子畫面的欄位值
string Tmp_DataString1 = nvc["DataString1"];  //取得目前子畫面的資料. JSON字串   
            //將 table 字串轉成 DataTable
            //DataTable DataTable1 = (DataTable)JsonConvert.DeserializeObject(Tmp_DataString1, (typeof(DataTable)));
            DataTable DataTable1 = myfunc.JSON2dt(Tmp_DataString1);
            
            OracleConnection conn = new OracleConnection(DBService.ConnectionString(DBLINK));//
            OracleCommand cmd = new OracleCommand();
            //OracleDataAdapter adp = new OracleDataAdapter();
            //DataSet ds = new DataSet();
            //var response = Request.CreateResponse();
            conn.Open();
            conn.ClientInfo = User.Identity.Name;
            conn.ModuleName = BaseSYS + "_" + BaseMODID;
            conn.ActionName = ActionName;
            cmd.Connection = conn;
            string Tmp_Sql = "";
            string Tmp_Str = "";
            string Tmp_Str1 = "";
            string Tmp_RtnMsg;
            string Tmp_FName = "V20306_列印報表.xlsx";      //套表的檔案名稱 , 
            string documentPath = HttpContext.Current.Server.MapPath("~") + "document\\";  // 取得實實的路徑            
            string pathFName = documentPath + Tmp_FName;
            //需要擷取大量資料時,DataReader 是很好的選擇,因為資料不會快取至記憶體。
            OracleDataReader reader;
            Workbook wk = null;
            MemoryStream mstream = new MemoryStream();
            string FileName = "V20306_列印報表_" + DateTime.Now.ToString("yyyyMMdd") + ".xlsx";
            string FileName1 = documentPath + FileName;
            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();
                    }
                }
                //2 > 主機.Local檔案 XLS 讀入  FStream
                Worksheet ws = wk.Worksheets[0];//獲取第一個工作表
                //寫入[SAPNO][PN][QTY][EOCND][RMK]
                string Tmp_ASPNO, Tmp_RPNOAF, Tmp_LCNO, Tmp_LRWET_;
                string Tmp_MCNM, Tmp_ORDID_, Tmp_PCTP, Tmp_FICNMA, Tmp_STLCT;
                string Tmp_PCQTY,Tmp_ASLV,Tmp_ASPRMK,Tmp_NGONOAF,Tmp_PN;
                string Tmp_LCITM, Tmp_LCETDT, Tmp_LCCHID_, Tmp_LCORAO, Tmp_LRULT;
                string Tmp_LRUWT, Tmp_LRUHG,Tmp_WTLV,Tmp_ITPR;                
                //每筆資料列印後, 不分頁列印下一筆
                for (var i = 0; i < DataTable1.Rows.Count; i++)
                {
                    Tmp_ASPNO = DataTable1.Rows[i]["ASPNO"].ToString();
                    Tmp_RPNOAF = DataTable1.Rows[i]["RPNOAF"].ToString();
                    Tmp_LCNO = DataTable1.Rows[i]["LCNO"].ToString();
                    //直接取得畫面.CaluField欄位值        
                    Tmp_LRWET_ = DataTable1.Rows[i]["LRWET_"].ToString();//系統件重量說明

                    Tmp_ORDID_ = DataTable1.Rows[i]["ORDID_"].ToString();  //訂購者姓名
                    Tmp_MCNM = DataTable1.Rows[i]["MCNM"].ToString();
                    Tmp_PCTP = DataTable1.Rows[i]["PCTP"].ToString();
                    Tmp_FICNMA = DataTable1.Rows[i]["FICNMA"].ToString();
                    Tmp_STLCT = DataTable1.Rows[i]["STLCT"].ToString();
                    Tmp_PCQTY = DataTable1.Rows[i]["PCQTY"].ToString();
                    Tmp_ASLV = DataTable1.Rows[i]["ASLV"].ToString();
                    Tmp_ASPRMK = DataTable1.Rows[i]["ASPRMK"].ToString();
                    Tmp_NGONOAF = DataTable1.Rows[i]["NGONOAF"].ToString();
                    Tmp_PN = DataTable1.Rows[i]["PN"].ToString();
                    Tmp_LCITM = DataTable1.Rows[i]["LCITM"].ToString();
                    Tmp_LCETDT = DataTable1.Rows[i]["LCETDT"].ToString();
                    Tmp_LCCHID_ = DataTable1.Rows[i]["LCCHID_"].ToString();
                    Tmp_LCORAO = DataTable1.Rows[i]["LCORAO"].ToString();
                    Tmp_LRULT = DataTable1.Rows[i]["LRULT"].ToString();
                    Tmp_LRUWT = DataTable1.Rows[i]["LRUWT"].ToString();
                    Tmp_LRUHG = DataTable1.Rows[i]["LRUHG"].ToString();
                    Tmp_WTLV = DataTable1.Rows[i]["WTLV"].ToString();
                    Tmp_ITPR = DataTable1.Rows[i]["ITPR"].ToString();
                    //GetExcelPos(欄, 行) 以 0 開始, 
                    ws.Range[myfunc.GetExcelPos(0, i+1)].Text = Tmp_ASPNO;
                    ws.Range[myfunc.GetExcelPos(1, i+1)].Text = Tmp_RPNOAF;
                    ws.Range[myfunc.GetExcelPos(2, i + 1)].Text = Tmp_LCNO;
                    ws.Range[myfunc.GetExcelPos(3, i + 1)].Text = Tmp_LRWET_;                    
                    ws.Range[myfunc.GetExcelPos(4, i + 1)].Text = Tmp_MCNM;
                    ws.Range[myfunc.GetExcelPos(5, i + 1)].Text = Tmp_ORDID_;
                    ws.Range[myfunc.GetExcelPos(6, i + 1)].Text = Tmp_PCTP;
                    ws.Range[myfunc.GetExcelPos(7, i + 1)].Text = Tmp_FICNMA;
                    ws.Range[myfunc.GetExcelPos(8, i + 1)].Text = Tmp_STLCT;
                    ws.Range[myfunc.GetExcelPos(9, i + 1)].Text = Tmp_PCQTY;
                    ws.Range[myfunc.GetExcelPos(10, i + 1)].Text = Tmp_ASLV;
                    ws.Range[myfunc.GetExcelPos(11, i + 1)].Text = Tmp_ASPRMK;
                    ws.Range[myfunc.GetExcelPos(12, i + 1)].Text = Tmp_NGONOAF;
                    ws.Range[myfunc.GetExcelPos(13, i + 1)].Text = Tmp_PN;
                    ws.Range[myfunc.GetExcelPos(14, i + 1)].Text = Tmp_LCITM;
                    ws.Range[myfunc.GetExcelPos(15, i + 1)].Text = Tmp_LCETDT;
                    ws.Range[myfunc.GetExcelPos(16, i + 1)].Text = Tmp_LCCHID_;
                    ws.Range[myfunc.GetExcelPos(17, i + 1)].Text = Tmp_LCORAO;
                    ws.Range[myfunc.GetExcelPos(18, i + 1)].Text = Tmp_LRULT;
                    ws.Range[myfunc.GetExcelPos(19, i + 1)].Text = Tmp_LRUWT;
                    ws.Range[myfunc.GetExcelPos(20, i + 1)].Text = Tmp_LRUHG;
                    ws.Range[myfunc.GetExcelPos(21, i + 1)].Text = Tmp_WTLV;
                    ws.Range[myfunc.GetExcelPos(22, i + 1)].Text = Tmp_ITPR;
                }
                
                wk.SaveToStream(mstream, FileFormat.Version2007);
                wk.SaveToFile(FileName1, FileFormat.Version2007);
                //wk.SaveToStream(mstream, FileFormat.Version2013);
                //wk.SaveToFile(FileName1, FileFormat.Version2013);                
            }
            catch (Exception e)
            {
                var Tmp_ErrMsg = e.Message;
            }
            finally
            {                
                wk.Dispose();
                conn.Close();
            }
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode((string)FileName, System.Text.Encoding.UTF8) + "\"");
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
            HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            HttpContext.Current.Response.BinaryWrite(mstream.ToArray());
            //包裝標籤檔產生完成
            Tmp_Str = "產生包裝匯出檔案成功<br>"
                            + "(" + FileName + ")<br>";
            HttpCookie MyCookie = new HttpCookie("EX_DFile", HttpUtility.UrlEncode(Tmp_Str));
            HttpContext.Current.Response.Cookies.Add(MyCookie);
            HttpContext.Current.Response.End();
        }  // end of public void DoPRNLIST()