vb.net – 如何在OpenXML中从名称或工作表ID中获取Worksheetpart
发布时间:2020-12-17 00:08:12 所属栏目:大数据 来源:网络整理
导读:以下创建了一个XLSX,添加了两个包含一些数据的工作表.然后,我希望以后能够根据名称(或最好是id)获取电子表格,以便我可以在以后添加/修改工作表.我仍然坚持如何在下面的代码不完整的地方再次获取工作表. Sub Main() Using doc As SpreadsheetDocument = Sprea
以下创建了一个XLSX,添加了两个包含一些数据的工作表.然后,我希望以后能够根据名称(或最好是id)获取电子表格,以便我可以在以后添加/修改工作表.我仍然坚持如何在下面的代码不完整的地方再次获取工作表.
Sub Main() Using doc As SpreadsheetDocument = SpreadsheetDocument.Create(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"c:tempfubar.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
你快到了.你已经在doc.WorkbookPart.Workbook.Sheets上循环了.你需要做的就是插入一个if语句,通过查看属性s.Name或s.Id来查看你要查找的工作表是否是循环中的当前点
或者,如here所示,您可以使用LINQ直接按名称或ID选择工作表: sID as Integer = doc.WorkbookPart.Workbook.Descendants(Sheet)().First(s => s.Name.Equals("First")).Id 要么 sID as Integer = doc.WorkbookPart.Workbook.Descendants(Sheet)().First(s => s.Id.Equals(2)).Id 一旦你拥有了这个ID就可以了 wsp As WorksheetPart = doc.WorkbookPart.GetPartById(sID) 如果有错误,我很抱歉,我正在快速行驶的火车上使用iPhone上的脑编译器进行此操作.希望至少应该让你朝着正确的方向前进. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |