在VB上写Excel表格

时间:2014-09-26 09:05:56

标签: vb.net vba excel-vba excel

我从arduino串口收集数据并在VB上打印。同时我写入excel表和绘图图。我在写入excel表时遇到问题。数据被正确发送,但在写入excel时,两个字符串 这是我的代码

 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Static counter As Integer = 0
        Static average_sum As Double = 0
        Static Avg_count As Integer = 0
        Dim voltage As Double = 24
        Dim Power As Double
        Static Cc_count As Long = 0
        Static watt_hour As Double


        Try

            SerialPort1.Write("c")
            System.Threading.Thread.Sleep(250)
            Dim k As Double
            Dim distance As String = SerialPort1.ReadLine()
            k = CDbl(distance)
            ListBoxSensor.Text = k
            Dim s As New Series
            counter = counter + 1
            Count_val.Text = counter

            Avg_count = Avg_count + 1
            ' drawing graph 

            If Avg_count = 1 Then
                Power = (distance * voltage) / 3600
                watt_hour = watt_hour + Power
                'Twatt.Text = watt_hour
                Display.Text = watt_hour
                voltage_text.Text = 24

                System.Threading.Thread.Sleep(250)
                If watt_hour > 1000 Then
                    watt_hour = 1.0 + watt_hour
                End If

                Avg_count = Avg_count + 1

            End If
            If Avg_count > 1 Then
                Avg_count = 0
            End If

            Dim current As Double = watt_hour
            'Dim current As Double = k
            Dim r As DataRow = dT.NewRow
            r("time") = Now
            'r("current") = k
            r("current") = watt_hour
            'add the row
            dT.Rows.Add(r)

            'remove any row older than 1 minute
            Dim oldestTime As DateTime = Now.AddMinutes(-1)
            Do While DirectCast(dT.Rows(0)("time"), DateTime) < oldestTime

                dT.Rows.RemoveAt(0)

            Loop
            'finally bind the chart....
            Chart1.DataBind()

            'write into excel sheet for every 1 minute ..................
            If Cc_count < 10 Then
                Cc_count = Cc_count + 1
                Dim array(10) As Double
                For value As Double = 0 To Cc_count
                    array(Cc_count) = distance
                    average_sum = average_sum + array(Cc_count)
                    value = value + 1
                    V_count.Text = value

                    AVG_count_text.Text = Cc_count
                    If value > 10 Then
                        average_sum = average_sum / value
                        System.Threading.Thread.Sleep(250)
                        AVG_CR1.Text = average_sum
                        Cc_count = 0
                    End If

                Next

            End If

            If counter = 1 Then
                counter = 0
                Dim headerText = ""
                'Dim headerText As New StringBuilder=
                Dim csvFile As String = IO.Path.Combine(My.Application.Info.DirectoryPath, "Current.csv")

                If Not IO.File.Exists((csvFile)) Then
                    'headerText = "Date,TIME ,current, "
                    headerText = "Date-TIME ,current,Watt, "
                End If

                Using outFile = My.Computer.FileSystem.OpenTextFileWriter(csvFile, True)
                    If headerText.Length > 0 Then
                        outFile.WriteLine(headerText)
                    End If

                    'Dim date1 As String = "24-10-2014"
                    'Dim time1 As String = TimeOfDay()
                    Dim date1 As String = DateAndTime.DateString
                    Dim watt1 As String = CStr(watt_hour)
                    ' Dim x As String = date1 + "," + time1 + "," + distance + "," + watt1
                    Dim x As String = date1 + "," + distance + "," + watt1

                    outFile.Write(x)


                    'Dim x As String = date1 + "," + time1 + "," + distance
                    'outFile.Write(x)

                End Using
            End If
        Catch ex As Exception
        End Try
      End Sub

OUput excel sheet

如果我使用将其更改为

headerText = "Date,TIME ,current, "
Dim x As String = date1 + "," + time1 + "," + distance

正确写入excel表。但是如果我添加另一个参数瓦特,就像在图像中一样写不正确

1 个答案:

答案 0 :(得分:0)

您正在撰写CSV,而不是擅长。 Excel只是您决定查看CSV的方法。不要感觉不好,这是一个流行的错误。

请在NOTEPAD中打开CSV,看看它是否正确。如果是这样,您需要写入excel文件以获得您期望的结果,而不是CSV。

您应该真正考虑使用OLEDBINTEROP,这需要更多的工作,但您对EXCEL有更多(OLEDB)或完整(INTEROP)控制。