簡體   English   中英

在VB上書寫Excel工作表

[英]Excel sheet writing on VB

我正在從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

輸出Excel表格

如果我使用將其更改為

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

正確寫入Excel工作表。 但是,如果我再加上一個瓦特瓦,則像圖像中那樣寫不正確

您正在編寫CSV,而不是Excel。 Excel只是您決定查看CSV的方法。 別難過,這是一個普遍的錯誤。

請在NOTEPAD中打開CSV,然后查看它是否正確。 如果是這樣,則需要寫入excel文件以獲得預期的結果,而不是CSV。

您應該真正考慮使用OLEDBINTEROP ,這需要做更多的工作,但是您對EXCEL擁有更多(OLEDB)或完整(INTEROP)的控制權。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM