Wie bekomme ich die Worksheetpart von Namen oder Blech-ID in OpenXML?
Folgende erstellt eine XLSX -, fügt zwei Arbeitsblätter, mit einigen Daten. Dann möchte ich in der Lage sein, um die Kalkulationstabelle später basierend auf dem Namen (oder am besten die id), so kann ich hinzufügen/ändern die Blätter zu einem späteren Zeitpunkt. Ich bin stecken, wie man das Blatt erneut, wo der code unvollständig ist unten.
Sub Main()
Using doc As SpreadsheetDocument = SpreadsheetDocument.Create(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "c:\temp\fubar.xlsx"), SpreadsheetDocumentType.Workbook)
Dim currSheet As WorksheetPart
' create the workbook
doc.AddWorkbookPart()
doc.WorkbookPart.Workbook = New Workbook()
doc.WorkbookPart.Workbook.AppendChild(New Sheets())
currSheet = InsertWorksheet(doc.WorkbookPart, "First")
currSheet.Worksheet.First().AppendChild(New Row())
currSheet.Worksheet.First().First().AppendChild(New Cell() With { _
.CellValue = New CellValue("1") _
})
currSheet = InsertWorksheet(doc.WorkbookPart, "Second")
currSheet.Worksheet.First().AppendChild(New Row())
currSheet.Worksheet.First().First().AppendChild(New Cell() With { _
.CellValue = New CellValue("1") _
})
For Each s As Sheet In doc.WorkbookPart.Workbook.Sheets
System.Diagnostics.Debug.WriteLine(s.Id)
System.Diagnostics.Debug.WriteLine(s.SheetId)
Next
cursheet = ... 'Get worksheetpart with name "First"
cursheet = ... 'Get worksheet with sheetid = 2
doc.WorkbookPart.Workbook.Save()
End Using
End Sub
Private Function InsertWorksheet(ByVal workbookPart As WorkbookPart, SheetName As String) As WorksheetPart
' Add a new worksheet part to the workbook.
Dim newWorksheetPart As WorksheetPart = workbookPart.AddNewPart(Of WorksheetPart)()
newWorksheetPart.Worksheet = New Worksheet(New SheetData)
newWorksheetPart.Worksheet.Save()
Dim sheets As Sheets = workbookPart.Workbook.GetFirstChild(Of Sheets)()
Dim relationshipId As String = workbookPart.GetIdOfPart(newWorksheetPart)
' Get a unique ID for the new sheet.
Dim sheetId As UInteger = 1
If (sheets.Elements(Of Sheet).Count() > 0) Then
sheetId = sheets.Elements(Of Sheet).Select(Function(s) s.SheetId.Value).Max() + 1
End If
' Add the new worksheet and associate it with the workbook.
Dim sheet As Sheet = New Sheet
sheet.Id = relationshipId
sheet.SheetId = sheetId
sheet.Name = sheetName
sheets.Append(sheet)
workbookPart.Workbook.Save()
Return newWorksheetPart
End Function
InformationsquelleAutor WhiskerBiscuit | 2013-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist fast da. Sie Durchlaufen
doc.WorkbookPart.Workbook.Sheets
schon. Alle sollten Sie tun müssen, ist legen Sie eine if-Anweisung zu sehen, ob die Platte, die Sie suchen, Ihre aktuelle Stelle in der Schleife, indem man die Eigenschaftens.Name
oders.Id
Alternativ, wie angegeben hier, können Sie mit LINQ to wählen Sie das Arbeitsblatt, indem Sie den Namen oder die ID direkt:
Oder
Sobald Sie haben, dass die ID, die Sie tun können,
Ich bitte um Entschuldigung, wenn es Fehler in dieser, ich Tue dies auf einem schnell fahrenden Zug mit meinem Gehirn-compiler auf einem iPhone. Hoffentlich bekommen sollten Sie Bewegung in die richtige Richtung, mindestens.
Tut mir Leid, dass ich deine Frage falsch verstanden und dachte du wolltest das Arbeitsblatt, nicht die WorksheetPart. Ich habe aktualisiert die Beispiel.
Ich wünschte, diese OpenXML-Struktur nicht so ein verworrenes Durcheinander. Dies funktionierte perfekt. Danke!
InformationsquelleAutor Adrian