我们“老板”让我记录 http://www.cjh.com.cn/ 上面的长江水文数据!此网站有个变态的事情就是数据只是在一段时间内才有,例如:我是要记录早晨8时的数据,而此数据一般只出现在早晨8时和早晨9时之间,一旦到了9时之后,数据可能就要更新了,最开始的时候,我都是早晨起来用 Weibo 截图发布来记录,知道有一天我突发奇想,我还是写个程序吧,于是此程序就出现了!

首先看看预览吧!

基本思路:

  • 提取网页中的文字,通过特征字符来查找需要的信息!
  • 将查找的有用信息添加到 List 中!
  • 将 List 中的数据导入到 DataGridView 或是 Excel 中!

遇到的问题:

  • 刷新网页的时候,可能弹出广告,就不可以正确提取数据!
  • 确定是否都是8时的数据!
  • 为了尽量缩短刷新页面的次数,测试时间在 8:30 - 9:00 之间,若是此段时间一直未出现都是8时的情况,需要另想办法!
  • C# 对于 Excel 的操作!

具体实现步骤如下:

① 全局变量:

public struct Info  //用来记录表格中的四个属性数据
{public string name;public string date;public string water;public string stream;
}//引用:using Excel = Microsoft.Office.Interop.Excel;
Excel.Application ex = new Excel.Application();
Excel.Workbook eWorkbook;
Excel.Worksheet eWorksheet;int countRecorderDay = 0;   //用来记录白天的记载次数
int countRecorderNight = 0; //用来记录夜间的记录次数
int count = 0;  //倒计时来用string saveFilePath = Environment.CurrentDirectory + @"\长江水文\长江水文.xlsx"; //Excel的文件地址

② 添加控件:

timer1:用来记录总时间,每隔1分钟记录一次,到达 8:30 启动 timer2;

timer2:记录局部操作,开始刷新网页;

timer3:倒计时;

notifyIcon1:用来显示在任务栏中的通知;

contextMenuStrip2:用来显示通知的右键菜单。

③ 具体代码:

timer1_Tick 事件:

View Code

private void timer1_Tick(object sender, EventArgs e)    //计时器1
{if ((DateTime.Now.Hour == 8 && DateTime.Now.Minute >= 30 && countRecorderDay == 0) || (DateTime.Now.Hour == 20 && DateTime.Now.Minute >= 30 && countRecorderNight == 0)){timer2.Enabled = true;  //开启 timer2lbTimer2.Text = "计时器2开启!";lbTimer1.Text = "计时器1关闭!";timer1.Enabled = false;return;}if (DateTime.Now.Hour == 23 && DateTime.Now.Minute >= 55)    //夜间11点,将数据归零,等待第二天记录
    {countRecorderDay = 0;countRecorderNight = 0;}lbTimer1.Text = "计时器1开启!";lbRecord.Text = "上一次操作时间:" + DateTime.Now.ToShortTimeString();    //记录 timer1 操作时间上次操作时间ToolStripMenuItem.Text = lbRecord.Text;
}

Form1_Load 事件:

View Code

private void Form1_Load(object sender, EventArgs e)
{webBrowser1.Url = new System.Uri("http://www.cjh.com.cn/");lbRecord.Text = "上一次操作时间:" + DateTime.Now.ToShortTimeString();上次操作时间ToolStripMenuItem.Text = lbRecord.Text;
}

btRefresh_Click 事件:

View Code

private void btRefresh_Click(object sender, EventArgs e)  //刷新网站
{webBrowser1.Url = new System.Uri("http://www.cjh.com.cn/");
}

btShowData_Click 事件:

View Code

private void btShowData_Click(object sender, EventArgs e)  //数据出表
{webBrowser1.Url = new System.Uri("http://www.cjh.com.cn/");string strText = null;try{strText = webBrowser1.Document.Body.InnerText;}catch (System.Exception ex){MessageBox.Show(ex.ToString());}if (strText == null)return;int indexFront = strText.IndexOf("寸滩");int indexAfter = strText.IndexOf("防汛测报");string text = strText.Substring(indexFront, indexAfter - indexFront);string[] strLines = new string[20];strLines = text.Split(new char[] { '\n' });List<Info> content = new List<Info>();for (int i = 0; i < strLines.Length;i++ ){string[] parts = new string[5];if (strLines[i].Length < 5)break;parts = strLines[i].Split(new char[] { ' ' });Info inner = new Info();inner.name = parts[0];inner.date = parts[1];inner.water = parts[2].Substring(0, parts[2].IndexOf(".") + 3);inner.stream = parts[2].Substring(parts[2].IndexOf(".") + 3);content.Add(inner);}DataTable table = new DataTable();DataColumn columnName = new DataColumn("站点");DataColumn columnDate = new DataColumn("时间");DataColumn columnWater = new DataColumn("水位");DataColumn columnStream = new DataColumn("流量");table.Columns.Add(columnName);table.Columns.Add(columnDate);table.Columns.Add(columnWater);table.Columns.Add(columnStream);foreach (Info info in content){DataRow row = table.NewRow();row[0] = info.name;row[1] = info.date;row[2] = info.water;row[3] = info.stream;table.Rows.Add(row);}dataGridView1.DataSource = table;
}

btRecorder_Click 事件:

View Code

private void btRecorder_Click(object sender, EventArgs e)   //记录数据
{#region 获取网站的中的数据,并存到 List 中webBrowser1.Url = new System.Uri("http://www.cjh.com.cn/");  //刷新网站string strText = webBrowser1.Document.Body.InnerText;   if (strText == null)return;int indexFront = strText.IndexOf("寸滩");int indexAfter = strText.IndexOf("防汛测报");string text = null;if (indexFront > 0 && indexAfter > indexFront)text = strText.Substring(indexFront, indexAfter - indexFront);  //获取有用的部分elsereturn;string[] strLines = new string[20];strLines = text.Split(new char[] { '\n' }); //将内容按回车分割成数组
List<Info> content = new List<Info>();  //获取数据的每一个部分for (int i = 0; i < strLines.Length; i++){string[] parts = new string[5];if (strLines[i].Length < 5)break;parts = strLines[i].Split(new char[] { ' ' });Info inner = new Info();inner.name = parts[0];inner.date = parts[1];inner.water = parts[2].Substring(0, parts[2].IndexOf(".") + 3);inner.stream = parts[2].Substring(parts[2].IndexOf(".") + 3);content.Add(inner);}#endregionint countDay = 0;int countNight = 0;foreach (Info info in content){if (info.date.Contains("8时"))   //获取8时的数据countDay++;else if (info.date.Contains("20时"))countNight++;}#region 定义 lunarMonth 和 lunarDayHashtable lunarMonth = new Hashtable();lunarMonth.Add(1, "正");lunarMonth.Add(2, "二");lunarMonth.Add(3, "三");lunarMonth.Add(4, "四");lunarMonth.Add(5, "五");lunarMonth.Add(6, "六");lunarMonth.Add(7, "七");lunarMonth.Add(8, "八");lunarMonth.Add(9, "九");lunarMonth.Add(10, "十");lunarMonth.Add(11, "十一");lunarMonth.Add(12, "十二");Hashtable lunarDay = new Hashtable();lunarDay.Add(1, "初一");lunarDay.Add(2, "初二");lunarDay.Add(3, "初三");lunarDay.Add(4, "初四");lunarDay.Add(5, "初五");lunarDay.Add(6, "初六");lunarDay.Add(7, "初七");lunarDay.Add(8, "初八");lunarDay.Add(9, "初九");lunarDay.Add(10, "初十");lunarDay.Add(11, "十一");lunarDay.Add(12, "十二");lunarDay.Add(13, "十三");lunarDay.Add(14, "十四");lunarDay.Add(15, "十五");lunarDay.Add(16, "十六");lunarDay.Add(17, "十七");lunarDay.Add(18, "十八");lunarDay.Add(19, "十九");lunarDay.Add(20, "二十");lunarDay.Add(21, "二十一");lunarDay.Add(22, "二十二");lunarDay.Add(23, "二十三");lunarDay.Add(24, "二十四");lunarDay.Add(25, "二十五");lunarDay.Add(26, "二十六");lunarDay.Add(27, "二十七");lunarDay.Add(28, "二十八");lunarDay.Add(29, "二十九");lunarDay.Add(30, "三十");#endregionif (countDay == 11){#region 8时string excelPath = saveFilePath;eWorkbook = ex.Workbooks.Open(excelPath);    //打开文件,赋值到工作簿ex.Visible = false;                    //程序显示eWorksheet = (Excel.Worksheet)eWorkbook.Sheets[1];  //获取第一个工作表//新格式string date = DateTime.Today.Month + "月" + DateTime.Today.Day + "日";ChineseLunisolarCalendar lunar = new ChineseLunisolarCalendar();string dateLunar = lunarMonth[GetMonthFromYear(DateTime.Today.Date)] + "月" + lunarDay[lunar.GetDayOfMonth(DateTime.Today.Date)]; int row = ex.Application.get_Range("B65535", Type.Missing).get_End(Excel.XlDirection.xlUp).Row;eWorksheet.get_Range("A" + (row + 1).ToString()).Value = date;eWorksheet.get_Range("B" + (row + 1).ToString()).Value = DateTime.Now.Hour + "时";eWorksheet.get_Range("C" + (row + 1).ToString()).Value = dateLunar;eWorksheet.get_Range("D" + (row + 1).ToString()).Value = content[0].water;eWorksheet.get_Range("E" + (row + 1).ToString()).Value = content[0].stream;eWorksheet.get_Range("F" + (row + 1).ToString()).Value = content[1].water;eWorksheet.get_Range("G" + (row + 1).ToString()).Value = content[1].stream;eWorksheet.get_Range("H" + (row + 1).ToString()).Value = content[2].water;eWorksheet.get_Range("I" + (row + 1).ToString()).Value = content[2].stream;eWorksheet.get_Range("J" + (row + 1).ToString()).Value = content[3].water;eWorksheet.get_Range("K" + (row + 1).ToString()).Value = content[3].stream;eWorksheet.get_Range("L" + (row + 1).ToString()).Value = content[4].water;eWorksheet.get_Range("M" + (row + 1).ToString()).Value = content[4].stream;eWorksheet.get_Range("N" + (row + 1).ToString()).Value = content[5].water;eWorksheet.get_Range("O" + (row + 1).ToString()).Value = content[5].stream;eWorksheet.get_Range("P" + (row + 1).ToString()).Value = content[6].water;eWorksheet.get_Range("Q" + (row + 1).ToString()).Value = content[6].stream;eWorksheet.get_Range("R" + (row + 1).ToString()).Value = content[7].water;eWorksheet.get_Range("S" + (row + 1).ToString()).Value = content[7].stream;eWorksheet.get_Range("T" + (row + 1).ToString()).Value = content[8].water;eWorksheet.get_Range("U" + (row + 1).ToString()).Value = content[8].stream;eWorksheet.get_Range("V" + (row + 1).ToString()).Value = content[9].water;eWorksheet.get_Range("W" + (row + 1).ToString()).Value = content[9].stream;eWorksheet.get_Range("X" + (row + 1).ToString()).Value = content[10].water;eWorksheet.get_Range("Y" + (row + 1).ToString()).Value = content[10].stream;eWorkbook.Save();ex.Quit();this.Focus();timer2.Enabled = false;lbTimer2.Text = "计时器2关闭!";timer1.Enabled = true;lbTimer1.Text = "计时器1开启!";label4.Text = DateTime.Now.ToShortDateString() + " 8时 记录完毕!";countRecorderDay++;#endregion}if (countNight == 11){#region 20时string excelPath = saveFilePath;eWorkbook = ex.Workbooks.Open(excelPath);    //打开文件,赋值到工作簿ex.Visible = false;                    //程序显示eWorksheet = (Excel.Worksheet)eWorkbook.Sheets[1];  //获取第一个工作表//新格式string date = DateTime.Today.Month + "月" + DateTime.Today.Day + "日";ChineseLunisolarCalendar lunar = new ChineseLunisolarCalendar();string dateLunar = lunarMonth[GetMonthFromYear(DateTime.Today.Date)] + "月" +lunarDay[lunar.GetDayOfMonth(DateTime.Today.Date)];int row = ex.Application.get_Range("B65535", Type.Missing).get_End(Excel.XlDirection.xlUp).Row;//eWorksheet.get_Range("A" + (row + 1).ToString()).Value = date;eWorksheet.get_Range("B" + (row + 1).ToString()).Value = DateTime.Now.Hour + "时";//eWorksheet.get_Range("C" + (row + 1).ToString()).Value = dateLunar;
eWorksheet.get_Range("D" + (row + 1).ToString()).Value = content[0].water;eWorksheet.get_Range("E" + (row + 1).ToString()).Value = content[0].stream;eWorksheet.get_Range("F" + (row + 1).ToString()).Value = content[1].water;eWorksheet.get_Range("G" + (row + 1).ToString()).Value = content[1].stream;eWorksheet.get_Range("H" + (row + 1).ToString()).Value = content[2].water;eWorksheet.get_Range("I" + (row + 1).ToString()).Value = content[2].stream;eWorksheet.get_Range("J" + (row + 1).ToString()).Value = content[3].water;eWorksheet.get_Range("K" + (row + 1).ToString()).Value = content[3].stream;eWorksheet.get_Range("L" + (row + 1).ToString()).Value = content[4].water;eWorksheet.get_Range("M" + (row + 1).ToString()).Value = content[4].stream;eWorksheet.get_Range("N" + (row + 1).ToString()).Value = content[5].water;eWorksheet.get_Range("O" + (row + 1).ToString()).Value = content[5].stream;eWorksheet.get_Range("P" + (row + 1).ToString()).Value = content[6].water;eWorksheet.get_Range("Q" + (row + 1).ToString()).Value = content[6].stream;eWorksheet.get_Range("R" + (row + 1).ToString()).Value = content[7].water;eWorksheet.get_Range("S" + (row + 1).ToString()).Value = content[7].stream;eWorksheet.get_Range("T" + (row + 1).ToString()).Value = content[8].water;eWorksheet.get_Range("U" + (row + 1).ToString()).Value = content[8].stream;eWorksheet.get_Range("V" + (row + 1).ToString()).Value = content[9].water;eWorksheet.get_Range("W" + (row + 1).ToString()).Value = content[9].stream;eWorksheet.get_Range("X" + (row + 1).ToString()).Value = content[10].water;eWorksheet.get_Range("Y" + (row + 1).ToString()).Value = content[10].stream;eWorkbook.Save();ex.Quit();this.Focus();//Application.Exit();timer2.Enabled = false;lbTimer2.Text = "计时器2关闭!";timer1.Enabled = true;lbTimer1.Text = "计时器1开启!";label4.Text = DateTime.Now.ToShortDateString() + " 20时 记录完毕!";countRecorderNight++;#endregion}
}

btOpenFile_Click 事件:

View Code

private void btOpenFile_Click(object sender, EventArgs e)  //打开工作簿
{if (btOpenFile.Text == "打开Excel查看"){string excelPath = saveFilePath;eWorkbook = ex.Workbooks.Open(excelPath);    //打开文件,赋值到工作簿int rowNum = ex.Application.get_Range("B65535", Type.Missing).get_End(Excel.XlDirection.xlUp).Row;eWorksheet = (Excel.Worksheet)eWorkbook.Sheets[1];eWorksheet.get_Range("B" + (rowNum + 5).ToString()).Value = null;   //保证滚到此位置ex.Visible = true;btOpenFile.Text = "保存关闭Excel";}       else if(btOpenFile.Text == "保存关闭Excel"){eWorkbook.Save();ex.Quit();btOpenFile.Text = "打开Excel查看";}
}

btDownloadData_Click 事件:

View Code

private void btDownloadData_Click(object sender, EventArgs e)  //保存当前数据
{#region 获取网站的中的数据,并存到 List 中webBrowser1.Url = new System.Uri("http://www.cjh.com.cn/");  //刷新网站string strText = webBrowser1.Document.Body.InnerText;if (strText == null)return;int indexFront = strText.IndexOf("寸滩");int indexAfter = strText.IndexOf("防汛测报");string text = null;if (indexFront > 0 && indexAfter > indexFront){text = strText.Substring(indexFront, indexAfter - indexFront);  //获取有用的部分
            }else{return;}string[] strLines = new string[20];strLines = text.Split(new char[] { '\n' }); //将内容按回车分割成数组
List<Info> content = new List<Info>();  //获取数据的每一个部分for (int i = 0; i < strLines.Length; i++){string[] parts = new string[5];if (strLines[i].Length < 5)break;parts = strLines[i].Split(new char[] { ' ' });Info inner = new Info();inner.name = parts[0];inner.date = parts[1];inner.water = parts[2].Substring(0, parts[2].IndexOf(".") + 3);inner.stream = parts[2].Substring(parts[2].IndexOf(".") + 3);content.Add(inner);}#endregionint countDay = 0;int countNight = 0;foreach (Info info in content){if (info.date.Contains("8时"))   //获取8时的数据countDay++;else if (info.date.Contains("20时"))countNight++;}#region 定义 lunarMonth 和 lunarDayHashtable lunarMonth = new Hashtable();lunarMonth.Add(1, "正");lunarMonth.Add(2, "二");lunarMonth.Add(3, "三");lunarMonth.Add(4, "四");lunarMonth.Add(5, "五");lunarMonth.Add(6, "六");lunarMonth.Add(7, "七");lunarMonth.Add(8, "八");lunarMonth.Add(9, "九");lunarMonth.Add(10, "十");lunarMonth.Add(11, "十一");lunarMonth.Add(12, "十二");Hashtable lunarDay = new Hashtable();lunarDay.Add(1, "初一");lunarDay.Add(2, "初二");lunarDay.Add(3, "初三");lunarDay.Add(4, "初四");lunarDay.Add(5, "初五");lunarDay.Add(6, "初六");lunarDay.Add(7, "初七");lunarDay.Add(8, "初八");lunarDay.Add(9, "初九");lunarDay.Add(10, "初十");lunarDay.Add(11, "十一");lunarDay.Add(12, "十二");lunarDay.Add(13, "十三");lunarDay.Add(14, "十四");lunarDay.Add(15, "十五");lunarDay.Add(16, "十六");lunarDay.Add(17, "十七");lunarDay.Add(18, "十八");lunarDay.Add(19, "十九");lunarDay.Add(20, "二十");lunarDay.Add(21, "二十一");lunarDay.Add(22, "二十二");lunarDay.Add(23, "二十三");lunarDay.Add(24, "二十四");lunarDay.Add(25, "二十五");lunarDay.Add(26, "二十六");lunarDay.Add(27, "二十七");lunarDay.Add(28, "二十八");lunarDay.Add(29, "二十九");lunarDay.Add(30, "三十");#endregionif (true){#region 当前时刻string excelPath = saveFilePath;eWorkbook = ex.Workbooks.Open(excelPath);    //打开文件,赋值到工作簿ex.Visible = false;                    //程序显示eWorksheet = (Excel.Worksheet)eWorkbook.Sheets[1];  //获取第一个工作表//新格式string date = DateTime.Today.Month + "月" + DateTime.Today.Day + "日";ChineseLunisolarCalendar lunar = new ChineseLunisolarCalendar();string dateLunar = lunarMonth[GetMonthFromYear(DateTime.Today.Date)] + "月" +lunarDay[lunar.GetDayOfMonth(DateTime.Today.Date)];int row = ex.Application.get_Range("B65535", Type.Missing).get_End(Excel.XlDirection.xlUp).Row;eWorksheet.get_Range("A" + (row + 1).ToString()).Value = date;eWorksheet.get_Range("B" + (row + 1).ToString()).Value = DateTime.Now.ToShortTimeString();eWorksheet.get_Range("C" + (row + 1).ToString()).Value = dateLunar;eWorksheet.get_Range("D" + (row + 1).ToString()).Value = content[0].water;eWorksheet.get_Range("E" + (row + 1).ToString()).Value = content[0].stream;eWorksheet.get_Range("F" + (row + 1).ToString()).Value = content[1].water;eWorksheet.get_Range("G" + (row + 1).ToString()).Value = content[1].stream;eWorksheet.get_Range("H" + (row + 1).ToString()).Value = content[2].water;eWorksheet.get_Range("I" + (row + 1).ToString()).Value = content[2].stream;eWorksheet.get_Range("J" + (row + 1).ToString()).Value = content[3].water;eWorksheet.get_Range("K" + (row + 1).ToString()).Value = content[3].stream;eWorksheet.get_Range("L" + (row + 1).ToString()).Value = content[4].water;eWorksheet.get_Range("M" + (row + 1).ToString()).Value = content[4].stream;eWorksheet.get_Range("N" + (row + 1).ToString()).Value = content[5].water;eWorksheet.get_Range("O" + (row + 1).ToString()).Value = content[5].stream;eWorksheet.get_Range("P" + (row + 1).ToString()).Value = content[6].water;eWorksheet.get_Range("Q" + (row + 1).ToString()).Value = content[6].stream;eWorksheet.get_Range("R" + (row + 1).ToString()).Value = content[7].water;eWorksheet.get_Range("S" + (row + 1).ToString()).Value = content[7].stream;eWorksheet.get_Range("T" + (row + 1).ToString()).Value = content[8].water;eWorksheet.get_Range("U" + (row + 1).ToString()).Value = content[8].stream;eWorksheet.get_Range("V" + (row + 1).ToString()).Value = content[9].water;eWorksheet.get_Range("W" + (row + 1).ToString()).Value = content[9].stream;eWorksheet.get_Range("X" + (row + 1).ToString()).Value = content[10].water;eWorksheet.get_Range("Y" + (row + 1).ToString()).Value = content[10].stream;eWorkbook.Save();ex.Quit();this.Focus();label4.Text = DateTime.Now.ToShortDateString() + DateTime.Now.ToShortTimeString() + "记录完毕!";#endregion}
}

其他杂项 - 包括函数以及菜单点击事件和通知相关操作

View Code

private int GetMonthFromYear(DateTime time) //获取农历数据中的月份
        {ChineseLunisolarCalendar clc = new ChineseLunisolarCalendar();if (clc.GetLeapMonth(time.Year) != 0)   //存在闰月
            {if (clc.GetMonth(time) > clc.GetLeapMonth(time.Year))   //如果月份大于闰月
                {return clc.GetMonth(time) - 1;}}return clc.GetMonth(time);}private void Form1_SizeChanged(object sender, EventArgs e){if (this.WindowState == FormWindowState.Minimized){this.Visible = false;this.notifyIcon1.Visible = true;}}private void notifyIcon1_MouseUp(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){if (this.Visible == false){this.Visible = true;this.WindowState = FormWindowState.Normal;}else{this.Visible = false;this.WindowState = FormWindowState.Minimized;}}else if (e.Button == MouseButtons.Right){notifyIcon1.ContextMenuStrip = contextMenuStrip2;}}private void 显示主窗体ToolStripMenuItem_Click(object sender, EventArgs e){this.Visible = true;this.Focus();this.WindowState = FormWindowState.Normal;}private void 退出ToolStripMenuItem1_Click(object sender, EventArgs e){Application.Exit();}private void 主窗体显示ToolStripMenuItem_Click(object sender, EventArgs e){this.Visible = true;this.Focus();this.WindowState = FormWindowState.Normal;}private void 打开Excel查看ToolStripMenuItem_Click(object sender, EventArgs e){btOpenFile_Click(btOpenFile, e);打开Excel查看ToolStripMenuItem.Text = btOpenFile.Text;}private void 退出ToolStripMenuItem_Click(object sender, EventArgs e){Application.Exit();}

