/// <summary> /// wf_30393_1 /// </summary> /// <param name="StartDate">前月倒數2天交易日</param> /// <param name="EndDate">抓當月最後交易日</param> /// <param name="IsKindID">商品代號</param> /// <param name="SheetName">工作表</param> /// <param name="RowIndex">Excel的Row位置</param> /// <param name="RowTotal">Excel的Column預留數</param> /// <returns></returns> public string Wf30393(DateTime StartDate, DateTime EndDate, string IsKindID, string SheetName, int RowIndex = 1, int RowTotal = 33) { try { Worksheet worksheet = _workbook.Worksheets[SheetName]; int addRowCount = 0;//總計寫入的行數 //讀取資料 DataTable dtAI3 = daoAI3.ListAI3(IsKindID, StartDate, EndDate); //寫入資料 DateTime ldtYMD = new DateTime(1900, 1, 1); foreach (DataRow row in dtAI3.Rows) { if (ldtYMD != row["AI3_DATE"].AsDateTime()) { ldtYMD = row["AI3_DATE"].AsDateTime(); RowIndex = RowIndex + 1; addRowCount++; worksheet.Rows[RowIndex][1 - 1].Value = ldtYMD.ToString("MM/dd");//日期 } //if not isnull(ld_val) then iole_1.application.activecell(ii_ole_row, 3).value = ids_1.getitemdecimal(i, "ai3_close_price") - ids_1.getitemdecimal(i, "ai3_last_close_price") //pb這段只會在Excel隱藏的欄位執行成功 if (RowIndex == 2 && row["AI3_LAST_CLOSE_PRICE"] != DBNull.Value) { worksheet.Rows[RowIndex][3 - 1].Value = row["AI3_CLOSE_PRICE"].AsDecimal() - row["AI3_LAST_CLOSE_PRICE"].AsDecimal(); //C } worksheet.Rows[RowIndex][2 - 1].Value = row["AI3_CLOSE_PRICE"].AsDecimal(); //B worksheet.Rows[RowIndex][4 - 1].Value = row["AI3_M_QNTY"].AsDecimal(); //D worksheet.Rows[RowIndex][5 - 1].Value = row["AI3_OI"].AsDecimal(); //E worksheet.Rows[RowIndex][6 - 1].Value = row["AI3_INDEX"].AsDecimal(); //F } //刪除空白列 if (RowTotal > addRowCount) { worksheet.Rows.Remove(RowIndex + 1, RowTotal - addRowCount); //重新選取圖表範圍 ResetChartData(RowIndex + 1, _workbook, worksheet, SheetName.Replace($"({IsKindID})", "a"));//ex:30393_1a } //表尾 DataTable dtAI2 = daoAI2.ListAI2ym(IsKindID, EndDate.ToString("yyyyMM"), StartDate.ToString("yyyyMM")); if (dtAI2.Rows.Count <= 0) { return(MessageDisplay.MSG_OK); } int liDayCnt; //上月 RowIndex = RowIndex + 5; liDayCnt = dtAI2.Rows[0]["LAST_M_DAY_CNT"].AsInt(); if (liDayCnt > 0) { worksheet.Rows[RowIndex][5 - 1].Value = Math.Round(dtAI2.Rows[0]["LAST_M_QNTY"].AsDecimal() / liDayCnt, 0); worksheet.Rows[RowIndex][7 - 1].Value = Math.Round(dtAI2.Rows[0]["LAST_M_OI"].AsDecimal() / liDayCnt, 0); } //今年迄今 RowIndex = RowIndex + 2; liDayCnt = dtAI2.Rows[0]["Y_DAY_CNT"].AsInt(); if (liDayCnt > 0) { worksheet.Rows[RowIndex][5 - 1].Value = Math.Round(dtAI2.Rows[0]["Y_QNTY"].AsDecimal() / liDayCnt, 0); worksheet.Rows[RowIndex][7 - 1].Value = Math.Round(dtAI2.Rows[0]["Y_OI"].AsDecimal() / liDayCnt, 0); } } catch (Exception ex) { #if DEBUG throw new Exception($"Wf30393:" + ex.Message); #else throw ex; #endif } return(MessageDisplay.MSG_OK); }
/// <summary> /// 寫入 30311_1 sheet /// </summary> /// <param name="lsKindID"></param> /// <param name="SheetName"></param> /// <returns></returns> public string Wf30310one(string lsKindID, string SheetName) { Workbook workbook = new Workbook(); try { //切換Sheet workbook.LoadDocument(_lsFile); Worksheet worksheet = workbook.Worksheets[SheetName]; //前月倒數2天交易日 DateTime StartDate = PbFunc.f_get_last_day("AI3", lsKindID, _emMonthText, 2); //抓當月最後交易日 DateTime EndDate = PbFunc.f_get_end_day("AI3", lsKindID, _emMonthText); //讀取資料 DataTable dt = dao30310.GetData(lsKindID, StartDate, EndDate); if (dt.Rows.Count <= 0) { return($"{StartDate.ToShortDateString()}~{EndDate.ToShortDateString()},30310-我國臺股期貨契約價量資料,{lsKindID}無任何資料!"); } DateTime ldtYMD = new DateTime(1900, 1, 1); int rowIndex = 1; int RowTotal = 32 + 1; //Excel的Column預留數 預留顯示32行加上隱藏的1行 int addRowCount = 0; //總計寫入的行數 foreach (DataRow row in dt.Rows) { //不同的日期就寫入新的一行 if (ldtYMD != row["AI3_DATE"].AsDateTime()) { ldtYMD = row["AI3_DATE"].AsDateTime(); rowIndex = rowIndex + 1; addRowCount++; //日期 worksheet.Cells[$"A{rowIndex + 1}"].SetValue(ldtYMD.ToString("MM/dd")); } //臺股期貨市場 worksheet.Cells[$"B{rowIndex + 1}"].SetValue(row["AI3_CLOSE_PRICE"]); //臺股期貨指數(TX) worksheet.Cells[$"D{rowIndex + 1}"].SetValue(row["AI3_M_QNTY"]); //股價指數類期貨成交量(註①) worksheet.Cells[$"E{rowIndex + 1}"].SetValue(row["AI3_OI"]); //股價指數類未平倉量(註①) //臺股現貨市場 worksheet.Cells[$"F{rowIndex + 1}"].SetValue(row["AI3_INDEX"]); //臺股現貨指數(TAIEX) if (lsKindID == "TXF") { worksheet.Cells[$"H{rowIndex + 1}"].SetValue(row["AI3_AMOUNT"]);//成交值(億元) } } //刪除空白列 if (RowTotal > addRowCount) { worksheet.Rows.Remove(rowIndex + 1, RowTotal - addRowCount); //重新選取圖表範圍 ResetChartData(rowIndex + 1, workbook, worksheet, $"{SheetName}a"); //ex:30393_1a worksheet.ScrollTo(0, 0); //直接滾動到最上面,不然看起來很像少行數 } //表尾 dt = daoAI2.ListAI2ym(lsKindID, EndDate.ToString("yyyyMM"), StartDate.ToString("yyyyMM")); if (dt.Rows.Count <= 0) { return(""); } int liDayCnt; //上月 rowIndex = rowIndex + 5; liDayCnt = dt.Rows[0]["LAST_M_DAY_CNT"].AsInt(); if (liDayCnt > 0) { worksheet.Cells[$"E{rowIndex + 1}"].Value = Math.Round(dt.Rows[0]["LAST_M_QNTY"].AsDecimal() / liDayCnt, 0); worksheet.Cells[$"G{rowIndex + 1}"].Value = Math.Round(dt.Rows[0]["LAST_M_OI"].AsDecimal() / liDayCnt, 0); } //本月 rowIndex = rowIndex - 1; liDayCnt = dt.Rows[0]["CUR_M_DAY_CNT"].AsInt(); if (liDayCnt > 0) { worksheet.Cells[$"E{rowIndex + 1}"].Value = Math.Round(dt.Rows[0]["CUR_M_QNTY"].AsDecimal() / liDayCnt, 0); worksheet.Cells[$"G{rowIndex + 1}"].Value = Math.Round(dt.Rows[0]["CUR_M_OI"].AsDecimal() / liDayCnt, 0); } rowIndex = rowIndex + 1; //今年迄今 rowIndex = rowIndex + 2; liDayCnt = dt.Rows[0]["Y_DAY_CNT"].AsInt(); if (liDayCnt > 0) { worksheet.Cells[$"E{rowIndex + 1}"].Value = Math.Round(dt.Rows[0]["Y_QNTY"].AsDecimal() / liDayCnt, 0); worksheet.Cells[$"G{rowIndex + 1}"].Value = Math.Round(dt.Rows[0]["Y_OI"].AsDecimal() / liDayCnt, 0); } } catch (Exception ex) { throw ex; } finally { workbook.SaveDocument(_lsFile);//存檔 } return(MessageDisplay.MSG_OK); }