急求解决方案~~
现有此段程序,找人代写的,现在需要把EXCEL表格里的27行到290行theta列和gain.line列数据再重复读入一次进行计算,怎么实现,请高手帮忙修改。。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.IO;
namespace math
{
public partial class Form1 : Form
{
private string strOpenFilePath = "";
private string strSaveFilePath = "";
private double iValue = 0;
public Form1()
{
InitializeComponent();
btnOpen.Click += new EventHandler(btnOpen_Click);
btnSave.Click += new EventHandler(btnSave_Click);
btnCompute.Click += new EventHandler(btnCompute_Click);
btnClear.Click += new EventHandler(btnClear_Click);
btnClose.Click += new EventHandler(btnClose_Click);
btnCompute.Enabled = false;
btnSave.Enabled = false;
}
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();//关闭按钮
}
/*清除按钮功能*/
private void btnClear_Click(object sender, EventArgs e)
{
txtSaveFilePath.Text = "";
txtOpenFliePath.Text = "";
txtValue.Text = "";
btnCompute.Enabled = false;
btnSave.Enabled = false;
}
private void btnSave_Click(object sender, EventArgs e)
{
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
strSaveFilePath = saveFileDialog1.FileName;
txtSaveFilePath.Text = strSaveFilePath;
string strMsg = "";
WriteFile(out strMsg);
if (strMsg != "")
MessageBox.Show(strMsg);
}
else
{
txtSaveFilePath.Text = "";
}
}
private void btnOpen_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
strOpenFilePath = openFileDialog1.FileName;
txtOpenFliePath.Text = strOpenFilePath;
btnCompute.Enabled = true;
}
else
{
txtOpenFliePath.Text = "";
btnCompute.Enabled = false;
}
}
private void btnCompute_Click(object sender, EventArgs e)
{
string strMsg = "";
DataSet ds = ReadExcle(strOpenFilePath, out strMsg);
if (strMsg != "")
{
MessageBox.Show(strMsg);
return;
}
if (ds.Tables.Count > 0)
{
iValue = 0;
ComputeValue(ds, out iValue);
txtValue.Text = iValue.ToString();
btnSave.Enabled = true;
}
else
{
txtValue.Text = "";
btnSave.Enabled = false;
}
}
/// <summary>
/// 写入文件
/// </summary>
/// <param name="iValue"></param>
/// <param name="msg"></param>
private void WriteFile(out string msg)
{
msg = string.Empty;
try
{
FileStream NewFile = new FileStream(strSaveFilePath, FileMode.Create, FileAccess.Write);
StreamWriter NewStream = new StreamWriter(NewFile);
NewStream.WriteLine(iValue.ToString());
NewStream.Flush();
NewStream.Close();
iValue = 0;
msg += "写入文件成功";
}
catch (IOException)
{
msg += "写入文件失败";
}
}
/// <summary>
/// 计算出想要的值
/// </summary>
/// <param name="ds"></param>
private void ComputeValue(DataSet ds,out double iValue)
{
Regex regex = new Regex("^[+-]?\\d+(\\.\\d+)?$");
iValue = 0;
double iCountValue = 0;
double iTheta = 0;
double iGainLin = 0;
double iCount = 0;
foreach (DataRow row in ds.Tables[0].Rows)
{
string dd = row[1].ToString();
string dx = row[2].ToString();
if (row[1] != null && row[1].ToString() != "Theta" && regex.IsMatch(row[1].ToString())
&& row[2] != null && row[2].ToString() != "Gain . Lin" && regex.IsMatch(row[2].ToString()))
{
iTheta = Math.Sign(double.Parse(row[1].ToString()));
iGainLin = double.Parse(row[2].ToString());
iCountValue += Math.Abs(iTheta * iGainLin);
iCount++;
}
}
iValue = 10* Math.Log10(iCountValue * Math.PI/iCount/2);
}
/// <summary>
/// 从Excel中获取数据.(无须指定表名,返回的DataSet包含此Excel中所有的表).
/// </summary>
/// <param name="filePath">Excel物理路径.</param>
/// <returns>DataSet:Excel中表的记录集合.</returns>
private DataSet ReadExcle(string filePath, out string msg)
{
string strSql = string.Empty;
msg = string.Empty;
DataSet ds = new DataSet();
DataTable dt = null;
OleDbDataAdapter adapter = null;
string strTableName = string.Empty;
if (filePath != string.Empty)
{
try
{
//判断是否为xls文件.
if (!filePath.Substring(filePath.Length - 3, 3).Equals("xls"))
{
throw new Exception("文件格式不正确");
}
string strConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + filePath + ";Extended Properties=Excel 8.0";
OleDbConnection conn = new OleDbConnection(strConnectionString);
conn.Open();
//获取Excel文件Schema信息.
DataTable dtschema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (dtschema != null && dtschema.Rows.Count > 0)
{
//遍历Excel中所有的表
foreach (DataRow row in dtschema.Rows)
{
strTableName = row[2].ToString().Trim(new char[] { '\'' });
if (IsTable(strTableName))
{
dt = new DataTable(strTableName.Replace('$', ' '));
strSql = string.Format("select * from [{0}]", strTableName);
adapter = new OleDbDataAdapter(strSql, conn);
adapter.Fill(dt);
ds.Tables.Add(dt);
}
}
}
conn.Close();
}
catch (Exception Ex)
{
msg += Ex.Message + "$";
}
}
else
{
msg += "没有这个文件";
}
return ds;
}
/// <summary>
/// 判定是否为Excel中包含记录的表.(排除掉打印区域等表格.e.g xx$print Area)
/// </summary>
/// <param name="tableName">Excel中获取到的表名.</param>
/// <returns></returns>
private bool IsTable(string tableName)
{
bool blIsTable = false;
if (tableName != string.Empty)
{
int nIndex = tableName.LastIndexOf("$");
if (nIndex != -1 && tableName.Length - 1 == nIndex)
{
blIsTable = true;
}
}
return blIsTable;
}
}
}
--------------------编程问答--------------------
0分贴,还这么麻烦的事情,谁干那
--------------------编程问答--------------------
我想给分的,但是发了以后不知道怎么追加给分
补充:.NET技术 , C#