Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }