2017-11-24 6 views
0

Ich versuche, in eine Excel-Datei in VB zu schreiben, aber ich habe Probleme aufgrund einer Nested-Loop-Struktur (denke ich). Mein Code ist wie folgt:VB Schreiben nach Excel

Public Class Form1 
Dim SheetIncrementValue As Integer = 1 
Dim FilePath As String 
Dim j As Integer = 0  

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim TestOutput() As Double 
    If j = 0 Then 
     If SheetIncrementValue = 1 Then 
      wb = xl.Workbooks.Add 'create new workbook 
      ws = wb.Worksheets(SheetIncrementValue) 
      ws.Activate() 
      ws.Cells(j + 1, 1) = TestOutput(j) 
      Dim sfd1 As New SaveFileDialog() 
SetPath If sfd1.ShowDialog() = DialogResult.OK Then 
       wb.SaveAs(sfd1.FileName) 'save data to file 
       ws.Name = "Temperature " & TempSetting 
       FilePath = sfd1.FileName 
       wb.Close() 
       xl = Nothing 'dispose of excel 
      Else 
       MsgBox("please choose a file path and file name") 
       GoTo SetPath 
      End If 
     Else 
      wb = xl.Workbooks.Open(FilePath) 
      Dim worksheets As Excel.Sheets = wb.Worksheets 
      Dim xlNewSheet = DirectCast(worksheets.Add(worksheets(1), Type.Missing, Type.Missing, Type.Missing), Excel.Worksheet) 
      xlNewSheet.Name = "Output " & SheetIncrementValue 
      xlNewSheet.Cells(j + 1, 1) = TestOutput(j) 
      wb.Close() 
      xl = Nothing 'dispose of excel 
     End If 
    Else 
     wb = xl.Workbooks.Open(FilePath) 
     Dim worksheets As Excel.Sheets = wb.Worksheets 
     'Dim xlNewSheet = DirectCast(worksheets.Add(worksheets(1), Type.Missing, Type.Missing, Type.Missing), Excel.Worksheet) 
     Dim xlNewSheet = wb.Worksheets("Output " & SheetIncrementValue) 
     xlNewSheet.Cells(j + 1, 1) = TestOutput(j) 
     wb.Close() 
     xl = Nothing 'dispose of excel 
    End If 
    j = j + 1 
    SheetIncrementValue = SheetIncrementValue + 1 
End Sub 
End Class 

Es funktioniert gut, wenn j = 0, aber für höhere Schritten den Fehler auslöst: ‚Der Objektverweis wurde nicht auf eine Instanz eines Objekts festgelegt‘ in der Dateipfadzeile. Da die Datei bereits existiert und die Variable FilePath zugewiesen wurde (ich habe sie geprüft), wie öffne ich die Datei erneut, um mehr Daten in das selbe Blatt zu schreiben?

Ich stelle fest, dass die Verwendung von 'j' und 'Blatt Inkrement Wert' hier überflüssig ist, aber sie haben Funktionen in meinem vollständigen Code.

Alle Tipps geschätzt.

Dank

+0

Dieses korrekt markiert ist, in Visual Studio vb.net mit der Entwicklung. – cohara

Antwort

3

Keine Notwendigkeit, so viele Zeilen Code zu schreiben, verwenden Sie einfach GemBox SpreadSheet

+0

Danke, weißt du irgendeine Art, die keine neuen Bibliotheken benötigt (die meine E-Mail-Adresse zum Download benötigen)? – cohara

+0

Es gibt immer einen anderen Weg ... Ich kann dir einige Codes geben, die du benutzen kannst, aber das wird sehr zeitaufwendig ... willst du es noch? –

+0

Nein danke, hab es :-) – cohara