上一贴中提到接收的串口数据并写入Excel的完整程序

ymount 2014-11-24 09:07:40

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);
}

}
}
...全文
538 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
泡泡龙 2014-11-24
  • 打赏
  • 举报
回复
application.displayalert=false
wind_cloud2011 2014-11-24
  • 打赏
  • 举报
回复
objExcelApp.ActiveWorkbook.SaveAs("d:\\test.xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); 不会有提示
buickjinivc 2014-11-24
  • 打赏
  • 举报
回复
你遇到什么问题了? 串口假死? 写excel假死?
ymount 2014-11-24
  • 打赏
  • 举报
回复
每次运行到红色位置都会出现如图提示,但是点击“是”后继续运行,不会影响Excel文件的结果。
C#串口介绍以及简单串口通信程序设计实现 源代码和串口程序介绍连接:https://www.cnblogs.com/JiYF/p/6618696.html 本站积分太贵,自己变得。。直接到连接地址下载代码 周末,没事干,写个简单的串口通信工具,也算是本周末曾来过,废话不多,直接到主题 串口介绍   串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。(至于再详细,自己百度) 串口应用:   工业领域使用较多,比如:数据采集,设备控制等等,好多都是用串口通信来实现!你要是细心的话,你会发现,目前家用国网智能电能表就具备RS485通信总线(串行总线的一种)与RS232可以相互转化(当然一般,非专业的谁也不会闲的蛋疼,趴电表上瞎看,最多也就看看走了多少度电) RS232 DB9介绍: 1.示意图 2.针脚介绍: 载波检测(DCD) 接受数据(RXD) 发出数据(TXD) 数据终端准备好(DTR) 信号地线(SG) 数据准备好(DSR) 请求发送(RTS) 清除发送(CTS) 振铃指示(RI) 3.实物图: 以下是我购买XX公司的一个usb转串口线:这个头就是一个公头,另一端是一个usb口 笨小孩串口工具运行图: 1.开启程序 2.发送一行字符串HelloBenXH,直接将针脚的发送和接收链接起来就可以测试了(针脚2 接受数据(RXD) 和3 发出数据(TXD))直接链接, C#代码实现:采用SerialPort 1.实例化一个SerialPort [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 private SerialPort ComDevice = new SerialPort(); 2.初始化参数绑定接收数据事件 [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 public void init() { btnSend.Enabled = false; cbbComList.Items.AddRange(SerialPort.GetPortNames()); if (cbbComList.Items.Count > 0) { cbbComList.SelectedIndex = 0; } cbbBaudRate.SelectedIndex = 5; cbbDataBits.SelectedIndex = 0; cbbParity.SelectedIndex = 0; cbbStopBits.SelectedIndex = 0; pictureBox1.BackgroundImage = Properties.Resources.red; ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);//绑定事件 }

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