Hej, Rakt ur hjärtat utan syntaxkontroll: Bara som en parentes - det kan vara lite joxigt att få Excel att stängas ner korrekt från en .NET-klient, beroende på att wrappern mellan .NET-klienten och COM-objektet för Excel håller reda på hur många referenser som gjorts till COM-objektet och vägrar släppa det förrän antalet referenser är noll (om jag förstått det hela rätt). Tack, jag ska testa en del i helgen och se om jag får till det som jag vill.Skapa Excelblad från visual basic 2005
Jag ska skriva ett program som ska läsa in lite olika filer från ett tiotal olika andra program, sedan ska programmet bearbeta all denna data för att sedan skapa ett excelblad som en resultatfil som sedan kan skickas till kund.
Och jag har skrivit en heldel i tidigare VB men aldrig sparat resultatet i excelfil direkt, och det ska inte bara in värden i kolumner utan jag ska även skapa olika kurver i excelbladet.
Så min fråga är om någon skulle kunna ge lite olika exempel på kod som skapar olika excelblad som man kan testa och prova eller har ideer om var jag kan hitta dylig information.
Mvh
Torgny VernerssonSv: Skapa Excelblad från visual basic 2005
Antar att du menar VB.NET!
Dim xl as Excel.Application
dim wbk as Excel.Workbook
'Skapa instans av Excel
xl=New Excel.Application
'Skapa en arbetsbok
wbk=xl.workbooks.add
'Lägg till ett kalkylblad
wbk.Worksheets.add
' Skriv data till arbetsbokens andra kalkylblad
wbk.Worksheets(2).Range("A1").value="Test"Sv:Skapa Excelblad från visual basic 2005
Antalet referenser räknas upp när man gör nåt i stil med "foo = bar.<b>workbooks</b>.add" och räknar ner när man kör System.Runtime.InteropServices.Marshal.ReleaseComObject() -- förutsatt att man har ett objekt att köra den på.
Läsning:
support.microsoft.com/default.aspx?scid=kb;en-us;317109
Så här skulle man kunna tänka sig en början till en klass för att hantera exceldokument:
Public Class ExcelDocument
Implements IDisposable
Private myExcelApp As Excel.Application
Private myExcelDoc As Excel.Workbook
Private mySheet As Excel.Worksheet
Private myCells As Excel.Range
Public Sub New()
Dim theExcelDocs As Excel.Workbooks
Me.myExcelApp = New Excel.Application
Me.myExcelApp.Visible = False
theExcelDocs = myExcelApp.Workbooks
Me.myExcelDoc = theExcelDocs.Add
ReleaseCOMObject(theExcelDocs)
theExcelDocs = Nothing
Me.mySheet = DirectCast(Me.myExcelApp.ActiveSheet, Excel.Worksheet)
Me.myCells = Me.mySheet.Cells
End Sub
Private Shared Sub ReleaseCOMObject(ByVal anObject As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(anObject)
Catch ex As Exception
Finally
anObject = Nothing
End Try
End Sub
Private disposedValue As Boolean = False ' To detect redundant calls
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
ReleaseCOMObject(Me.myCells)
Me.myCells = Nothing
ReleaseCOMObject(Me.mySheet)
Me.mySheet = Nothing
Me.myExcelDoc.Close(False)
ReleaseCOMObject(Me.myExcelDoc)
Me.myExcelDoc = Nothing
Me.myExcelApp.Quit()
ReleaseCOMObject(Me.myExcelApp)
Me.myExcelApp = Nothing
End If
End If
Me.disposedValue = True
End Sub
End Class
Sv:Skapa Excelblad från visual basic 2005
Mvh
Torgny Vernersson