/// <summary> /// Export return 1 txt & 1 excel /// </summary> /// <returns></returns> protected override ResultStatus Export() { try { //0. ready panFilter.Enabled = false; labMsg.Visible = true; ShowMsg("開始轉檔..."); this.Cursor = Cursors.WaitCursor; this.Refresh(); Thread.Sleep(5); //1. 寫資料到文字檔 bool isText = false; isText = wf_40140_1(); //2. 複製、開啟檔案(wf_40140_2) ShowMsg("40140_2-保證金比較 轉檔中..."); Workbook workbook = new Workbook(); string excelDestinationPath = PbFunc.wf_copy_file(_ProgramID, _ProgramID); workbook.LoadDocument(excelDestinationPath); Worksheet worksheet = workbook.Worksheets[0]; //2.1 填資料 DataTable dt = new D40140().ListMoneyData(txtStartDate.DateTimeValue); if (dt.Rows.Count <= 0) { MessageDisplay.Info(string.Format("{0},讀取「國外保證金資料」無任何資料!", txtStartDate.Text), GlobalInfo.ResultText); File.Delete(excelDestinationPath); return(ResultStatus.Fail); }//if (dt.Rows.Count <= 0 ) //wf_40140_2() foreach (DataRow dr in dt.Rows) { int rptSeqNo = dr["rpt_seq_no"].AsInt(); string com = dr["com"].AsString(); decimal mg1Cm = dr["mg1_cm"].AsDecimal(); decimal mg1Mm = dr["mg1_mm"].AsDecimal(); decimal mg1Im = dr["mg1_im"].AsDecimal(); decimal exchangeRate = dr["exchange_rate"].AsDecimal(); decimal mg1Price = dr["mg1_price"].AsDecimal(); decimal mg1Xxx = dr["mg1_xxx"].AsDecimal(); rptSeqNo += 2; worksheet.Cells[3, rptSeqNo - 1].Value = mg1Cm; worksheet.Cells[4, rptSeqNo - 1].Value = mg1Mm; worksheet.Cells[5, rptSeqNo - 1].Value = mg1Im; if (com == "TOC01") { if (exchangeRate != 0) { worksheet.Cells[6, rptSeqNo - 1].Value = mg1Im / exchangeRate * 3.11m; }//if (exchangeRate != 0) worksheet.Cells[7, rptSeqNo - 1].Value = mg1Price * mg1Xxx; } else { worksheet.Cells[7, rptSeqNo - 1].Value = mg1Price * mg1Xxx; } //if (com == "TOC01") } //foreach (DataRow dr in dt.Rows) //3. 關閉、儲存檔案 workbook.SaveDocument(excelDestinationPath); labMsg.Visible = false; #if DEBUG if (FlagAdmin) { System.Diagnostics.Process.Start(excelDestinationPath); } #endif return(ResultStatus.Success); } catch (Exception ex) { WriteLog(ex); } finally { panFilter.Enabled = true; labMsg.Text = ""; labMsg.Visible = false; this.Cursor = Cursors.Arrow; } return(ResultStatus.Fail); }
/// <summary> /// 寫資料到文字檔 /// </summary> /// <returns></returns> protected bool wf_40140_1() { try { //1.1.ready panFilter.Enabled = false; labMsg.Visible = true; labMsg.Text = "40141-文字說明 轉檔中..."; this.Cursor = Cursors.WaitCursor; this.Refresh(); Thread.Sleep(5); //1.2 get txt data string txt = ""; int pos = 0; string strIm = ""; //dtGold 黃金期貨 DataTable dtGold = new D40140().GetGoldData(txtStartDate.DateTimeValue); //d_40140_1_mg1 if (dtGold.Rows.Count <= 0) { MessageDisplay.Info(string.Format("{0},無任何「調整黃金期貨契約」資料!", txtStartDate.Text), GlobalInfo.ResultText); return(false); } int dataGoldNum = dtGold.Rows.Count; //dt 國外保證金 DataTable dt = new D40140().ListMoneyData(txtStartDate.DateTimeValue); if (dt.Rows.Count <= 0) { MessageDisplay.Info(string.Format("{0},讀取「國外保證金資料」無任何資料!", txtStartDate.Text), GlobalInfo.ResultText); return(false); } foreach (DataRow dr in dt.Rows) { pos++; string com = dr["com"].AsString(); decimal outIm = dr["out_im"].AsDecimal(); decimal exchangeRate = dr["exchange_rate"].AsDecimal(); decimal mg1Im = dr["mg1_im"].AsDecimal(); dr.BeginEdit(); if (com == "TOC01" && exchangeRate > 0) { dr["out_im"] = Math.Round((mg1Im / exchangeRate * 3.11m), 0, MidpointRounding.AwayFromZero); } else { dr["out_im"] = mg1Im; } //if (com == "TOC01" && exchangeRate > 0) dr.BeginEdit(); } //foreach (DataRow dr in dtGold.Rows) dt.AcceptChanges(); //這樣才會更新修改的dt資料 txt += "二、保證金調整之合理性" + Environment.NewLine + "依結算保證金訂定公式計算," + PbFunc.f_conv_date(txtStartDate.DateTimeValue, 3); pos = 0; foreach (DataRow drGold in dtGold.Rows) { pos++; string abbrName = drGold["mgt2_abbr_name"].AsString(); decimal mgd2ChangeRate = drGold["mgd2_adj_rate"].AsDecimal(); if (pos > 1) { txt += ";"; } txt += abbrName + "結算保證金之變動幅度為" + Math.Round(mgd2ChangeRate * 100, 1, MidpointRounding.AwayFromZero).AsString() + "%"; }//foreach (DataRow dr in dtGold.Rows) txt += ",其變動幅度達百分之十以上且進位後金額改變,依上開規定,經保證金調整審議會議決議後調整保證金。" + Environment.NewLine; //1.3 GDF if (dtGold.Rows.Count > 0) { DataTable dtGDF = dtGold.Filter("mgd2_kind_id='GDF'"); strIm = dtGold.Rows[0]["mgd2_im"].AsDecimal().AsString(); if (dtGDF.Rows.Count > 0) { decimal mgd2Im = dtGDF.Rows[0]["mgd2_im"].AsDecimal(); decimal mgd2CurCm = dtGDF.Rows[0]["mgd2_cur_cm"].AsDecimal(); decimal mgd2Cm = dtGDF.Rows[0]["mgd2_cm"].AsDecimal(); string mgt2AbbrName = dtGDF.Rows[0]["mgt2_abbr_name"].AsString(); txt += "本次調整將美元計價" + mgt2AbbrName + "結算保證金金額由原先" + string.Format("{0:N0}", Math.Round(mgd2CurCm, 0, MidpointRounding.AwayFromZero)) + "美元向"; if (mgd2CurCm > mgd2Cm) { txt += "下"; } else { txt += "上"; } //if (mg1CurCm > mg1Cm) txt += "調整為" + string.Format("{0:N0}", mgd2Cm) + "美元,比例約為"; if (mgd2CurCm > 0) { txt += (Math.Round((mgd2Cm - mgd2CurCm) / mgd2CurCm * 100, 1, MidpointRounding.AwayFromZero)).AsString() + "%"; } //if (mg1CurCm > 0) } //if (dtGold.Rows.Count > 0) } //1.4 TGF if (dtGold.Rows.Count > 0) { DataTable dtTGF = dtGold.Filter("mgd2_kind_id='TGF'"); if (dtTGF.Rows.Count > 0) { decimal mgd2CurCm = dtTGF.Rows[0]["mgd2_cur_cm"].AsDecimal(); decimal mgd2Cm = dtTGF.Rows[0]["mgd2_cm"].AsDecimal(); string mgt2AbbrName = dtTGF.Rows[0]["mgt2_abbr_name"].AsString(); if (dataGoldNum > 0) { txt += ";"; } txt += "新臺幣計價" + mgt2AbbrName + "結算保證金金額由原先" + string.Format("{0:N0}", Math.Round(mgd2CurCm, 0, MidpointRounding.AwayFromZero)) + "元向"; if (mgd2CurCm > mgd2Cm) { txt += "下"; } else { txt += "上"; } //if (mg1CurCm > mg1Cm) txt += "調整為" + string.Format("{0:N0}", mgd2Cm) + "元,比例約為"; if (mgd2CurCm > 0) { txt += (Math.Round((mgd2Cm - mgd2CurCm) / mgd2CurCm * 100, 1, MidpointRounding.AwayFromZero)).AsString() + "%"; } //if (mg1CurCm > 0) } //if (dtGold.Rows.Count > 0) txt += "。茲將調整後本公司黃金期貨契約結算保證金金額,相較於世界主要交易所黃金期貨保證金金額分析如下:(詳如后附表)" + Environment.NewLine; } //1.5 if (dt.Rows.Count > 0) { txt += "1.本公司黃金期貨契約保證金"; DataTable dtSmallstrIm = dt.Filter("out_im <" + strIm + " and data_type='2'"); if (dtSmallstrIm.Rows.Count > 0) { txt += "較"; pos = 0; foreach (DataRow dr in dtSmallstrIm.Rows) { pos++; string fName = dr["f_name"].AsString(); txt += fName; if (pos == dtSmallstrIm.Rows.Count - 1) { txt += "及"; } else if (pos == dtSmallstrIm.Rows.Count) { // } else { txt += "、"; } //if (pos == dt.Rows.Count - 1) } //foreach (DataRow dr in dt.Rows) txt += "略高,"; }//if (dt.Rows.Count > 0) DataTable dtBigstrIm = dt.Filter("out_im >" + strIm + " and data_type='2'"); if (dtBigstrIm.Rows.Count > 0) { txt += "較"; pos = 0; foreach (DataRow dr in dtBigstrIm.Rows) { pos++; string fName = dr["f_name"].AsString(); txt += fName; if (pos == dtBigstrIm.Rows.Count - 1) { txt += "及"; } else if (pos == dtBigstrIm.Rows.Count) { // } else { txt += "、"; } //if (pos == dt.Rows.Count - 1) } //foreach (DataRow dr in dt.Rows) txt += "略低,"; }//if (dt.Rows.Count > 0) txt += "應和各交易所風控機制與交易時間等因素相關" + Environment.NewLine; DataTable dtNYM01 = dt.Filter("com='NYM01'"); if (dtNYM01.Rows.Count > 0) { string fName = dtNYM01.Rows[0]["f_name"].AsString(); Decimal mg1Cm = dtNYM01.Rows[0]["mg1_cm"].AsDecimal(); Decimal mg1Im = dtNYM01.Rows[0]["mg1_im"].AsDecimal(); txt += "經查目前" + fName + "黃金期貨契約(契約規格100盎司)結算保證金為" + string.Format("{0:N0}", Math.Round(mg1Cm, 0, MidpointRounding.AwayFromZero)) + "美元,原始保證金為" + string.Format("{0:N0}", Math.Round(mg1Im, 0, MidpointRounding.AwayFromZero)) + "美元;"; } //if (dt.Rows.Count > 0) DataTable dtCME01 = dt.Filter("com='CME01'"); if (dtCME01.Rows.Count > 0) { string fName = dtCME01.Rows[0]["f_name"].AsString(); Decimal mg1Cm = dtCME01.Rows[0]["mg1_cm"].AsDecimal(); Decimal mg1Im = dtCME01.Rows[0]["mg1_im"].AsDecimal(); txt += "而" + fName + "黃金期貨契約(契約規格100盎司)結算保證金為" + string.Format("{0:N0}", Math.Round(mg1Cm, 0, MidpointRounding.AwayFromZero)) + "美元,原始保證金為" + string.Format("{0:N0}", Math.Round(mg1Im, 0, MidpointRounding.AwayFromZero)) + "美元;"; } //if (dt.Rows.Count > 0) DataTable dtTOC01 = dt.Filter("com='TOC01'"); if (dtTOC01.Rows.Count > 0) { string fName = dtTOC01.Rows[0]["f_name"].AsString(); Decimal exchangeRate = dtTOC01.Rows[0]["exchange_rate"].AsDecimal(); Decimal mg1Im = dtTOC01.Rows[0]["mg1_im"].AsDecimal(); txt += "另" + fName + "所收取之原始保證金金額,倘調整契約規格並依匯率(原契約規格1公斤並以" + string.Format("{0:N0}", Math.Round(exchangeRate, 0, MidpointRounding.AwayFromZero)) + "日圓對1美元計算)及重量單位(100盎司=3.11公斤)換算後,約為"; if (exchangeRate > 0) { txt += string.Format("{0:N0}", Math.Round((mg1Im / exchangeRate * 3.11m), 0, MidpointRounding.AwayFromZero)).AsString(); }//if (exchangeRate > 0) txt += "美元。"; } //if (dt.Rows.Count > 0) txt += "有關各交易所保證金占契約總值比率詳附表。" + Environment.NewLine; } //2.save string to txt string fileName = "40141_" + DateTime.Now.ToString("yyyy.MM.dd-HH.mm.ss") + ".txt"; string filePath = Path.Combine(GlobalInfo.DEFAULT_REPORT_DIRECTORY_PATH, fileName); bool IsSuccess = ToText(txt, filePath, System.Text.Encoding.GetEncoding(950)); if (!IsSuccess) { MessageDisplay.Error("文字檔「" + filePath + "」Open檔案錯誤!", GlobalInfo.ErrorText); return(false); } if (FlagAdmin) { System.Diagnostics.Process.Start(filePath); } return(true); } catch (Exception ex) { WriteLog(ex); return(false); } }