/// <summary> /// 按下[匯出]按鈕時 /// </summary> /// <returns></returns> protected override ResultStatus Export() { //1.check if (gvKind.DataRowCount <= 0) { MessageDisplay.Normal("選擇的日期必須有契約資訊,請重新選擇日期"); return(ResultStatus.Fail); } //1.1檢查最少必須勾選一筆商品 gvDate.CloseEditor(); //ken,一定要先呼叫這兩個函數,最後點選的那筆才會被記錄起來 gvDate.UpdateCurrentRow(); //ken,一定要先呼叫這兩個函數,最後點選的那筆才會被記錄起來 gvKind.CloseEditor(); //ken,一定要先呼叫這兩個函數,最後點選的那筆才會被記錄起來 gvKind.UpdateCurrentRow(); //ken,一定要先呼叫這兩個函數,最後點選的那筆才會被記錄起來 DataTable dtTemp = (DataTable)gcKind.DataSource; bool haveKind = false; foreach (DataRow drKind in dtTemp.Rows) { if (drKind["CPR_SELECT"].AsString() == "Y") { haveKind = true; break; } } if (!haveKind) { MessageDisplay.Normal("必須勾選一筆契約"); return(ResultStatus.Fail); } if (chkModel.CheckedItemsCount < 1) { MessageDisplay.Error("請至少勾選一種指標種類", GlobalInfo.ErrorText); return(ResultStatus.Fail); } //1.2檢查統計資料是否已經轉入完畢 string FinishedJob = PbFunc.f_get_jsw(_ProgramID, "E", txtEndDate.Text); if (FinishedJob != "Y") { DialogResult chooseResult = MessageDisplay.Choose(string.Format("{0} 統計資料未轉入完畢,是否要繼續?", txtEndDate.Text), MessageBoxDefaultButton.Button2, GlobalInfo.QuestionText); if (chooseResult != DialogResult.Yes) { return(ResultStatus.Fail); } } string kindId = ""; Workbook workbook = new Workbook(); try { //2.開始轉出資料 panFilter.Enabled = panSecond.Enabled = false; labMsg.Visible = true; labMsg.Text = "開始轉檔..."; this.Refresh(); DataTable dtDate = (DataTable)gcDate.DataSource; string startDate = dtDate.Rows[dtDate.Rows.Count - 1]["SDATE"].AsDateTime().ToString("yyyyMMdd"); string endDate = dtDate.Rows[dtDate.Rows.Count - 1]["EDATE"].AsDateTime().ToString("yyyyMMdd"); #region 指標:SMA,EWMA,MAX foreach (CheckedListBoxItem item in chkModel.Items) { if (item.CheckState == CheckState.Unchecked) { continue; } string modelType = ""; string modelName = ""; switch (item.Value) { case "chkSma": modelType = "S"; modelName = "SMA"; break; case "chkEwma": modelType = "E"; modelName = "EWMA"; break; case "chkMax": modelType = "M"; modelName = "MAX"; break; } #region 商品 //每一個商品都會產生一個excel檔案 foreach (DataRow drKind in dtTemp.Rows) { if (drKind["CPR_SELECT"].AsString() != "Y") { continue; } //2.0 get some column data string effDate = drKind["cpr_effective_date"].AsDateTime().ToString("yyyy/MM/dd"); Decimal lastRiskRate = drKind["last_risk_rate"].AsDecimal(0); Decimal riskRateOrg = drKind["cpr_price_risk_rate_org"].AsDecimal(0); kindId = drKind["CPR_KIND_ID"].AsString(); //2.1 copy template xlsx to target path and open string excelDestinationPath = CopyExcelTemplateFile2(_ProgramID, modelName, kindId); workbook.LoadDocument(excelDestinationPath); Worksheet worksheet = workbook.Worksheets["RawData"]; //2.3寫入檔頭[M1:M6] worksheet.Cells[0, 12].Value = kindId; //商品 worksheet.Cells[1, 12].Value = drKind["cpr_effective_date"].AsDateTime(); //日期,最近一次調整日期 if (drKind["cpr_price_risk_rate"] != DBNull.Value) { worksheet.Cells[2, 12].Value = drKind["cpr_price_risk_rate"].AsDecimal();//百分比,現行最小風險價格係數 } if (drKind["last_risk_rate"] != DBNull.Value) { worksheet.Cells[3, 12].Value = drKind["last_risk_rate"].AsDecimal();//百分比,最近一次修改前之最小風險價格係數 } if (drKind["risk_interval"] != DBNull.Value) { worksheet.Cells[4, 12].Value = drKind["risk_interval"].AsDecimal(); //百分比,最小風險價格係數級距 } worksheet.Cells[5, 12].Value = DateTime.Today; //日期,作業日期 //2.4讀取子table data (mg1_ymd/mg1_risk/mg1_min_risk) DataTable dtSingleKind = dao48040.ListKindByKindId(kindId, startDate, endDate, modelType); if (dtSingleKind.Rows.Count <= 0) { File.Delete(excelDestinationPath); //workbook.SaveDocument(excelDestinationPath);//存檔 labMsg.Text += string.Format("{0},{1}~{2}無任何資料!\r\n", kindId, startDate, endDate); this.Refresh(); continue; } #region //2.5寫入五段日期基本資訊[F2:J6] int rowIndex = 2; int pos = 1; foreach (DataRow drDate in dtDate.Rows) { worksheet.Cells[pos, 5].Value = drDate["SDATE"].AsString(); //資料起日 worksheet.Cells[pos, 6].Value = drDate["EDATE"].AsString(); //資料迄日 worksheet.Cells[pos, 7].Value = drDate["DAY_CNT"].AsInt(); //天數 //ken,使用DataView的Find之前,要指定Sort欄位(可多個欄位) int filterIndex = dtSingleKind.Rows.IndexOf(dtSingleKind.Select($"mg1_ymd >= '{drDate["SDATE"].AsString()}'").FirstOrDefault()); if (filterIndex >= 0) { worksheet.Cells[pos, 8].Value = rowIndex + filterIndex;//起日位址(FirstRowIndex) } else { worksheet.Cells[pos, 8].Value = rowIndex;//起日位址(FirstRowIndex) } worksheet.Cells[pos, 9].Value = rowIndex + dtSingleKind.Rows.Count - 1;//迄日位址(LastRowIndex) pos++; }//foreach(DataRow drDate in dtDate.Rows) { #endregion //2.6寫入整個子table (日期/實際風險價格係數/最小風險價格係數) worksheet.Import(dtSingleKind, false, 1, 0);//dataTable, isAddHeader, RowFirstIndex, ColFirstIndex worksheet.Range["A1"].Select(); worksheet.ScrollToRow(0); //2.7刪多的圖表(共五個,起始rowIndex=24,每個高31) //ken,從最後一個圖表開始刪除比較正確,才不會跑位,最後圖表rowIndex=148 worksheet = workbook.Worksheets["Graph"]; int graphRowIndex = 148; int graphHeight = 31; for (int k = dtDate.Rows.Count - 1; k >= 0; k--) { if (dtDate.Rows[k]["AI2_SELECT"].AsString() == "N") { worksheet.Rows.Remove(graphRowIndex, graphHeight - 1); } graphRowIndex -= graphHeight; }//for(int k = dtDate.Rows.Count - 1;k >= 0;k--) { //2.8寫入[註3]資訊 riskRateOrg = Math.Round(riskRateOrg * 100, 1, MidpointRounding.AwayFromZero); if (lastRiskRate == 0) { worksheet.Cells[18, 0].Value = string.Format("註3:上市日起至今最小風險價格係數均為{0}%", riskRateOrg.ToString()); } else { lastRiskRate = Math.Round(lastRiskRate * 100, 1, MidpointRounding.AwayFromZero); worksheet.Cells[18, 0].Value = string.Format("註3:最小風險價格係數自{0}起由{1}%調整為{2}", effDate, lastRiskRate.ToString(), riskRateOrg.ToString()); } //2.9存檔 workbook.SaveDocument(excelDestinationPath); }//foreach (DataRow drKind in dtTemp.Rows) 商品 #endregion } #endregion return(ResultStatus.Success); } catch (Exception ex) { WriteLog(ex, kindId); } finally { panFilter.Enabled = panSecond.Enabled = true; labMsg.Text = ""; labMsg.Visible = false; } return(ResultStatus.Fail); }
protected override ResultStatus Export() { #region 檢查 //要先call f_get_jsw string rtn = ""; rtn = PbFunc.f_get_jsw("60420", "E", GlobalInfo.OCF_DATE.ToString("yyyy/MM/dd")); //ls_rtn = f_get_jsw(is_txn_id,'E',em_date.text) if (rtn != "Y") { DialogResult result = MessageBox.Show(txtEndDate.Text + " 統計資料未轉入完畢,是否要繼續?", "注意", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.No) { lblProcessing.Visible = false; return(ResultStatus.Fail); } } #endregion dao60420 = new D60420(); base.Export(); lblProcessing.Visible = true; this.Refresh(); Thread.Sleep(5); //複製檔案 string excelDestinationPath = PbFunc.wf_copy_file(_ProgramID, _ProgramID); //開啟檔案 Workbook workbook = new Workbook(); workbook.LoadDocument(excelDestinationPath); #region wf_60410a (sheet 1/4/5) string rptName, rptId; int i, j, rowNum; decimal value; /************************************* * ls_rpt_name = 報表名稱 * ls_rpt_id = 報表代號 *************************************/ rptName = "檢查表"; rptId = "60410_1a"; lblProcessing.Text = rptId + "-" + rptName + " 轉檔中..."; this.Refresh(); Thread.Sleep(5); //讀取資料 DataTable dt60410_1a = dao60420.d_60410_1a(txtStartDate.DateTimeValue, txtEndDate.DateTimeValue); if (dt60410_1a.Rows.Count == 0) { MessageDisplay.Info(string.Format("{0},{1},無任何資料!", txtEndDate.EditValue, rptId + "-" + rptName)); } //切換Sheet //1. 未符合「成份股檔數≧10」 Worksheet sheet1 = workbook.Worksheets[0]; //填資料 if (cbx1.Checked == false) { sheet1.Cells[2, 0].Value = "標準1. 全部「成份股檔數」"; } rowNum = 3; for (i = 0; i < dt60410_1a.Rows.Count; i++) { DataRow dr60410_1a = dt60410_1a.Rows[i]; if (cbx1.Checked == false || dr60410_1a["tot_cnt"].AsInt() < sleCond1.Text.AsInt()) { rowNum = rowNum + 1; sheet1.Cells[rowNum, 0].Value = dr60410_1a["cod_name"].AsString(); sheet1.Cells[rowNum, 1].Value = (DateTime.ParseExact(dr60410_1a["ymd"].AsString(), "yyyyMMdd", CultureInfo.InvariantCulture)).ToString("yyyy/M/d").AsDateTime(); sheet1.Cells[rowNum, 2].SetValue(dr60410_1a["tot_cnt"]); } } sheet1.ScrollTo(0, 0); //4. 未符合「最低25%權重之成份股,檔數在15檔(含)以上,過去半年每日合計成交值之平均值>3,000萬美元」 Worksheet sheet4 = workbook.Worksheets[3]; //填資料 if (cbx4.Checked == false) { sheet4.Cells[2, 0].Value = "標準4. 全部「最低25%權重之成份股,檔數在15檔(含)以上,過去半年每日合計成交值」"; } rowNum = 4; for (i = 0; i < dt60410_1a.Rows.Count; i++) { DataRow dr60410_1a = dt60410_1a.Rows[i]; if (dr60410_1a["cnt25"].AsInt() >= sleCond41.Text.AsInt() && Math.Round(dr60410_1a["avg_amt_mth_usd"].AsDecimal() / 10000, 0) <= sleCond42.Text.AsDecimal() || cbx4.Checked == false) { rowNum = rowNum + 1; sheet4.Cells[rowNum, 0].Value = dr60410_1a["cod_name"].AsString(); sheet4.Cells[rowNum, 1].Value = (DateTime.ParseExact(dr60410_1a["ymd"].AsString(), "yyyyMMdd", CultureInfo.InvariantCulture)).ToString("yyyy/M/d").AsDateTime(); sheet4.Cells[rowNum, 2].SetValue(dr60410_1a["cnt25"]); sheet4.Cells[rowNum, 3].SetValue(dr60410_1a["weight25"]); sheet4.Cells[rowNum, 4].SetValue(dr60410_1a["avg_amt_cls_usd"]); sheet4.Cells[rowNum, 5].SetValue(dr60410_1a["avg_amt_cls_tw"]); sheet4.Cells[rowNum, 6].SetValue(dr60410_1a["avg_amt_mth_usd"]); sheet4.Cells[rowNum, 7].SetValue(dr60410_1a["avg_amt_mth_tw"]); sheet4.Cells[rowNum, 8].SetValue(dr60410_1a["day_amt_cls_usd"]); sheet4.Cells[rowNum, 9].SetValue(dr60410_1a["day_amt_cls_tw"]); sheet4.Cells[rowNum, 10].SetValue(dr60410_1a["day_amt_mth_usd"]); sheet4.Cells[rowNum, 11].SetValue(dr60410_1a["day_amt_mth_tw"]); } } sheet4.ScrollTo(0, 0); //5. 未符合「最低25%權重之成份股,檔數低於15檔,過去半年每日合計成交值之平均值>5,000萬美元」 Worksheet sheet5 = workbook.Worksheets[4]; //填資料 if (cbx5.Checked == false) { sheet5.Cells[2, 0].Value = "標準5. 全部「最低25%權重之成份股,檔數低於15檔,過去半年每日合計成交值」"; } rowNum = 4; for (i = 0; i < dt60410_1a.Rows.Count; i++) { DataRow dr60410_1a = dt60410_1a.Rows[i]; if (dr60410_1a["cnt25"].AsInt() < sleCond41.Text.AsInt() && (Math.Round(dr60410_1a["avg_amt_mth_usd"].AsDecimal() / 10000, 0) <= sleCond52.Text.AsDecimal() || cbx5.Checked == false)) { rowNum = rowNum + 1; sheet5.Cells[rowNum, 0].Value = dr60410_1a["cod_name"].AsString(); sheet5.Cells[rowNum, 1].Value = (DateTime.ParseExact(dr60410_1a["ymd"].AsString(), "yyyyMMdd", CultureInfo.InvariantCulture)).ToString("yyyy/M/d").AsDateTime(); sheet5.Cells[rowNum, 2].SetValue(dr60410_1a["cnt25"]); sheet5.Cells[rowNum, 3].SetValue(dr60410_1a["weight25"]); sheet5.Cells[rowNum, 4].SetValue(dr60410_1a["avg_amt_cls_usd"]); sheet5.Cells[rowNum, 5].SetValue(dr60410_1a["avg_amt_cls_tw"]); sheet5.Cells[rowNum, 6].SetValue(dr60410_1a["avg_amt_mth_usd"]); sheet5.Cells[rowNum, 7].SetValue(dr60410_1a["avg_amt_mth_tw"]); sheet5.Cells[rowNum, 8].SetValue(dr60410_1a["day_amt_cls_usd"]); sheet5.Cells[rowNum, 9].SetValue(dr60410_1a["day_amt_cls_tw"]); sheet5.Cells[rowNum, 10].SetValue(dr60410_1a["day_amt_mth_usd"]); sheet5.Cells[rowNum, 11].SetValue(dr60410_1a["day_amt_mth_tw"]); } } sheet5.ScrollTo(0, 0); #endregion #region wf_60410_2 (sheet 2) rptName = "2. 未符合「權重最大之成份股權重≦30%」"; rptId = "60410_2"; lblProcessing.Text = rptId + "-" + rptName + " 轉檔中..."; this.Refresh(); Thread.Sleep(5); //讀取資料 DataTable dt60410_2; if (cbx2.Checked == true) { dt60410_2 = dao60420.d_60410_2(txtStartDate.DateTimeValue, txtEndDate.DateTimeValue, sleCond2.Text.AsDecimal()); } else { dt60410_2 = dao60420.d_60410_2(txtStartDate.DateTimeValue, txtEndDate.DateTimeValue, -1.AsDecimal()); } if (dt60410_2.Rows.Count == 0) { //PB把這段註解掉,先照著寫 //MessageDisplay.Info(string.Format("{0},{1},無任何資料!", txtEndDate.EditValue, ls_rpt_id + "-" + ls_rpt_name)); } //切換Sheet //2. 未符合「權重最大之成份股權重≦30%」 Worksheet sheet2 = workbook.Worksheets[1]; //填資料 if (cbx2.Checked == false) { sheet2.Cells[2, 0].Value = "標準2. 全部「權重最大之成份股權重%」"; } rowNum = 3; for (i = 0; i < dt60410_2.Rows.Count; i++) { DataRow dr60410_2 = dt60410_2.Rows[i]; if (cbx2.Checked == true && dr60410_2["index_weight"].AsDecimal() <= 0.3.AsDecimal()) { continue; } rowNum = rowNum + 1; sheet2.Cells[rowNum, 0].Value = dr60410_2["cod_name"].AsString(); sheet2.Cells[rowNum, 1].Value = dr60410_2["TSE3_YMD"].AsDateTime().ToString("yyyy/M/d").AsDateTime(); sheet2.Cells[rowNum, 2].SetValue(dr60410_2["TSE3_SID"]); sheet2.Cells[rowNum, 3].Value = dr60410_2["TFXMS_SNAME"].AsString(); sheet2.Cells[rowNum, 4].SetValue(dr60410_2["INDEX_WEIGHT"]); } sheet2.ScrollTo(0, 0); #endregion #region wf_60410_3 (sheet 3) rptName = "3. 未符合「權重前五大成份股合計權重≦60%」"; rptId = "60412_3"; //PB就是這樣寫 lblProcessing.Text = rptId + "-" + rptName + " 轉檔中..."; this.Refresh(); Thread.Sleep(5); //讀取資料 DataTable dt60412_3; if (cbx3.Checked == true) { dt60412_3 = dao60420.d_60412_3(txtStartDate.DateTimeValue, txtEndDate.DateTimeValue, sleCond3.Text.AsDecimal()); } else { dt60412_3 = dao60420.d_60412_3(txtStartDate.DateTimeValue, txtEndDate.DateTimeValue, -1.AsDecimal()); } if (dt60412_3.Rows.Count == 0) { //PB把這段註解掉,先照著寫 //MessageDisplay.Info(string.Format("{0},{1},無任何資料!", txtEndDate.EditValue, ls_rpt_id + "-" + ls_rpt_name)); } //切換Sheet //3. 未符合「權重前五大成份股合計權重≦60%」 Worksheet sheet3 = workbook.Worksheets[2]; //填資料 if (cbx3.Checked == false) { sheet3.Cells[2, 0].Value = "標準3. 全部「權重前五大成份股合計權重%」"; } rowNum = 3; for (i = 0; i < dt60412_3.Rows.Count; i++) { DataRow dr60412_3 = dt60412_3.Rows[i]; rowNum = rowNum + 1; sheet3.Cells[rowNum, 0].Value = dr60412_3["cod_name"].AsString(); sheet3.Cells[rowNum, 1].Value = dr60412_3["TSE3_DATE"].AsDateTime().ToString("yyyy/M/d").AsDateTime(); sheet3.Cells[rowNum, 2].SetValue(dr60412_3["TSE5_25_WEIGHT"]); sheet3.Cells[rowNum, 3].SetValue(dr60412_3["TSE3_DESC_SEQ"]); sheet3.Cells[rowNum, 4].SetValue(dr60412_3["TSE3_SID"]); sheet3.Cells[rowNum, 5].SetValue(dr60412_3["TFXMS_SNAME"]); sheet3.Cells[rowNum, 6].SetValue(dr60412_3["INDEX_WEIGHT"]); } sheet3.ScrollTo(0, 0); #endregion //預設打開第一張sheet workbook.Worksheets.ActiveWorksheet = workbook.Worksheets[0]; workbook.SaveDocument(excelDestinationPath); lblProcessing.Visible = false; this.Refresh(); Thread.Sleep(5); return(ResultStatus.Success); }
/// <summary> /// 按下[匯出]按鈕時 /// </summary> /// <returns></returns> protected override ResultStatus Export() { //1.check if (gvKind.DataRowCount <= 0) { MessageDisplay.Normal("選擇的日期必須有契約資訊,請重新選擇日期"); return(ResultStatus.Fail); } //1.1檢查最少必須勾選一筆商品 gvDate.CloseEditor(); //ken,一定要先呼叫這兩個函數,最後點選的那筆才會被記錄起來 gvDate.UpdateCurrentRow(); //ken,一定要先呼叫這兩個函數,最後點選的那筆才會被記錄起來 gvKind.CloseEditor(); //ken,一定要先呼叫這兩個函數,最後點選的那筆才會被記錄起來 gvKind.UpdateCurrentRow(); //ken,一定要先呼叫這兩個函數,最後點選的那筆才會被記錄起來 DataTable dtTemp = (DataTable)gcKind.DataSource; bool haveKind = false; foreach (DataRow drKind in dtTemp.Rows) { if (drKind["CPR_SELECT"].AsString() == "Y") { haveKind = true; break; } } if (!haveKind) { MessageDisplay.Normal("必須勾選一筆契約"); return(ResultStatus.Fail); } if (chkModel.CheckedItemsCount < 1) { MessageDisplay.Error("請至少勾選一種指標種類", GlobalInfo.ErrorText); return(ResultStatus.Fail); } //1.2檢查統計資料是否已經轉入完畢 string FinishedJob = PbFunc.f_get_jsw(_ProgramID, "E", txtEndDate.Text); if (FinishedJob != "Y") { DialogResult chooseResult = MessageDisplay.Choose(string.Format("{0} 統計資料未轉入完畢,是否要繼續?", txtEndDate.Text), MessageBoxDefaultButton.Button2, GlobalInfo.QuestionText); if (chooseResult != DialogResult.Yes) { return(ResultStatus.Fail); } } try { //2.開始轉出資料 panFilter.Enabled = panSecond.Enabled = false; labMsg.Visible = true; labMsg.Text = "開始轉檔..."; this.Refresh(); //2.1 copy template xlsx to target path and open Workbook workbook = new Workbook(); string originalFilePath = Path.Combine(GlobalInfo.DEFAULT_EXCEL_TEMPLATE_DIRECTORY_PATH, _ProgramID + "." + FileType.XLSX.ToString().ToLower()); string excelDestinationPath = ""; DataTable dtDate = (DataTable)gcDate.DataSource; #region 指標:SMA,EWMA,MAX foreach (CheckedListBoxItem item in chkModel.Items) { if (item.CheckState == CheckState.Unchecked) { continue; } int sheetIndex = 0; int flag = 0; string modelType = ""; switch (item.Value) { case "chkSma": excelDestinationPath = Path.Combine(GlobalInfo.DEFAULT_REPORT_DIRECTORY_PATH, _ProgramID + "_SMA_" + DateTime.Now.ToString("yyyy.MM.dd-HH.mm.ss.") + FileType.XLSX.ToString().ToLower()); modelType = "S"; break; case "chkEwma": excelDestinationPath = Path.Combine(GlobalInfo.DEFAULT_REPORT_DIRECTORY_PATH, _ProgramID + "_EWMA_" + DateTime.Now.ToString("yyyy.MM.dd-HH.mm.ss.") + FileType.XLSX.ToString().ToLower()); modelType = "E"; break; case "chkMax": excelDestinationPath = Path.Combine(GlobalInfo.DEFAULT_REPORT_DIRECTORY_PATH, _ProgramID + "_MAX_" + DateTime.Now.ToString("yyyy.MM.dd-HH.mm.ss.") + FileType.XLSX.ToString().ToLower()); modelType = "M"; break; } //copy template and change filename File.Copy(originalFilePath, excelDestinationPath, true); workbook.LoadDocument(excelDestinationPath); #region 時段 //每個時間區間為一個sheet,總共5個 foreach (DataRow drDate in dtDate.Rows) { string monDiff = drDate["MON_DIFF"].AsString(); //期間 string startDate = drDate["SDATE"].AsDateTime().ToString("yyyyMMdd"); //資料起日 string endDate = drDate["EDATE"].AsDateTime().ToString("yyyyMMdd"); //資料迄日 //DateTime startDate = drDate["SDATE"].AsDateTime();//資料起日 //DateTime endDate = drDate["EDATE"].AsDateTime();//資料迄日 int dayCount = drDate["DAY_CNT"].AsInt(); //天數 //2.2跳到指定sheet,寫檔頭 Worksheet worksheet = workbook.Worksheets[sheetIndex++]; worksheet.Cells[1, 2].Value = cbxSubType.Text; worksheet.Cells[2, 11].Value = string.Format("列印日期:{0}", DateTime.Now.ToString("yyyy/MM/dd")); worksheet.Cells[2, 1].Value = string.Format("{0}({1}~{2}),計{3}天", monDiff, drDate["SDATE"].AsDateTime().ToString("yyyy/MM/dd"), drDate["EDATE"].AsDateTime().ToString("yyyy/MM/dd"), dayCount.ToString()); #region //2.3分別讀取每個商品的詳細資訊 int rowIndex = 7; int emptyRowCount = 60; //template 空白行的數量 int kindCount = 0; //逐一看勾選的商品有哪些 foreach (DataRow drKind in dtTemp.Rows) { if (drKind["CPR_SELECT"].AsString() != "Y") { continue; } kindCount++; string kindId = drKind["cpr_kind_id"].AsString(); //契約ID Decimal riskRate = drKind["cpr_price_risk_rate"].AsDecimal(); //現行最小風險價格係數 Decimal interval = drKind["risk_interval"].AsDecimal(); //最小風險價格係數級距 //2.3.1讀取子table data DataTable dtSingleKind = dao48030.ListKindByKindId(startDate, endDate, riskRate, interval, kindId, modelType); if (dtSingleKind.Rows.Count <= 0) { labMsg.Text += string.Format("{0},{1}~{2}無任何資料!\r\n", kindId, startDate, endDate); this.Refresh(); continue; } //2.3.2寫入明細 //ken,原則上一個商品只會找到一筆明細(已經group by) DataRow drDetail = dtSingleKind.Rows[0]; int tempCount = drDetail["cnt"].AsInt(); Decimal level_1 = drDetail["level_1"].AsDecimal(); Decimal level_23 = drDetail["level_23"].AsDecimal(); Decimal level_4 = drDetail["level_4"].AsDecimal(); worksheet.Cells[rowIndex, 0].Value = drDetail["mg1_kind_id"].AsString(); worksheet.Cells[rowIndex, 1].Value = drDetail["avg_risk"].AsDecimal(); worksheet.Cells[rowIndex, 2].Value = drDetail["max_risk"].AsDecimal(); worksheet.Cells[rowIndex, 3].Value = drDetail["min_risk"].AsDecimal(); worksheet.Cells[rowIndex, 4].Value = riskRate; worksheet.Cells[rowIndex, 6].Value = level_1; worksheet.Cells[rowIndex, 7].Value = Math.Round(level_1 / tempCount, 4, MidpointRounding.AwayFromZero); worksheet.Cells[rowIndex, 8].Value = level_23; worksheet.Cells[rowIndex, 9].Value = Math.Round(level_23 / tempCount, 4, MidpointRounding.AwayFromZero); worksheet.Cells[rowIndex, 10].Value = level_4; worksheet.Cells[rowIndex, 11].Value = Math.Round(level_4 / tempCount, 4, MidpointRounding.AwayFromZero); worksheet.Cells[rowIndex, 12].Value = interval; rowIndex++; flag++; }//foreach (DataRow drKind in dtTemp.Rows) 商品 #endregion //2.4刪除空白列 (結束商品foreach才刪除空白列,跑下一個sheet) if (kindCount < emptyRowCount) { worksheet.Rows.Remove(rowIndex, emptyRowCount - kindCount); } }//foreach (DataRow drDate in dtDate.Rows) 時段 #endregion //2.9存檔 if (flag > 0) { workbook.SaveDocument(excelDestinationPath); } else { File.Delete(excelDestinationPath); } }//foreach (CheckedListBoxItem item in chkModel.Items) 指標 #endregion //if (FlagAdmin) // System.Diagnostics.Process.Start(excelDestinationPath); return(ResultStatus.Success); } catch (Exception ex) { WriteLog(ex); } finally { panFilter.Enabled = panSecond.Enabled = true; labMsg.Text = ""; labMsg.Visible = false; } return(ResultStatus.Fail); }
protected override ResultStatus Export() { try { #region 輸入&日期檢核 string lsRtn = PbFunc.f_get_jsw(_ProgramID, "E", txtEndDate.Text); DialogResult liRtn; if (lsRtn != "Y") { liRtn = MessageDisplay.Choose(string.Format("{0} 統計資料未轉入完畢,是否要繼續?", txtEndDate.Text), MessageBoxDefaultButton.Button2, GlobalInfo.QuestionText); if (liRtn == DialogResult.No) { labMsg.Visible = false; Cursor.Current = Cursors.Arrow; return(ResultStatus.Fail); } //if (liRtn == DialogResult.Yes) } //if (lsRtn != "Y") //if (!txtStartDate.IsDate(txtStartDate.Text , CheckDate.Start) // || !txtEndDate.IsDate(txtEndDate.Text , CheckDate.End)) { // return ResultStatus.Fail; ; //} if (string.Compare(txtStartDate.Text, txtEndDate.Text) > 0) { MessageDisplay.Error(CheckDate.Datedif, GlobalInfo.ErrorText); return(ResultStatus.Fail);; } #endregion //1. ready panFilter.Enabled = false; labMsg.Visible = true; labMsg.Text = "開始轉檔..."; this.Cursor = Cursors.WaitCursor; this.Refresh(); Thread.Sleep(5); //2. copy template xls to target path string excelDestinationPath = PbFunc.wf_copy_file(_ProgramID, _ProgramID); //3. open xls Workbook workbook = new Workbook(); workbook.LoadDocument(excelDestinationPath); //4. write data int row; bool res1 = false, res2 = false, res3 = false; row = 3; res1 = wf_30410(workbook, SheetNo.tradeSum, row); row = 4; //PB這邊帶1,但進去後帶回4 res2 = wf_30411(workbook, SheetNo.tradeDetail, row); row = 4; //PB這邊帶1,但進去後帶回4 res3 = wf_30412(workbook, SheetNo.oint, row); if (!res1 && !res2 && !res3) { File.Delete(excelDestinationPath); return(ResultStatus.Fail); } //5. save workbook.SaveDocument(excelDestinationPath); labMsg.Visible = false; if (FlagAdmin) { System.Diagnostics.Process.Start(excelDestinationPath); } return(ResultStatus.Success); } catch (Exception ex) { WriteLog(ex); } finally { panFilter.Enabled = true; labMsg.Text = ""; labMsg.Visible = false; this.Cursor = Cursors.Arrow; } return(ResultStatus.Fail); }
protected override ResultStatus Export() { base.Export(); #region 確認統計資料未轉入完畢 string lsRtn = PbFunc.f_get_jsw(_ProgramID, "E", txtDate.Text); DialogResult liRtn; if (lsRtn != "Y") { liRtn = MessageDisplay.Choose(String.Format("{0} 統計資料未轉入完畢,是否要繼續?", txtDate.Text)); if (liRtn == DialogResult.No) { labMsg.Visible = false; Cursor.Current = Cursors.Arrow; return(ResultStatus.Fail); } }//if (lsRtn != "Y") #endregion try { //1. 判斷為單一商品還是全部 DataTable dt = dao40130.GetDataList(txtDate.DateTimeValue, "%"); DataTable dtSelect = new DataTable(); string kindId = dwKindId.EditValue.AsString(); if (kindId != "%") { dtSelect = dt.Filter("mgt2_kind_id = '" + kindId + "'"); } else //kindId = "%" { dtSelect = dt.Filter("mgt2_kind_id <> '%'"); } //1.1 準備開檔 string originalFilePath = ""; string destinationFilePath = ""; Workbook workbook = new Workbook(); //2. 填資料 foreach (DataRow dr in dtSelect.Rows) { string fileKind = dr["mgt2_kind_id"].AsString(); //2.1 開啟&複製檔案(因可能有多個excel所以在迴圈裡兜路徑) originalFilePath = Path.Combine(GlobalInfo.DEFAULT_EXCEL_TEMPLATE_DIRECTORY_PATH, string.Format("{0}.{1}", _ProgramID, FileType.XLS.ToString().ToLower())); destinationFilePath = Path.Combine(GlobalInfo.DEFAULT_REPORT_DIRECTORY_PATH, string.Format("{0}({1})_{2}.{3}", _ProgramID, fileKind, DateTime.Now.ToString("yyyy.MM.dd-HH.mm.ss"), FileType.XLS.ToString().ToLower())); File.Copy(originalFilePath, destinationFilePath, true); workbook.LoadDocument(destinationFilePath); kindId = dr["mgt2_kind_id"].AsString() + "%"; string tmpKindId = kindId.SubStr(2, 1); if (tmpKindId == "F") //Sheet:期貨data { wf_40131(workbook, kindId); } else //Sheet:選擇權data { wf_40132(workbook, kindId); } //3. save workbook.SaveDocument(destinationFilePath); }//foreach (DataRow dr in dt.Rows) labMsg.Visible = false; return(ResultStatus.Success); } catch (Exception ex) { WriteLog(ex); } finally { panFilter.Enabled = true; labMsg.Text = ""; labMsg.Visible = false; this.Cursor = Cursors.Arrow; } return(ResultStatus.Fail); }