timer2_Tick 事件:

View Code

private void timer2_Tick(object sender, EventArgs e)    //计时器2
{label4.Text = "上一次操作时间:" + DateTime.Now.ToShortTimeString();btRecorder_Click(btRecorder, e);
}

timer3_Tick 事件:

View Code

private void timer3_Tick(object sender, EventArgs e)    //计时器3
{lbCountdown.Text = String.Format("{0:000}",(60 - (count % 60)));count++;if (DateTime.Now.Hour == 8 && DateTime.Now.Minute == 59 && DateTime.Now.Second == 30)  //最后时刻监测,若是还没有添加数据,则主动添加,并打开网页!
    {if (countRecorderDay == 0){btDownloadData_Click(btDownloadData, e);System.Diagnostics.Process.Start("http://www.cjh.com.cn/");timer1.Enabled = true;timer2.Enabled = false;}}if (DateTime.Now.Hour == 20 && DateTime.Now.Minute == 59 && DateTime.Now.Second == 30){if (countRecorderNight == 0){btDownloadData_Click(btDownloadData, e);System.Diagnostics.Process.Start("http://www.cjh.com.cn/");timer1.Enabled = true;timer2.Enabled = false;}}if (DateTime.Now.Hour == 10 && DateTime.Now.Minute == 30 && DateTime.Now.Second == 30)  //承接上面,若数据添加不全,则在一个半小时后再次添加!
    {btRefresh_Click(btRefresh, e);  //否则在执行20时的时候,此时网页还是8时的效果,因此还会加载一次!if (countRecorderDay == 0){btDownloadData_Click(btDownloadData, e);System.Diagnostics.Process.Start("http://www.cjh.com.cn/");}}if (DateTime.Now.Hour == 22 && DateTime.Now.Minute == 30 && DateTime.Now.Second == 30){btRefresh_Click(btRefresh, e);if (countRecorderNight == 0){btDownloadData_Click(btDownloadData, e);System.Diagnostics.Process.Start("http://www.cjh.com.cn/");}}
}

④ 源程序下载:>>☞i☜<<

修改:

1. 在加入文本的时候,之前是按字符串添加,因此到达Excel中也是字符串格式的数字文本,修改如下,将字符串转为数字格式再加入到Excel中!

eWorksheet.get_Range("D" + (row + 1).ToString()).Value = Convert.ToSingle(content[0].water);
eWorksheet.get_Range("E" + (row + 1).ToString()).Value = Convert.ToSingle(content[0].stream);eWorksheet.get_Range("F" + (row + 1).ToString()).Value = Convert.ToSingle(content[1].water);
eWorksheet.get_Range("G" + (row + 1).ToString()).Value = Convert.ToSingle(content[1].stream);

2. 若是直接将Excel中的文本转为数字类型,要首先将单元格的Value值转为String,如下所示!

for (int i = 4; i <= 56;i++ )
{eWorksheet.get_Range(str + i.ToString()).Value = Convert.ToSingle(eWorksheet.get_Range(str + i.ToString()).Value.ToString());
}

转载于:https://www.cnblogs.com/alex-bn-lee/archive/2012/07/05/2577371.html

【055】长江水文数据自动记录程序相关推荐

  1. 7-1 水文数据校验及处理 (50 分)

    ** 7-1 水文数据校验及处理 (50 分) ** 使用Java中的字符串处理类以及正则表达式对输入字符串数据进行合法性校验及计算.(具体需求参见附件 2021-OO第04次作业-1指导书V1.0. ...

  2. 计算机实验内容记录,关于实验数据自动记录到电脑上的问题

    关于实验数据自动记录到电脑上的问题以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 关于实验数据自动记录到电脑上的问题 实 ...

  3. 水文数据监测管理平台助力智慧水务数字化管理

    水文数据监测管理平台通过大量传感器数据采集,对水位.流量.含沙量.降雨量和水质等信息进行可视化处理,从而在手机端或电脑端实现远程监控.超限报警及远程控制等功能,同时通过云平台实时更新的数据图表对各地水 ...

  4. ADO.NET—数据提供程序(连接类)

    .NET Framework 数据提供程序是专门为数据处理以及快速地只进.只读访问数据而设计的组件. 一.Connection 1.介绍 开启程序和数据库之间的连结 ADO.NET底层 可自己产生对象 ...

  5. 谈一谈:抽象工厂+反射+配置文件 实现数据访问程序

    <大话设计模式>中第15章中<就不能不换DB吗?>引出了我今天要谈论的主题:抽象工厂+反射+配置文件 实现数据访问程序.当时也不甚理解啊!到了机房收费的亲身实践中,终于体会到了 ...

  6. 数据与程序分离——程序中那些表的事儿

    我们先来看一小段程序: const char *GetString(int key) {if (key == 1)return "first";else if (key == 2) ...

  7. .NET实现之(WebService数据提供程序)

    说起数据提供程序大家都不陌生,数据提供程序的作用就是以统一的接口去访问不同的数据源,如OledbProvider.SqlServerProvider.OrcaleProvider等等:不同数据源的访问 ...

  8. SSAS系列——【08】多维数据(程序展现Cube)

    原文:SSAS系列--[08]多维数据(程序展现Cube) 1.引用DLL? 按照之前安装的MS SQLServer的步骤安装完成后,发现在新建的项目中"Add Reference" ...

  9. Streamlit —使用数据应用程序更好地测试模型

    介绍 (Introduction) We use all kinds of techniques from creating a very reliable validation set to usi ...

最新文章

  1. Centos 下添加开机自启动服务和脚本
  2. Laravel 实现定时任务
  3. c++整理程序 dev_C编程从入门到实践:C语言开发工具详解(2)
  4. 从迁移到Java 7的小技巧
  5. jquery 与其他库冲突解决方案
  6. Java入门篇 2021/02/22
  7. Github项目汇总
  8. mysql gtid 备份恢复_MYSQL数据库备份恢复
  9. 异常的捕获 try...catch java
  10. MySQL 5.5 手册下载
  11. 一键生成安卓证书_【带壳截图+电影台词 生成器】
  12. [阅读记录]《新ABS_Guide_cn.txt》shell脚本的编写
  13. java程序本质,方法学之Java的本质
  14. android duiqi文字底部,Android中的文本/布局对齐(textAlignment,gravity)
  15. HDU 2544 最短路 Dijkstra
  16. 神舟bios更改第一启动项为u盘
  17. 外部方式启动AndroidStudio模拟器
  18. Ubuntu下Git安装图形化代码合并工具kdiff3
  19. 两台电脑通过网线互联进行文件共享
  20. java并发编程(二十六)——单例模式的双重检查锁模式为什么必须加 volatile?

热门文章

  1. react: menuService
  2. 【BZOJ4231】回忆树 离线+fail树+KMP
  3. 配置完centos 6以后,大概需要安装的软件(主要是yum)
  4. Jquery获取对象的几种方式介绍
  5. 若所有的参数皆需要类型转换——请为此采用non-member函数
  6. 多类SVM的损失函数
  7. ML 03、机器学习的三要素
  8. Android:动态加载布局
  9. MongoDB中_class字段的作用
  10. HTML5手机端弹窗、提示框、loading加载(多功能xwPop弹窗升级版)