{"id":2732,"date":"2016-03-18T12:42:33","date_gmt":"2016-03-18T12:42:33","guid":{"rendered":"http:\/\/www.ericwhite.com\/home2\/bm8qcmjy\/public_html\/blog\/?page_id=2732"},"modified":"2016-03-18T12:48:08","modified_gmt":"2016-03-18T12:48:08","slug":"creating-pivot-tables-part-2","status":"publish","type":"page","link":"https:\/\/www.ericwhite.com\/blog\/creating-pivot-tables-part-2\/","title":{"rendered":"Creating Pivot Tables, Part 2"},"content":{"rendered":"<p>In this second part, I will show the code for creating a pivot table in Excel from scratch using Open XML. This post contains a brief explanation of the example that can be found in PowerTools Core 2.2.2 from Codeplex (<a href=\"https:\/\/github.com\/OfficeDev\/Open-Xml-PowerTools\">https:\/\/github.com\/OfficeDev\/Open-Xml-PowerTools<\/a>).<\/p>\n<pre class=\"prettyprint\"><span class=\"com\">\/\/ Create from scratch<\/span><span class=\"pln\"><br>row <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> <\/span><span class=\"lit\">1<\/span><span class=\"pun\">;<\/span><span class=\"pln\"><br><\/span><span class=\"kwd\">int<\/span><span class=\"pln\"> maxColumn <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> <\/span><span class=\"lit\">1<\/span><span class=\"pun\">;<\/span><span class=\"pln\"><br><\/span><span class=\"kwd\">using<\/span><span class=\"pln\"> <\/span><span class=\"pun\">(<\/span><span class=\"typ\">OpenXmlMemoryStreamDocument<\/span><span class=\"pln\"> streamDoc <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> <\/span><span class=\"typ\">OpenXmlMemoryStreamDocument<\/span><span class=\"pun\">.<\/span><span class=\"typ\">CreateSpreadsheetDocument<\/span><span class=\"pun\">())<\/span><span class=\"pln\"><br><\/span><span class=\"pun\">{<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"kwd\">using<\/span><span class=\"pln\"> <\/span><span class=\"pun\">(<\/span><span class=\"typ\">SpreadsheetDocument<\/span><span class=\"pln\"> doc <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> streamDoc<\/span><span class=\"pun\">.<\/span><span class=\"typ\">GetSpreadsheetDocument<\/span><span class=\"pun\">())<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"pun\">{<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">WorksheetPart<\/span><span class=\"pln\"> sheet <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> <\/span><span class=\"typ\">WorksheetAccessor<\/span><span class=\"pun\">.<\/span><span class=\"typ\">AddWorksheet<\/span><span class=\"pun\">(<\/span><span class=\"pln\">doc<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"Range\"<\/span><span class=\"pun\">);<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">using<\/span><span class=\"pln\"> <\/span><span class=\"pun\">(<\/span><span class=\"typ\">StreamReader<\/span><span class=\"pln\"> source <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> <\/span><span class=\"kwd\">new<\/span><span class=\"pln\"> <\/span><span class=\"typ\">StreamReader<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"..\/..\/PivotData.txt\"<\/span><span class=\"pun\">))<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">{<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">while<\/span><span class=\"pln\"> <\/span><span class=\"pun\">(!<\/span><span class=\"pln\">source<\/span><span class=\"pun\">.<\/span><span class=\"typ\">EndOfStream<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">{<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">string<\/span><span class=\"pln\"> line <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> source<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ReadLine<\/span><span class=\"pun\">();<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">if<\/span><span class=\"pln\"> <\/span><span class=\"pun\">(<\/span><span class=\"pln\">line<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Length<\/span><span class=\"pln\"> <\/span><span class=\"pun\">&gt;<\/span><span class=\"pln\"> <\/span><span class=\"lit\">3<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">{<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">string<\/span><span class=\"pun\">[]<\/span><span class=\"pln\"> fields <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> line<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Split<\/span><span class=\"pun\">(<\/span><span class=\"str\">','<\/span><span class=\"pun\">);<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">int<\/span><span class=\"pln\"> column <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> <\/span><span class=\"lit\">1<\/span><span class=\"pun\">;<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">foreach<\/span><span class=\"pln\"> <\/span><span class=\"pun\">(<\/span><span class=\"kwd\">string<\/span><span class=\"pln\"> item <\/span><span class=\"kwd\">in<\/span><span class=\"pln\"> fields<\/span><span class=\"pun\">)<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">{<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">double<\/span><span class=\"pln\"> num<\/span><span class=\"pun\">;<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">if<\/span><span class=\"pln\"> <\/span><span class=\"pun\">(<\/span><span class=\"kwd\">double<\/span><span class=\"pun\">.<\/span><span class=\"typ\">TryParse<\/span><span class=\"pun\">(<\/span><span class=\"pln\">item<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"kwd\">out<\/span><span class=\"pln\"> num<\/span><span class=\"pun\">))<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">WorksheetAccessor<\/span><span class=\"pun\">.<\/span><span class=\"typ\">SetCellValue<\/span><span class=\"pun\">(<\/span><span class=\"pln\">doc<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> sheet<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> row<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> column<\/span><span class=\"pun\">++,<\/span><span class=\"pln\"> num<\/span><span class=\"pun\">);<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"kwd\">else<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">WorksheetAccessor<\/span><span class=\"pun\">.<\/span><span class=\"typ\">SetCellValue<\/span><span class=\"pun\">(<\/span><span class=\"pln\">doc<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> sheet<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> row<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> column<\/span><span class=\"pun\">++,<\/span><span class=\"pln\"> item<\/span><span class=\"pun\">);<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">}<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; maxColumn <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> column <\/span><span class=\"pun\">-<\/span><span class=\"pln\"> <\/span><span class=\"lit\">1<\/span><span class=\"pun\">;<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">}<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row<\/span><span class=\"pun\">++;<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">}<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"pun\">}<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; sheet<\/span><span class=\"pun\">.<\/span><span class=\"typ\">PutXDocument<\/span><span class=\"pun\">();<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">WorksheetAccessor<\/span><span class=\"pun\">.<\/span><span class=\"typ\">SetRange<\/span><span class=\"pun\">(<\/span><span class=\"pln\">doc<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"Sales\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"Range\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"lit\">1<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"lit\">1<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> row <\/span><span class=\"pun\">-<\/span><span class=\"pln\"> <\/span><span class=\"lit\">1<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> maxColumn<\/span><span class=\"pun\">);<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">WorksheetPart<\/span><span class=\"pln\"> pivot <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> <\/span><span class=\"typ\">WorksheetAccessor<\/span><span class=\"pun\">.<\/span><span class=\"typ\">AddWorksheet<\/span><span class=\"pun\">(<\/span><span class=\"pln\">doc<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"Pivot\"<\/span><span class=\"pun\">);<\/span><span class=\"pln\"><br>&nbsp; &nbsp; &nbsp; &nbsp; <\/span><span class=\"typ\">WorksheetAccessor<\/span><span class=\"pun\">.<\/span><span class=\"typ\">CreatePivotTable<\/span><span class=\"pun\">(<\/span><span class=\"pln\">doc<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> <\/span><span class=\"str\">\"Sales\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> pivot<\/span><span class=\"pun\">);<\/span><span class=\"pln\"><br>&nbsp; &nbsp; <\/span><span class=\"pun\">}<\/span><span class=\"pln\"><br>&nbsp; &nbsp; streamDoc<\/span><span class=\"pun\">.<\/span><span class=\"typ\">GetModifiedSmlDocument<\/span><span class=\"pun\">().<\/span><span class=\"typ\">SaveAs<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"..\/..\/NewPivot.xlsx\"<\/span><span class=\"pun\">);<\/span><span class=\"pln\"><br><\/span><span class=\"pun\">}<\/span><\/pre>\n<p>The first part of the code is much like the process I showed in <a href=\"https:\/\/www.ericwhite.com\/blog\/creating-pivot-tables-part-1\/\">Part 1<\/a>. It fills in the data from an external text file. After that, there are just a few method calls to set up an empty pivot table that is ready to be configured. I discuss both parts in the screencast below. I will also be posting another screencast in a few days that goes over the technical details of creating the XML for a pivot table. Then next week, I will post more information about how to configure the rows, columns, filters, and data values for the pivot table. That gets really technical, so be warned. I don&#8217;t have a sample for that, yet, but I might be encouraged to create one if there is enough interest.<\/p>\n<p><iframe loading=\"lazy\" title=\"Creating Pivot Tables with PowerTools for Open XML\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/w1jIzkCZsB8?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","protected":false},"excerpt":{"rendered":"<p>In this second part, I will show the code for creating a pivot table in Excel from scratch using Open XML. This post contains a brief explanation of the example that can be found in PowerTools Core 2.2.2 from Codeplex (https:\/\/github.com\/OfficeDev\/Open-Xml-PowerTools). \/\/ Create from scratchrow = 1;int maxColumn = 1;using (OpenXmlMemoryStreamDocument streamDoc = OpenXmlMemoryStreamDocument.CreateSpreadsheetDocument()){&nbsp; &nbsp; [&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-2732","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/pages\/2732","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=2732"}],"version-history":[{"count":2,"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/pages\/2732\/revisions"}],"predecessor-version":[{"id":2736,"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/pages\/2732\/revisions\/2736"}],"wp:attachment":[{"href":"https:\/\/www.ericwhite.com\/blog\/wp-json\/wp\/v2\/media?parent=2732"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}