{"id":3184,"date":"2016-03-20T05:29:49","date_gmt":"2016-03-20T05:29:49","guid":{"rendered":"http:\/\/www.ericwhite.com\/home2\/bm8qcmjy\/public_html\/blog\/?page_id=3184"},"modified":"2016-03-20T09:50:45","modified_gmt":"2016-03-20T09:50:45","slug":"query-open-xml-spreadsheets-in-vb-net-using-linq","status":"publish","type":"page","link":"https:\/\/www.ericwhite.com\/blog\/query-open-xml-spreadsheets-in-vb-net-using-linq\/","title":{"rendered":"Query Open XML Spreadsheets in VB.NET using LINQ"},"content":{"rendered":"<p>When working with SpreadsheetML, one of the most common needs is to retrieve the data from a worksheet or a table in as easy a fashion as possible. &nbsp;There has been a fair amount written for C# developers to do this, but not nearly as much for VB.NET. &nbsp;Some time ago, I wrote a blog post, <a href=\"http:\/\/blogs.msdn.com\/b\/ericwhite\/archive\/2008\/11\/14\/using-linq-to-query-excel-tables.aspx\" class=\"broken_link\">Using LINQ to Query Excel Tables<\/a>, which introduced a few C# classes and extension methods that make it easy to query SpreadsheetML. &nbsp;This post presents a super-easy way to use that code from VB.NET.<\/p>\n<p>To make it as easy as possible to get going using LINQ with VB to access SpreadsheetML, I&#8217;ve recorded the following screen-cast that walks through the process of building a VB.NET application that uses the code from that blog post.&nbsp; Here is the video:<\/p>\n<p><iframe loading=\"lazy\" title=\"RetrieveExcelColumnsUsingVB.wmv\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/rcaEAQROnVs?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p>I&#8217;ve attached a zip file that contains this code, as well as the sample spreadsheet.<\/p>\n<p>The gist of the technique is to put together a project that contains a VB module that uses some C# code in another project in the same solution.&nbsp; Then, you can write a bit of code to query the spreadsheet.&nbsp; The following code shows how to retrieve all cells for all rows in a worksheet:<\/p>\n<pre class=\"prettyprint\"><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Contents of Spreadsheet (Column C)\"<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br><\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"==================================\"<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br><\/span><span class=\"typ\">Using<\/span><span class=\"pln\"> doc <\/span><span class=\"typ\">As<\/span><span class=\"pln\"> <\/span><span class=\"typ\">SpreadsheetDocument<\/span><span class=\"pln\"> <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> <\/span><span class=\"typ\">SpreadsheetDocument<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Open<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Data.xlsx\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"kwd\">False<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"typ\">Dim<\/span><span class=\"pln\"> worksheet <\/span><span class=\"typ\">As<\/span><span class=\"pln\"> <\/span><span class=\"typ\">WorksheetPart<\/span><span class=\"pln\"> <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> doc<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WorkbookPart<\/span><span class=\"pun\">.<\/span><span class=\"typ\">GetPartById<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"rId1\"<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"typ\">For<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Each<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Row<\/span><span class=\"pln\"> <\/span><span class=\"typ\">In<\/span><span class=\"pln\"> worksheet<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Rows<\/span><span class=\"pun\">()<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\" &nbsp;RowId:{0}\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Row<\/span><span class=\"pun\">.<\/span><span class=\"typ\">RowId<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\" &nbsp;Spans:{0}\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Row<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Spans<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">For<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Each<\/span><span class=\"pln\"> cell <\/span><span class=\"typ\">In<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Row<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Cells<\/span><span class=\"pun\">()<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\" &nbsp; &nbsp;Column:{0}\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Column<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\" &nbsp; &nbsp; &nbsp;ColumnId:{0}\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ColumnId<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">If<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Type<\/span><span class=\"pln\"> <\/span><span class=\"typ\">IsNot<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Nothing<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Then<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\" &nbsp; &nbsp; &nbsp;Type:{0}\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Type<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">End<\/span><span class=\"pln\"> <\/span><span class=\"typ\">If<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">If<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Value<\/span><span class=\"pln\"> <\/span><span class=\"typ\">IsNot<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Nothing<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Then<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\" &nbsp; &nbsp; &nbsp;Value:{0}\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Value<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">End<\/span><span class=\"pln\"> <\/span><span class=\"typ\">If<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">If<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Formula<\/span><span class=\"pln\"> <\/span><span class=\"typ\">IsNot<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Nothing<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Then<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\" &nbsp; &nbsp; &nbsp;Formula:&gt;{0}&lt;\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Formula<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">End<\/span><span class=\"pln\"> <\/span><span class=\"typ\">If<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">If<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">SharedString<\/span><span class=\"pln\"> <\/span><span class=\"typ\">IsNot<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Nothing<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Then<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\" &nbsp; &nbsp; &nbsp;SharedString:&gt;{0}&lt;\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">SharedString<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">End<\/span><span class=\"pln\"> <\/span><span class=\"typ\">If<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Next<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"typ\">Next<\/span><span class=\"pln\"><br><\/span><span class=\"typ\">End<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Using<\/span><\/pre>\n<p>If you want to retrieve just the data for a specific column, you can modify the above code as follows.&nbsp; Note that when the code iterates through the Row.Cells() collection, you<br \/>\ncan use the Where extension method to retrieve just the column you are interested in:<\/p>\n<pre class=\"prettyprint\"><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Contents of Spreadsheet (Column C)\"<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br><\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"==================================\"<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br><\/span><span class=\"typ\">Using<\/span><span class=\"pln\"> doc <\/span><span class=\"typ\">As<\/span><span class=\"pln\"> <\/span><span class=\"typ\">SpreadsheetDocument<\/span><span class=\"pln\"> <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> <\/span><span class=\"typ\">SpreadsheetDocument<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Open<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Data.xlsx\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"kwd\">False<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"typ\">Dim<\/span><span class=\"pln\"> worksheet <\/span><span class=\"typ\">As<\/span><span class=\"pln\"> <\/span><span class=\"typ\">WorksheetPart<\/span><span class=\"pln\"> <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> doc<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WorkbookPart<\/span><span class=\"pun\">.<\/span><span class=\"typ\">GetPartById<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"rId1\"<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"typ\">For<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Each<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Row<\/span><span class=\"pln\"> <\/span><span class=\"typ\">In<\/span><span class=\"pln\"> worksheet<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Rows<\/span><span class=\"pun\">()<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\" &nbsp;RowId:{0}\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Row<\/span><span class=\"pun\">.<\/span><span class=\"typ\">RowId<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\" &nbsp;Spans:{0}\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Row<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Spans<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">For<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Each<\/span><span class=\"pln\"> cell <\/span><span class=\"typ\">In<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Row<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Cells<\/span><span class=\"pun\">().<\/span><span class=\"typ\">Where<\/span><span class=\"pun\">(<\/span><span class=\"typ\">Function<\/span><span class=\"pun\">(<\/span><span class=\"pln\">c<\/span><span class=\"pun\">)<\/span><span class=\"pln\"> c<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ColumnId<\/span><span class=\"pln\"> <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"C\"<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\" &nbsp; &nbsp;Column:{0}\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Column<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\" &nbsp; &nbsp; &nbsp;ColumnId:{0}\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ColumnId<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">If<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Type<\/span><span class=\"pln\"> <\/span><span class=\"typ\">IsNot<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Nothing<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Then<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\" &nbsp; &nbsp; &nbsp;Type:{0}\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Type<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">End<\/span><span class=\"pln\"> <\/span><span class=\"typ\">If<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">If<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Value<\/span><span class=\"pln\"> <\/span><span class=\"typ\">IsNot<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Nothing<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Then<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\" &nbsp; &nbsp; &nbsp;Value:{0}\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Value<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">End<\/span><span class=\"pln\"> <\/span><span class=\"typ\">If<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">If<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Formula<\/span><span class=\"pln\"> <\/span><span class=\"typ\">IsNot<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Nothing<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Then<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\" &nbsp; &nbsp; &nbsp;Formula:&gt;{0}&lt;\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Formula<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">End<\/span><span class=\"pln\"> <\/span><span class=\"typ\">If<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">If<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">SharedString<\/span><span class=\"pln\"> <\/span><span class=\"typ\">IsNot<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Nothing<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Then<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\" &nbsp; &nbsp; &nbsp;SharedString:&gt;{0}&lt;\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">SharedString<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">End<\/span><span class=\"pln\"> <\/span><span class=\"typ\">If<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Next<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"typ\">Next<\/span><span class=\"pln\"><br><\/span><span class=\"typ\">End<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Using<\/span><\/pre>\n<p>If you want to just retrieve the values of interest, so that you could do something like create a drop-down list with the values from a specific column, you could rewrite the code like this:<\/p>\n<pre class=\"prettyprint\"><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Contents of Spreadsheet (Column C)\"<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br><\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"==================================\"<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br><\/span><span class=\"typ\">Using<\/span><span class=\"pln\"> doc <\/span><span class=\"typ\">As<\/span><span class=\"pln\"> <\/span><span class=\"typ\">SpreadsheetDocument<\/span><span class=\"pln\"> <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> <\/span><span class=\"typ\">SpreadsheetDocument<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Open<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Data.xlsx\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"kwd\">False<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"typ\">Dim<\/span><span class=\"pln\"> worksheet <\/span><span class=\"typ\">As<\/span><span class=\"pln\"> <\/span><span class=\"typ\">WorksheetPart<\/span><span class=\"pln\"> <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> doc<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WorkbookPart<\/span><span class=\"pun\">.<\/span><span class=\"typ\">GetPartById<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"rId1\"<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"typ\">For<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Each<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Row<\/span><span class=\"pln\"> <\/span><span class=\"typ\">In<\/span><span class=\"pln\"> worksheet<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Rows<\/span><span class=\"pun\">()<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">For<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Each<\/span><span class=\"pln\"> cell <\/span><span class=\"typ\">In<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Row<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Cells<\/span><span class=\"pun\">().<\/span><span class=\"typ\">Where<\/span><span class=\"pun\">(<\/span><span class=\"typ\">Function<\/span><span class=\"pun\">(<\/span><span class=\"pln\">c<\/span><span class=\"pun\">)<\/span><span class=\"pln\"> c<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ColumnId<\/span><span class=\"pln\"> <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"C\"<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">If<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Type<\/span><span class=\"pln\"> <\/span><span class=\"typ\">IsNot<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Nothing<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Then<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">If<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Type<\/span><span class=\"pln\"> <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"s\"<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Then<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"pln\">cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">SharedString<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">End<\/span><span class=\"pln\"> <\/span><span class=\"typ\">If<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Else<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">If<\/span><span class=\"pln\"> cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Value<\/span><span class=\"pln\"> <\/span><span class=\"typ\">IsNot<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Nothing<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Then<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"pln\">cell<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Value<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">End<\/span><span class=\"pln\"> <\/span><span class=\"typ\">If<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">End<\/span><span class=\"pln\"> <\/span><span class=\"typ\">If<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Next<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"typ\">Next<\/span><span class=\"pln\"><br><\/span><span class=\"typ\">End<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Using<\/span><\/pre>\n<p>Finally, if you convert the cells in the worksheet to a table, then you can simplify the code and write it like this:<\/p>\n<pre class=\"prettyprint\"><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Contents of Table\"<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br><\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"=================\"<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br><\/span><span class=\"typ\">Using<\/span><span class=\"pln\"> doc <\/span><span class=\"typ\">As<\/span><span class=\"pln\"> <\/span><span class=\"typ\">SpreadsheetDocument<\/span><span class=\"pln\"> <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> _<br>&nbsp; &nbsp; <\/span><span class=\"typ\">SpreadsheetDocument<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Open<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Data.xlsx\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"kwd\">False<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"typ\">Dim<\/span><span class=\"pln\"> query <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> <\/span><span class=\"typ\">From<\/span><span class=\"pln\"> i <\/span><span class=\"typ\">In<\/span><span class=\"pln\"> doc<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Table<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"MyTable\"<\/span><span class=\"pun\">).<\/span><span class=\"typ\">TableRows<\/span><span class=\"pun\">()<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Select<\/span><span class=\"pln\"> i<br>&nbsp; &nbsp; <\/span><span class=\"typ\">For<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Each<\/span><span class=\"pln\"> r <\/span><span class=\"typ\">In<\/span><span class=\"pln\"> query<br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"{0} : {1} : {2}\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> _<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Col1\"<\/span><span class=\"pun\">).<\/span><span class=\"typ\">Value<\/span><span class=\"pun\">.<\/span><span class=\"typ\">PadRight<\/span><span class=\"pun\">(<\/span><span class=\"lit\">10<\/span><span class=\"pun\">),<\/span><span class=\"pln\"> _<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Col2\"<\/span><span class=\"pun\">).<\/span><span class=\"typ\">Value<\/span><span class=\"pun\">.<\/span><span class=\"typ\">PadRight<\/span><span class=\"pun\">(<\/span><span class=\"lit\">10<\/span><span class=\"pun\">),<\/span><span class=\"pln\"> r<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Col3\"<\/span><span class=\"pun\">))<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"typ\">Next<\/span><span class=\"pln\"><br><\/span><span class=\"typ\">End<\/span><span class=\"pln\"> <\/span><span class=\"typ\">Using<\/span><\/pre>\n<p>Example &#8211; <a href=\"https:\/\/www.ericwhite.com\/blog\/wp-content\/uploads\/2016\/03\/QuerySpreadsheetsUsingVB.zip\">Download Code<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>When working with SpreadsheetML, one of the most common needs is to retrieve the data from a worksheet or a table in as easy a fashion as possible. &nbsp;There has been a fair amount written for C# developers to do this, but not nearly as much for VB.NET. &nbsp;Some time ago, I wrote a blog [&hellip;]<\/p>\n","protected":false},"author":10567,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"_s2mail":"","footnotes":""},"class_list":["post-3184","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/pages\/3184","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/users\/10567"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/comments?post=3184"}],"version-history":[{"count":1,"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/pages\/3184\/revisions"}],"predecessor-version":[{"id":3185,"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/pages\/3184\/revisions\/3185"}],"wp:attachment":[{"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/media?parent=3184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}