使用VB连续接收COM端口数据到excel [英] continuous receiving of COM port data to excel using VB

查看:116
本文介绍了使用VB连续接收COM端口数据到excel的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想接收COM端口到Excel工作表的数据。它应该是一个连续运行的过程。我编写了一个代码,但是当它运行时,会创建多个excel工作簿。我想在单个工作簿中接收数据。请帮助纠正代码或共享可以成功完成任务的代码



谢谢,



我的代码是





'我们将在代码中使用的导入系统

进口系统

Imports System.ComponentModel

Imports System.Threading

Imports System.IO.Ports

Imports Excel = Microsoft.Office .Interop.Excel



'frmMain是我们表格的名称....

'这里开始我们的主要表格代码...... ..

Public class frmMain

Dim myPort As Array

委托Sub SetTextCallback(ByVal [text] As String)





'页面加载代码从这里开始....

Private Sub frmMain_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)处理MyBase.Load

myPort = IO.Ports.SerialPort.GetPortNames()

cmbBaud.Items.Add(9600)

cmbBaud.Items.Add(19200)

cmbBaud.Items.Add(38400)

cmbBaud.Items.Add(57600)

cmbBaud。 Items.Add(115200)

For i = 0 To UBound(myPort)

cmbPort.Items.Add(myPort(i))

下一页

cmbPort.Text = cmbPort.Items.Item(0)

cmbBaud.Text = cmbBaud.Items.Item(0)

btnDisconnect .Enabled = False

End Sub

'页面加载代码在此结束....





'连接按钮代码从这里开始....

Private Sub btnConnect_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)处理btnConnect.Click

SerialPort1.PortName = cmbPort.Text

SerialPort1.BaudRate = cmbBaud.Text

SerialPort1.Parity = IO.Ports.Parity.None

SerialPort1.StopBits = IO.Ports.StopBits.One

SerialPort1.DataBits = 8

SerialPort1.Open()

btnConnect.Enabled = False

btnDisconnect.Enabled = True

结束Sub

'连接按钮代码在此结束....





'断开按钮代码从这里开始。 ...

Private Sub btnDisconnect_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)处理btnDisconnect.Click

SerialPort1.Close()

btnConnect.Enabled = True

btnDisconnect.Enabled = False

End Sub

'断开按钮代码在此结束....





'发送按钮代码从这里开始....

Private Sub btnSend_Click(ByVal sender As System .Object,ByVal e As System.EventArgs)处理btnSend.Click

SerialPort1.Write(txtTransmit.Text)

结束子

'发送按钮代码在这里结束....





'串行端口接收代码从这里开始....

Private Sub SerialPort1_DataReceived(ByVal sender As Object,ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)处理SerialPort1.DataReceived

ReceivedText(SerialPort1.ReadExisting())

End Sub

'串口接收代码在此结束....

< br $>


'串行端口接收代码(调用)从这里开始....

Private Sub ReceivedText(ByVal [text] As String)

Dim excelApp As Excel.Application

Dim excelWB As Excel.Workbook

Dim excelWS As Excel.Worksheet

Dim ass作为字符串

excelApp = CreateObject(Excel.Application)



excelWB = excelApp.Workbooks.Add

excelWS = excelWB.Worksheets(1)

excelApp.Visible = True





如果Me.rtbReceived 。 InvokeRequired然后

Dim x As New SetTextCallback(AddressOf ReceivedText)

Me.Invoke(x,New Object(){(text)})

Else

Me.rtbReceived.Text&= [text]

ass = Me.rtbReceived.Text

结束如果

for rowCounter = 1 To 100

excelWS.Cells(rowCounter,1).Value = ass

Next rowCounter

End Sub

'串行端口接收代码(调用)在此结束....





'Com端口更改警告代码从这里开始....

Private Sub cmbPort_SelectedIndexChanged(ByVal sender As System.Object,ByVal e As System.EventArgs)处理cmbPort.SelectedIndexChanged

如果SerialPort1.IsOpen =错误然后

SerialPort1.PortName = cmbPort.Text

否则

MsgBox(仅在端口关闭时有效,vbCritical)

结束如果

结束次级

'Com端口更改警告代码在此结束....





'波特率更改警告代码从这里开始....

Private Sub cmbBaud_SelectedIndexChanged(ByVal sender As System.Object,ByVal e As System.EventArgs)处理cmbBaud .SelectedIndexChanged

如果SerialPort1.IsOpen = False那么

SerialPort1.BaudRate = cmbBaud.Text

