PDA

Vollständige Version anzeigen : Speichern von Daten in Excel File?


loggo
14.12.2007, 22:09
Hi! Ich programmiere derzeit an einer Applikation, die mir einige Werte berechnet.

Ich möchte diese Werte schön geordnet speichern (Nicht in einer Datenbank).

Dazu möchte ich eine Excel File öffnen
mittels:

FileOpen(1, Me.SaveFileDialog1.FileName, OpenMode.Output)

Nun möchte ich in einige Zellen meine werte reinschreiben.

Ist das überhaupt möglich und wenn ja wie ist das machbar?

Wenn nein, kann man in Word eine Tabelle erstellen lassen und dann dortrein die Werte schreiben?

Mir wäre die Excel Variante lieber, wenn möglich.

Ich danke im Vorhinein für die Hilfe!

Grüße, loggo

wincnc
15.12.2007, 07:28
Hallo, schau mal hier nach:
Reading/writing Excel files in VB.NET (http://kdaviesb.blogspot.com/2007/06/readingwriting-excel-files-in-vbnet.html)

loggo
15.12.2007, 15:50
Danke für die rasche Hilfe!

loggo
15.12.2007, 16:14
Ich verstehe zwar größten Teils den Sinn des ganzen nur habe ich Probleme

hier: Folgende zeile lässt option strict on die konvertierung von system.object in excel. worksheet nicht zu.
myWorkSheet = myWorkBook.Sheets.Item(1)

ich habe ein globales Array. diese ca 25 Werte möchte ich in die Zellen A1 bis A25 legen. wie mache ich das am besten, das blicke ich nicht ganz durch!

Bitte um Hilfe!

wincnc
15.12.2007, 16:42
Hallo

Ich habe das mal getestet. Es sind ein paar kleine Fehler drin.
Hast Du einen Verweis auf Microsoft Excel xx.0 Object Library hinzugefügt?
Bei mir läuft es so:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim xcFileInfo As IO.FileInfo
Dim xcFileDialog As New OpenFileDialog()
xcFileDialog.Filter = "Excel Spreadsheet Files!|*.xls"
xcFileDialog.Title = "Select estimate in excel spreadsheet file!"

If xcFileDialog.ShowDialog = DialogResult.OK Then
xcFileInfo = New IO.FileInfo(xcFileDialog.FileName)

Dim myExcel As Excel.Application ' Interface to Excel
Dim myWorkBookCollection As Excel.Workbooks ' Workbook-collection (note the 's' at the end)
Dim myWorkBook As Excel.Workbook ' Single Workbook (spreadsheet-collection)
Dim myWorkSheet As Excel.Worksheet ' Single spreadsheet

' Initialize the interface to Excel.exe
myExcel = New Excel.Application

If myExcel Is Nothing Then
MessageBox.Show("Could not load Excel.exe")
Exit Sub
End If

' initialise access to Excel's workbook collection
myWorkBookCollection = myExcel.Workbooks

'open spreadsheet from disk
myWorkBook = myWorkBookCollection.Open(xcFileInfo.FullName, , False)

'get 1st sheet from workbook
myWorkSheet = myWorkBook.Sheets.Item(1)

'alter contents of 1st cell
Dim myCell As Object = myWorkSheet.Range("A1", System.Reflection.Missing.Value)
myCell.Value2 = "I did it again!!!"

'display the spreadsheet
'myExcel.Visible = True
'Read Cell A2
Dim myCell2 As Object = myWorkSheet.Range("A2", System.Reflection.Missing.Value)

Me.Text = myCell.Value2

'save and get out
myWorkBook.Save()
myExcel.Quit()

End If
End Sub
End Class

loggo
15.12.2007, 17:02
habe ich hinzugefügt.

Du hast mir da ja jetzt das selbe geschickt was auch unter dem Link zu erreichen ist.

Ich werde daraus ned ganz schlau.

1. is da der Fehler, dass option strict on folgendes nicht zulässt:
myWorkSheet = myWorkBook.Sheets.Item(1)

2.verstehe ich das überhaupt nicht:

'alter contents of 1st cell
Dim myCell As Object = myWorkSheet.Range("A1", System.Reflection.Missing.Value)
myCell.Value2 = "I did it again"

'display the spreadsheet
'myExcel.Visible = True
'Read Cell A2
Dim myCell2 As Object = myWorkSheet.Range("A2", System.Reflection.Missing.Value)

Me.Text = myCell.Value2

3. Wie kann ich mein Array mit 25 Feldern in die Zellen A3 - A28 schreiben? das brauche ich.

wincnc
15.12.2007, 17:34
Nein, das ist nicht ganz das selbe. Ich sagte ja, dass ein paar kleine Fehler drin waren. Schalt doch einfach mal Option Strict aus. Bei mir läuft das auch mit Option Strict. Das ganze ist auch nur ein Beispiel damit Du siehst wie man Excel liest und schreibt.

Hier wird in die Zelle A1 I did it again geschrieben.

Dim myCell As Object = myWorkSheet.Range("A1", System.Reflection.Missing.Value)
myCell.Value2 = "I did it again"


Hier wird der Text aus der Zelle A1 gelesen und in der Titelzeile deiner Form angezeigt.

Dim myCell2 As Object = myWorkSheet.Range("A2", System.Reflection.Missing.Value)

Me.Text = myCell.Value2


Dein Array zu schreiben würde so aussehen:

Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim xcFileInfo As IO.FileInfo
Dim xcFileDialog As New OpenFileDialog()
xcFileDialog.Filter = "Excel Spreadsheet Files!|*.xls"
xcFileDialog.Title = "Select estimate in excel spreadsheet file!"

If xcFileDialog.ShowDialog = DialogResult.OK Then
xcFileInfo = New IO.FileInfo(xcFileDialog.FileName)

Dim myExcel As Excel.Application ' Interface to Excel
Dim myWorkBookCollection As Excel.Workbooks ' Workbook-collection (note the 's' at the end)
Dim myWorkBook As Excel.Workbook ' Single Workbook (spreadsheet-collection)
Dim myWorkSheet As Excel.Worksheet ' Single spreadsheet

' Initialize the interface to Excel.exe
myExcel = New Excel.Application

If myExcel Is Nothing Then
MessageBox.Show("Could not load Excel.exe")
Exit Sub
End If

' initialise access to Excel's workbook collection
myWorkBookCollection = myExcel.Workbooks

'open spreadsheet from disk
myWorkBook = myWorkBookCollection.Open(xcFileInfo.FullName, , False)

'get 1st sheet from workbook
myWorkSheet = myWorkBook.Sheets.Item(1)

' Dein Array schreiben von A3 - A28
For N As Integer = 1 To 25
myWorkSheet.Cells(N + 2, "A") = DeinArray(N) ' Das muss durch Deinen Array Namen ersetzt werden.
Next

'save and get out
myWorkBook.Save()
myExcel.Quit()

End If
End Sub
End Class

loggo
15.12.2007, 18:34
also muss ich keine Variable namens mycell definieren! Danke, das hilft!

loggo
15.12.2007, 23:14
Ich bekomme jetzt dauernd einen Fehler bei folgender Zeile!

'get 1st sheet from workbook
myWorkSheet = myWorkBook.Sheets.Item(1)

Auch wenn strict off ist, wenn strict on is, dann wird das sowieso unterstrichen!

Fehlermeldung: Die angegebene Umwandlung ist ungültig!

Was passt da dran nicht?

loggo
22.12.2007, 18:46
Danke es funktioniert jetzt.

Eine Frage hätte ich noch.

Wie kann ich eine Spalte in Excel vom studio aus ausblenden lassen? welchen befehl benötige ich da?

wincnc
22.12.2007, 19:33
Hallo
Um z. B. die Spalte D auszublenden:
myWorkSheet.Columns("D").EntireColumn.Hidden = True