using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.IO.Ports;
using System.Runtime.InteropServices;
using System.IO;
//using System.Data.OleDb;
namespace Excel测试
{
public partial class Form1 : Form
{
Microsoft.Office.Interop.Excel.Application objExcelApp;//定义Excel Application对象
Microsoft.Office.Interop.Excel.Workbooks objExcelWorkBooks;//定义Workbook工作簿集合对象
Microsoft.Office.Interop.Excel.Workbook objExcelWorkbook;//定义Excel workbook工作簿对象
Microsoft.Office.Interop.Excel.Worksheet objExcelWorkSheet;//定义Workbook工作表对象
Microsoft.Office.Interop.Excel.Worksheet objExcelWorkSheetTemp;
SerialPort sp = new SerialPort();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
DateTime dt = DateTime.Now;
textBox1.Text += dt.GetDateTimeFormats('f')[0].ToString() + "\r\n";
}
private void btn_s_Click(object sender, EventArgs e)
{
objExcelApp.Quit();
}
/**************** 串口设置 **********/
void MySerialPort()
{
if (SerialPort.GetPortNames() == null)
{
MessageBox .Show ("本机没有串口!","Error");
return ;
}
try
{
//sp1.COM3
sp.PortName = "COM6";
sp.BaudRate = 9600; //波特率
sp.DataBits = 8; //数据位
sp.StopBits = StopBits.One; //停止位 参数:One ,Onepointfive,Two
sp.Parity = Parity.None; //校验位 参数:None,Odd,Even
if (sp.IsOpen == true) //如果打开状态,则先关闭一下
{
sp.Close();
}
sp.Open();
} //打开串口
catch (System.Exception ex)
{
MessageBox.Show("Error:" + ex.Message, "Error");
return;
}
}
/*************** 串口接收数据 **************/
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
if (sp.IsOpen)
{
try
{
Byte[] receivedData = new Byte[sp.BytesToRead]; //创建接收字节数组
sp.Read(receivedData, 0, receivedData.Length); //读取数据
//string text = sp.Read();
sp.DiscardInBuffer();
string strRcv = null;
for (int i = 0; i < receivedData.Length; i++) //窗体显示
{
// strRcv += ((char )Convert.ToInt32(receivedData[i]));//显示字符
strRcv += receivedData[i].ToString("X2"); //16进制显示
}
textBox1.Text += strRcv + "\r\n";
OPExcel(receivedData);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message, "出错提示");
textBox1.Text = "";
}
}
}
/************* 数据处理及显示 *****************/
void NumberWork(byte[]tD)
{
String t1_1, t1_2, t2_1, t2_2, t3;
if (tD[1] == 0)
{
t1_1 = tD[1].ToString() + tD[2].ToString() + tD[3].ToString();
t2_1 = tD[4].ToString() + tD[5].ToString() + tD[6].ToString() +tD[7].ToString();
t1_2 = tD[8].ToString() + tD[9].ToString();
t2_2 = tD[10].ToString() + tD[11].ToString() +tD[12].ToString() +tD[13].ToString();
t3 = tD[14].ToString() + tD[15].ToString() + tD[16].ToString() + tD[17].ToString();
int n = objExcelWorkSheetTemp.UsedRange.Cells.Rows.Count;
objExcelWorkSheetTemp.Cells[n + 1, 2] = t1_1.Trim();//写入数据
objExcelWorkSheetTemp.Cells[n + 1, 3] = t2_1.Trim();//写入数据
objExcelWorkSheetTemp.Cells[n + 1, 4] = t1_2.Trim();//写入数据
objExcelWorkSheetTemp.Cells[n + 1, 5] = t2_2.Trim();//写入数据
objExcelWorkSheetTemp.Cells[n + 1, 6] = t3.Trim();//写入数据
}
}
/**************** 打开Excel ***************/
void OPExcel(byte[]t)
{
// Byte[] receivedData = new Byte[sp.BytesToRead]; //创建接收字节数组
//sp.Read(receivedData, 0, receivedData.Length); //读取数据
//string text = sp.Read();
sp.DiscardInBuffer();
objExcelApp = new Microsoft.Office.Interop.Excel.Application();
objExcelWorkBooks = objExcelApp.Workbooks;
String a = DateTime.Now.ToString("yyyy-MM-dd");
if (File.Exists("E:/C#程序/Test1/串口测试/Excel测试/excel/" + a + ".xls"))
{
objExcelWorkbook = objExcelWorkBooks.Open("E:/C#程序/Test1/串口测试/Excel测试/excel/" + a,0, false, 5, "", "",
true,Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
}
else
{
objExcelWorkbook = objExcelWorkBooks.Open("E:/C#程序/Test1/串口测试/Excel测试/excel/数据采集", 0, false, 5, "", "", true,
Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
}
objExcelWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)objExcelWorkbook.Worksheets[1]; //strSheetName是指的Excel工作簿的Sheet名,如果没有命名则为"1"
objExcelWorkSheet.Select(Type.Missing);
objExcelWorkSheetTemp = (Microsoft.Office.Interop.Excel.Worksheet)objExcelApp.ActiveSheet;
NumberWork(t);
objExcelWorkbook.SaveAs(@"E:\C#程序\Test1\串口测试\Excel测试\excel\" + a); objExcelWorkbook.Close();
objExcelWorkBooks.Close();
}
private void btn_e_Click(object sender, EventArgs e)
{
this.Close ();
}
private void btn_c_Click(object sender, EventArgs e)
{
textBox1.Text = "";
DateTime dt = DateTime.Now;
textBox1.Text += dt.GetDateTimeFormats('f')[0].ToString() + "\r\n";
}
private void btn_rcv_Click(object sender, EventArgs e)
{
MySerialPort();
//OPExcel();
sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
}
}
}