否则

MsgBox (仅在端口关闭时有效,vbCritical)

结束如果

结束子

'波特率更改警告代码在此结束.. ..





结束班

'整码在此结束........

i want to receive data of COM port to Excel worksheet. it should be a continuous running process. i have written a code but when it runs, creates multiple excel workbooks . i want to receive data in single workbook. please help to rectify the code or share a code that can perform the task successfully

Thanks,

my code is


'Import Systems which we are gonna use in our code
Imports System
Imports System.ComponentModel
Imports System.Threading
Imports System.IO.Ports
Imports Excel = Microsoft.Office.Interop.Excel

'frmMain is the name of our form ....
'Here starts our main form code .....
Public Class frmMain
Dim myPort As Array
Delegate Sub SetTextCallback(ByVal [text] As String)


'Page Load Code Starts Here....
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
myPort = IO.Ports.SerialPort.GetPortNames()
cmbBaud.Items.Add(9600)
cmbBaud.Items.Add(19200)
cmbBaud.Items.Add(38400)
cmbBaud.Items.Add(57600)
cmbBaud.Items.Add(115200)
For i = 0 To UBound(myPort)
cmbPort.Items.Add(myPort(i))
Next
cmbPort.Text = cmbPort.Items.Item(0)
cmbBaud.Text = cmbBaud.Items.Item(0)
btnDisconnect.Enabled = False
End Sub
'Page Load Code Ends Here ....


'Connect Button Code Starts Here ....
Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
SerialPort1.PortName = cmbPort.Text
SerialPort1.BaudRate = cmbBaud.Text
SerialPort1.Parity = IO.Ports.Parity.None
SerialPort1.StopBits = IO.Ports.StopBits.One
SerialPort1.DataBits = 8
SerialPort1.Open()
btnConnect.Enabled = False
btnDisconnect.Enabled = True
End Sub
'Connect Button Code Ends Here ....


'Disconnect Button Code Starts Here ....
Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click
SerialPort1.Close()
btnConnect.Enabled = True
btnDisconnect.Enabled = False
End Sub
'Disconnect Button Code Ends Here ....


'Send Button Code Starts Here ....
Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
SerialPort1.Write(txtTransmit.Text)
End Sub
'Send Button Code Ends Here ....


'Serial Port Receiving Code Starts Here ....
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
ReceivedText(SerialPort1.ReadExisting())
End Sub
'Serial Port Receiving Code Ends Here ....


'Serial Port Receiving Code(Invoke) Starts Here ....
Private Sub ReceivedText(ByVal [text] As String)
Dim excelApp As Excel.Application
Dim excelWB As Excel.Workbook
Dim excelWS As Excel.Worksheet
Dim ass As String
excelApp = CreateObject("Excel.Application")

excelWB = excelApp.Workbooks.Add
excelWS = excelWB.Worksheets(1)
excelApp.Visible = True


If Me.rtbReceived.InvokeRequired Then
Dim x As New SetTextCallback(AddressOf ReceivedText)
Me.Invoke(x, New Object() {(text)})
Else
Me.rtbReceived.Text &= [text]
ass = Me.rtbReceived.Text
End If
For rowCounter = 1 To 100
excelWS.Cells(rowCounter, 1).Value = ass
Next rowCounter
End Sub
'Serial Port Receiving Code(Invoke) Ends Here ....


'Com Port Change Warning Code Starts Here ....
Private Sub cmbPort_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbPort.SelectedIndexChanged
If SerialPort1.IsOpen = False Then
SerialPort1.PortName = cmbPort.Text
Else
MsgBox("Valid only if port is Closed", vbCritical)
End If
End Sub
'Com Port Change Warning Code Ends Here ....


'Baud Rate Change Warning Code Starts Here ....
Private Sub cmbBaud_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbBaud.SelectedIndexChanged
If SerialPort1.IsOpen = False Then
SerialPort1.BaudRate = cmbBaud.Text
Else
MsgBox("Valid only if port is Closed", vbCritical)
End If
End Sub
'Baud Rate Change Warning Code Ends Here ....


End Class
'Whole Code Ends Here ........

推荐答案

来吧,看看你自己的逻辑。每次调用ReceivedText时你在做什么?你正在创造一个全新的工作簿!这告诉你什么?
Come on, look at your own logic. What are you doing every time ReceivedText is called?? YOU'RE CREATING A WHOLE NEW WORKBOOK! What does that tell you??


这篇关于使用VB连续接收COM端口数据到excel的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