<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Brian Jones: Office Solutions</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/brian_jones/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/brian_jones/feed.xml</link>
    <description>I&amp;#039;m Brian Jones, the group program manager of the Office Solutions Framework team.</description>
    <lastBuildDate>Tue, 16 Apr 2019 04:49:13 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>The new app platform from a developer perspective</title>
      <link>https://docs.microsoft.com/archive/blogs/brian_jones/the-new-app-platform-from-a-developer-perspective</link>
      <pubDate>Thu, 09 Aug 2012 21:15:46 GMT</pubDate>
      <dc:creator><![CDATA[I'm Brian Jones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brian_jones/2012/08/09/the-new-app-platform-from-a-developer-perspective/</guid>
      <description><![CDATA[On Monday, I posted on the Office Next blog about the experience from an end user perspective around...]]></description>
      <content:encoded><![CDATA[<p>On Monday, I posted on the Office Next blog about the experience from an <a href="https://blogs.office.com/b/office-next/archive/2012/08/06/introducing-apps-for-the-new-office-and-sharepoint-and-the-office-store.aspx">end user perspective around apps for Office and SharePoint</a>. Yesterday, I posted about it from the <a href="https://blogs.office.com/b/office-next/archive/2012/08/08/a-new-and-enhanced-developer-experience-for-office-and-sharepoint.aspx">developer point of view</a>. Tomorrow, I'll post from the IT/administrator point of view. Ultimately there are really three customers of this new model, and it's important to talk about it from all three points of view.</p>
<ul>
<li>We had to make sure that the model was isolated so that end users could try out dozens of apps without degrading their overall experience.&nbsp;</li>
<li>We had to make it so that developers could leverage their existing skills and easily connect to other existing services when building their apps.&nbsp;</li>
<li>And we had to make sure administrators had the ability to easily push apps out to their users, and keep the overall system healthy and up to date.</li>
</ul>
<p>If you are a developer, be sure to take a read through <a href="https://blogs.office.com/b/office-next/archive/2012/08/08/a-new-and-enhanced-developer-experience-for-office-and-sharepoint.aspx">the post</a>, and definitely check out <a href="https://dev.office.com">dev.office.com</a></p>
<p>-Brian</p>]]></content:encoded>
    </item>
    <item>
      <title>Announcing the app building contest</title>
      <link>https://docs.microsoft.com/archive/blogs/brian_jones/announcing-the-app-building-contest</link>
      <pubDate>Thu, 09 Aug 2012 09:41:00 GMT</pubDate>
      <dc:creator><![CDATA[I'm Brian Jones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brian_jones/2012/08/09/announcing-the-app-building-contest/</guid>
      <description><![CDATA[Vivek announced a contest we're kicking off for people who are building apps for Office or...]]></description>
      <content:encoded><![CDATA[<p>Vivek announced a contest we're kicking off for people who are building apps for Office or SharePoint. Here's a link to the post: <a href="https://blogs.msdn.com/b/officeapps/archive/2012/08/07/game-on-win-big-prizes-in-the-app-contest.aspx">https://blogs.msdn.com/b/officeapps/archive/2012/08/07/game-on-win-big-prizes-in-the-app-contest.aspx</a></p>
<p>The short of it though is that there are some awesome prizes, and we're giving out a ton of them, so you have a high chance of winning (go to the contest page to get all the details):</p>
<p style="padding-left: 30px;"><strong class="subheadB">Grand Prize (1 winner):</strong> <strong class="subheadS">The top judged app across all submissions will win</strong><br /> A) A $10,000 cash prize<br /> B) App gets featured on the Office Store<br /> C) App gets featured on the apps for Office Microsoft blog<br /> D) Opportunity to meet with a Microsoft executive<br /> E) 3 days of app consultation with a Microsoft Program Manager<br /><br /><strong class="subheadB">First Prize (15 winners):</strong> <strong class="subheadS"> The next 15 top judged apps (5 each per category: Office, SharePoint, and 3rd party APIs) will win <!--<br /> Best apps for Office, Best apps for SharePoint, Best use of a 3rd party API (total of 15 winners)--></strong><br /> A) Xbox + Kinect<br /> B) App gets featured on the Office Store<br /> C) App gets featured on the apps for Office Microsoft blog<br /><br /><strong class="subheadB">Second Prize (100 winners): </strong><strong class="subheadS"> The next 100 top judged apps will win a Microsoft Mouse or equivalent hardware</strong></p>
<p>-Brian</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>A look into the user experiences around apps for Office and SharePoint</title>
      <link>https://docs.microsoft.com/archive/blogs/brian_jones/a-look-into-the-user-experiences-around-apps-for-office-and-sharepoint</link>
      <pubDate>Mon, 06 Aug 2012 18:31:40 GMT</pubDate>
      <dc:creator><![CDATA[I'm Brian Jones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brian_jones/2012/08/06/a-look-into-the-user-experiences-around-apps-for-office-and-sharepoint/</guid>
      <description><![CDATA[We're going to have a few posts this week up on the Office Next blog that drill into the new app...]]></description>
      <content:encoded><![CDATA[<p>We're going to have a few posts this week up on the Office Next blog that drill into the new app model from three perspectives: the end user; the developer; and the administrator. This first post that goes into the end user experience is now live:&nbsp;https://blogs.office.com/b/office-next/archive/2012/08/06/introducing-apps-for-the-new-office-and-sharepoint-and-the-office-store.aspx</p>]]></content:encoded>
    </item>
    <item>
      <title>Open XML SDK 2.5 is now available</title>
      <link>https://docs.microsoft.com/archive/blogs/brian_jones/open-xml-sdk-2-5-is-now-available</link>
      <pubDate>Fri, 27 Jul 2012 08:50:40 GMT</pubDate>
      <dc:creator><![CDATA[I'm Brian Jones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brian_jones/2012/07/27/open-xml-sdk-2-5-is-now-available/</guid>
      <description><![CDATA[There is new a CTP available of the Open XML SDK version 2.5:...]]></description>
      <content:encoded><![CDATA[<p>There is new a CTP available of the Open XML SDK version 2.5: <a href="https://www.microsoft.com/en-us/download/details.aspx?id=30425">https://www.microsoft.com/en-us/download/details.aspx?id=30425</a></p>
<p>As I mentioned in <a href="https://blogs.msdn.com/b/officeapps/archive/2012/07/23/introducing-apps-for-the-new-office-and-sharepoint.aspx">my post earlier this week</a>, Open XML is an important piece of our overall application model for Office 365 solutions.</p>
<p>Here are a few of the things that are new in this version of the SDK:</p>
<ul>
<li>New classes for file format extensions in Microsoft Office 2013 Preview</li>
<li>Built on .NET Framework 4.0</li>
<li>Reads the ISO Strict Format</li>
<li>Fixes to some of the bugs from 2.0 (e.g. whitespaces in .pptx document file)</li>
</ul>
<p>Take a look!</p>
<p>-Brian</p>]]></content:encoded>
    </item>
    <item>
      <title>New post up on the apps for Office blog</title>
      <link>https://docs.microsoft.com/archive/blogs/brian_jones/new-post-up-on-the-apps-for-office-blog</link>
      <pubDate>Mon, 23 Jul 2012 08:47:43 GMT</pubDate>
      <dc:creator><![CDATA[I'm Brian Jones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brian_jones/2012/07/23/new-post-up-on-the-apps-for-office-blog/</guid>
      <description><![CDATA[I just posted on the apps for Office blog, giving some more background into the new model:...]]></description>
      <content:encoded><![CDATA[<p>I just posted on the apps for Office blog, giving some more background into the new model: <a href="https://blogs.msdn.com/b/officeapps/archive/2012/07/23/introducing-apps-for-the-new-office-and-sharepoint.aspx">https://blogs.msdn.com/b/officeapps/archive/2012/07/23/introducing-apps-for-the-new-office-and-sharepoint.aspx</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Test Message</title>
      <link>https://docs.microsoft.com/archive/blogs/brian_jones/test-message</link>
      <pubDate>Tue, 10 Jul 2012 09:44:53 GMT</pubDate>
      <dc:creator><![CDATA[I'm Brian Jones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brian_jones/2012/07/10/test-message/</guid>
      <description><![CDATA[Test message... haven't used the blog in awhile, so want to make sure it still works! :-)]]></description>
      <content:encoded><![CDATA[<p>Test message... haven't used the blog in awhile, so want to make sure it still works! :-)</p>]]></content:encoded>
    </item>
    <item>
      <title>Writing Large Excel Files with the Open XML SDK</title>
      <link>https://docs.microsoft.com/archive/blogs/brian_jones/writing-large-excel-files-with-the-open-xml-sdk</link>
      <pubDate>Tue, 22 Jun 2010 09:37:49 GMT</pubDate>
      <dc:creator><![CDATA[I'm Brian Jones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brian_jones/2010/06/22/writing-large-excel-files-with-the-open-xml-sdk/</guid>
      <description><![CDATA[In my last post, I showed you guys how to use the Open XML SDK to read and parse large Excel files....]]></description>
      <content:encoded><![CDATA[<p>In my last post, I showed you guys how to <a href="https://blogs.msdn.com/b/brian_jones/archive/2010/05/27/parsing-and-reading-large-excel-files-with-the-open-xml-sdk.aspx">use the Open XML SDK to read and parse large Excel files</a>. Today, I am going to show you how to write large Excel files with the <a href="https://blogs.msdn.com/b/brian_jones/archive/2010/03/12/announcing-the-release-of-the-open-xml-sdk-2-0.aspx">Open XML SDK</a>. Like in the case of reading, the Open XML SDK provides two approaches for writing Open XML files: 1. using the DOM, 2. using the SAX-like writing capability. All of my examples on this blog have been around using the Open XML SDK DOM to write Open XML files. The DOM makes it easy because everything is strongly typed. Unfortunately, the DOM approach requires loading entire Open XML parts in memory, which can result in Out of Memory exceptions, especially when dealing with very large files. Let's compare the DOM and SAX-like approaches. </p>  <p>If you want to jump straight into the code, feel free to download the solution <a href="https://zeyadrajabi.members.winisp.net/sourcecode/WriteLargeExcelFiles.zip">here</a>. </p>  <p><object width="640" height="385"><param name="movie" value="https://www.youtube.com/v/YFZ_fJBPS80&amp;hl=en_US&amp;fs=1&amp;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="https://www.youtube.com/v/YFZ_fJBPS80&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>  <h2>Scenario </h2>  <p>Imagine a scenario where I work for a financial company that deals with very large amounts of data. This data gets updated on a daily basis and is stored in a database. The company's analysts use Excel as a means of mining and understanding the data. To support the analysts' needs, the company needs to create and update Excel spreadsheets every morning. These spreadsheets typically grow to sizes exceeding hundreds of megabytes. </p>  <h2>Solution </h2>  <p>The scenario described above uses many of the general concepts described in a previous post on <a href="https://blogs.msdn.com/brian_jones/archive/2008/11/04/document-assembly-solution-for-spreadsheetml.aspx">writing data from a database into an Excel file</a>. Today, I will show you how to accomplish the scenario using both the DOM and SAX-like approaches. To accomplish the scenario we will need to take the following actions: </p>  <ol>   <li>Create an empty Spreadsheet template using Excel </li>    <li>Open the template using the Open XML SDK </li>    <li>Connect to the database that contains all the relevant data (for the sake of simplicity, this blog post will instead write random values to cells) </li>    <li>Get the main workbook part </li>    <li>Get the appropriate worksheet </li>    <li>Get the sheetData element, which will contain the data for a given spreadsheet </li>    <li>For the number of rows and columns that represent the dimensions of data to be inserted, add a new cell with appropriate data </li>    <li>Append rows to the sheetData element </li>    <li>Save and close </li> </ol>  <h2>Step 1 – Setup the right template </h2>  <p>As is the case for most of my blog posts, the easiest way to start any Open XML SDK solution is to create the right starting template. In this case, I am going to create a blank Excel spreadsheet with one sheet in Excel. The template will look like the following: </p>  <p><a href="https://zeyadrajabi.members.winisp.net/WritingLargeExcelFileswiththeOpenXMLSDK_8B3D/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://zeyadrajabi.members.winisp.net/WritingLargeExcelFileswiththeOpenXMLSDK_8B3D/image_thumb.png" width="689" height="609" /></a> </p>  <p></p>  <h2>Open XML SDK DOM Approach </h2>  <p>The SDK DOM approach is pretty straight forward. The method below will write random values to cells within a given set of dimensions specified by the number of rows and columns. The random values will be calculated by Excel using the <span style="font-family: courier new; color: #a31515; font-size: 10pt">RAND()</span> formula, which is specified by the <span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">CellFormula</span> </span>class. </p>  <div>   <table style="border-collapse: collapse; background: #dbe5f1" border="0"><colgroup><col style="width: 667px" /></colgroup><tbody valign="top">       <tr>         <td style="border-bottom: black 0.5pt solid; border-left: black 0.5pt solid; padding-bottom: 1px; padding-left: 7px; padding-right: 7px; border-top: black 0.5pt solid; border-right: black 0.5pt solid; padding-top: 1px" valign="middle">           <div><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">static</span> <span style="color: blue">void</span> WriteRandomValuesDOM(<span style="color: blue">string</span> filename, <span style="color: blue">int</span> numRows, <span style="color: blue">int</span> numCols) </span></div>            <div><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">using</span> (<span style="color: #2b91af">SpreadsheetDocument</span> myDoc = <span style="color: #2b91af">SpreadsheetDocument</span>.Open(filename, <span style="color: blue">true</span>)) </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">WorkbookPart</span> workbookPart = myDoc.WorkbookPart; </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">WorksheetPart</span> worksheetPart = workbookPart.WorksheetParts.First(); </span></div>            <div style="margin-left: 72pt">&#160;</div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">SheetData</span> sheetData = worksheetPart.Worksheet.Elements&lt;<span style="color: #2b91af">SheetData</span>&gt;().First(); </span></div>            <div style="margin-left: 72pt">&#160;</div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">for</span> (<span style="color: blue">int</span> row = 0; row &lt; numRows; row++) </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">Row</span> r = <span style="color: blue">new</span> <span style="color: #2b91af">Row</span>(); </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">for</span> (<span style="color: blue">int</span> col = 0; col &lt; numCols; col++) </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">Cell</span> c = <span style="color: blue">new</span> <span style="color: #2b91af">Cell</span>(); </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">CellFormula</span> f = <span style="color: blue">new</span> <span style="color: #2b91af">CellFormula</span>(); </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt">f.CalculateCell = <span style="color: blue">true</span>; </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt">f.Text = <span style="color: #a31515">&quot;RAND()&quot;</span>; </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt">c.Append(f); </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">CellValue</span> v = <span style="color: blue">new</span> <span style="color: #2b91af">CellValue</span>(); </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt">c.Append(v); </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt">r.Append(c); </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt">sheetData.Append(r); </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div><span style="font-family: courier new; font-size: 10pt">}</span></div>         </td>       </tr>     </tbody></table> </div>  <p>The method above will definitely work for writing cell values within a worksheet. However, if the dimension specified is quite large then the program's memory footprint will also be quite large. In fact, you are left at the mercy of the garbage collector, which may result in the program throwing an Out of Memory exception. </p>  <h2>Open XML SDK SAX-Like Approach </h2>  <p>The <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlReader </span>and<span style="font-family: courier new; color: #2b91af; font-size: 10pt"> OpenXmlWriter</span> can be used together to alleviate some of the performance and/or memory concerns when developing an Open XML solution. You can create an <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlReader </span>and an<span style="font-family: courier new; color: #2b91af; font-size: 10pt"> OpenXmlWriter</span> object on an entire part without loading the part in memory. The <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlReader </span>class allows you to iterate the entire xml tree of a part one node at a time. Similarly, the <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlWriter</span> class allows you to write xml nodes within a part one node at a time. </p>  <p>In the case of this solution, we will need to read the original worksheet part and then update the worksheet with the appropriate data. We are going to use an <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlReader </span>object to read the original worksheet part and find the place in the file where we will add data. We are then going to use an <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlWriter</span> object to write values to the worksheet part. You may be tempted to create an <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlReader </span>object and an <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlWriter</span> object on the same part. I would recommend against using this strategy. Writing data to a part that you are reading using the <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlReader</span> and the <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlWriter</span> may result in the<span style="font-family: courier new; color: #2b91af; font-size: 10pt"> OpenXmlReader</span> losing its place in the xml tree. Instead, you should create a temporary worksheet part where you can write values to using the <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlWriter</span> class. The following code creates an <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlReader </span>object and an <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlWriter </span>object for worksheet parts: </p>  <div>   <table style="border-collapse: collapse; background: #dbe5f1" border="0"><colgroup><col style="width: 667px" /></colgroup><tbody valign="top">       <tr>         <td style="border-bottom: black 0.5pt solid; border-left: black 0.5pt solid; padding-bottom: 1px; padding-left: 7px; padding-right: 7px; border-top: black 0.5pt solid; border-right: black 0.5pt solid; padding-top: 1px" valign="middle">           <div><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">static</span> <span style="color: blue">void</span> WriteRandomValuesSAX(<span style="color: blue">string</span> filename, <span style="color: blue">int</span> numRows, <span style="color: blue">int</span> numCols) </span></div>            <div><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">using</span> (<span style="color: #2b91af">SpreadsheetDocument</span> myDoc = <span style="color: #2b91af">SpreadsheetDocument</span>.Open(filename, <span style="color: blue">true</span>)) </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">WorkbookPart</span> workbookPart = myDoc.WorkbookPart; </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">WorksheetPart</span> worksheetPart = workbookPart.WorksheetParts.First(); </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">string</span> origninalSheetId = workbookPart.GetIdOfPart(worksheetPart); </span></div>            <div style="margin-left: 72pt">&#160;</div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">WorksheetPart</span> replacementPart = </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt">workbookPart.AddNewPart&lt;<span style="color: #2b91af">WorksheetPart</span>&gt;(); </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">string</span> replacementPartId = workbookPart.GetIdOfPart(replacementPart); </span></div>            <div style="margin-left: 72pt">&#160;</div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">OpenXmlReader</span> reader = <span style="color: #2b91af">OpenXmlReader</span>.Create(worksheetPart); </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">OpenXmlWriter</span> writer = <span style="color: #2b91af">OpenXmlWriter</span>.Create(replacementPart); </span></div>            <div style="margin-left: 72pt">&#160;</div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">... </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div><span style="font-family: courier new; font-size: 10pt">}</span></div>         </td>       </tr>     </tbody></table> </div>  <p>Once we have the appropriate objects created, the next step is to write everything we read into the new worksheet part until we reach the <span style="font-family: courier new; color: #2b91af; font-size: 10pt">SheetData</span> object. Once we reach the <span style="font-family: courier new; color: #2b91af; font-size: 10pt">SheetData</span> object, we can start writing cell values within a given set of dimensions specified by the number of rows and columns. The following code accomplishes this task: </p>  <div>   <table style="border-collapse: collapse; background: #dbe5f1" border="0"><colgroup><col style="width: 667px" /></colgroup><tbody valign="top">       <tr>         <td style="border-bottom: black 0.5pt solid; border-left: black 0.5pt solid; padding-bottom: 1px; padding-left: 7px; padding-right: 7px; border-top: black 0.5pt solid; border-right: black 0.5pt solid; padding-top: 1px" valign="middle">           <div><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">static</span> <span style="color: blue">void</span> WriteRandomValuesSAX(<span style="color: blue">string</span> filename, <span style="color: blue">int</span> numRows, <span style="color: blue">int</span> numCols) </span></div>            <div><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">using</span> (<span style="color: #2b91af">SpreadsheetDocument</span> myDoc = <span style="color: #2b91af">SpreadsheetDocument</span>.Open(filename, <span style="color: blue">true</span>)) </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">... </span></div>            <div style="margin-left: 72pt">&#160;</div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">Row</span> r = <span style="color: blue">new</span> <span style="color: #2b91af">Row</span>(); </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">Cell</span> c = <span style="color: blue">new</span> <span style="color: #2b91af">Cell</span>(); </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">CellFormula</span> f = <span style="color: blue">new</span> <span style="color: #2b91af">CellFormula</span>(); </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">f.CalculateCell = <span style="color: blue">true</span>; </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">f.Text = <span style="color: #a31515">&quot;RAND()&quot;</span>; </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">c.Append(f); </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">CellValue</span> v = <span style="color: blue">new</span> <span style="color: #2b91af">CellValue</span>(); </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">c.Append(v); </span></div>            <div style="margin-left: 72pt">&#160;</div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">while</span> (reader.Read()) </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">if</span> (reader.ElementType == <span style="color: blue">typeof</span>(<span style="color: #2b91af">SheetData</span>)) </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">if</span> (reader.IsEndElement) </span></div>            <div style="margin-left: 180pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">continue</span>; </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt">writer.WriteStartElement(<span style="color: blue">new</span> <span style="color: #2b91af">SheetData</span>()); </span></div>            <div style="margin-left: 144pt">&#160;</div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">for</span> (<span style="color: blue">int</span> row = 0; row &lt; numRows; row++) </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 180pt"><span style="font-family: courier new; font-size: 10pt">writer.WriteStartElement(r); </span></div>            <div style="margin-left: 180pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">for</span> (<span style="color: blue">int</span> col = 0; col &lt; numCols; col++) </span></div>            <div style="margin-left: 180pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 216pt"><span style="font-family: courier new; font-size: 10pt">writer.WriteElement(c); </span></div>            <div style="margin-left: 180pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div style="margin-left: 180pt"><span style="font-family: courier new; font-size: 10pt">writer.WriteEndElement(); </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div style="margin-left: 144pt">&#160;</div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt">writer.WriteEndElement(); </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; color: blue; font-size: 10pt">else </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">if</span> (reader.IsStartElement) </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 180pt"><span style="font-family: courier new; font-size: 10pt">writer.WriteStartElement(reader); </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">else</span> <span style="color: blue">if</span> (reader.IsEndElement) </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 180pt"><span style="font-family: courier new; font-size: 10pt">writer.WriteEndElement(); </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div style="margin-left: 72pt">&#160;</div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">... </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div><span style="font-family: courier new; font-size: 10pt">}</span></div>         </td>       </tr>     </tbody></table> </div>  <p>Notice that the<span style="font-family: courier new; color: #2b91af; font-size: 10pt"> OpenXmlWriter</span> class requires us to write both the start and end elements. Invoking the method <span style="font-family: courier new; font-size: 10pt">WriteEndElement() </span>off of the <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlWriter</span> class ensures that the appropriate start element is closed. </p>  <p>We're almost done. The last step is to close the reader and writer and replace the original worksheet part with the replacement part. Remember that the main workbook part contains the list of worksheets within the workbook, which means we need to update the xml contained in that part. The following code accomplishes these tasks: </p>  <div>   <table style="border-collapse: collapse; background: #dbe5f1" border="0"><colgroup><col style="width: 667px" /></colgroup><tbody valign="top">       <tr>         <td style="border-bottom: black 0.5pt solid; border-left: black 0.5pt solid; padding-bottom: 1px; padding-left: 7px; padding-right: 7px; border-top: black 0.5pt solid; border-right: black 0.5pt solid; padding-top: 1px" valign="middle">           <div><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">static</span> <span style="color: blue">void</span> WriteRandomValuesSAX(<span style="color: blue">string</span> filename, <span style="color: blue">int</span> numRows, <span style="color: blue">int</span> numCols) </span></div>            <div><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">using</span> (<span style="color: #2b91af">SpreadsheetDocument</span> myDoc = <span style="color: #2b91af">SpreadsheetDocument</span>.Open(filename, <span style="color: blue">true</span>)) </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">... </span></div>            <div style="margin-left: 72pt">&#160;</div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">reader.Close(); </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">writer.Close(); </span></div>            <div style="margin-left: 72pt">&#160;</div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">Sheet</span> sheet = workbookPart.Workbook.Descendants&lt;<span style="color: #2b91af">Sheet</span>&gt;() </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt">.Where(s =&gt; s.Id.Value.Equals(origninalSheetId)).First(); </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">sheet.Id.Value = replacementPartId; </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">workbookPart.DeletePart(worksheetPart); </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div><span style="font-family: courier new; font-size: 10pt">}</span></div>         </td>       </tr>     </tbody></table> </div>  <h2>Conclusion </h2>  <p>This post gives you more insight into reading and writing large Open XML files, while avoiding performance or Out of Memory exceptions. Let me know if you guys have other Open XML SDK related post requests. </p>  <p>Zeyad Rajabi</p>]]></content:encoded>
    </item>
    <item>
      <title>Parsing and Reading Large Excel Files with the Open XML SDK</title>
      <link>https://docs.microsoft.com/archive/blogs/brian_jones/parsing-and-reading-large-excel-files-with-the-open-xml-sdk</link>
      <pubDate>Thu, 27 May 2010 13:03:43 GMT</pubDate>
      <dc:creator><![CDATA[I'm Brian Jones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brian_jones/2010/05/27/parsing-and-reading-large-excel-files-with-the-open-xml-sdk/</guid>
      <description><![CDATA[I want to thank you guys for leaving blog post requests. Today's post will focus on one of your...]]></description>
      <content:encoded><![CDATA[<p>I want to thank you guys for leaving blog post requests. Today's post will focus on one of your requests: parsing and reading large Excel files with the Open XML SDK. The <a href="https://blogs.msdn.com/b/brian_jones/archive/2010/03/12/announcing-the-release-of-the-open-xml-sdk-2-0.aspx">Open XML SDK</a> provides two approaches for parsing Open XML files: 1. <a href="https://blogs.msdn.com/b/brian_jones/archive/2009/01/28/traversing-in-the-open-xml-dom.aspx">using the SDK DOM</a>, 2. using the SAX-like reading/writing capabilities. The SDK DOM makes it easy to query and parse Open XML files due to strongly typed classes. Unfortunately, the DOM approach requires loading entire Open XML parts in memory, which can sometimes cause Out of Memory exceptions when dealing with really large files. The SAX-like reading/writing capability of the SDK provides a faster and less memory intensive approach. Let's compare the two approaches. </p>  <p>If you want to jump straight into the code, feel free to download the solution <a href="https://zeyadrajabi.members.winisp.net/sourcecode/ReadLargeExcelFiles.zip">here</a>. </p>  <p><object width="480" height="385"><param name="movie" value="https://www.youtube.com/v/fNKPWNs7j6g&amp;hl=en_US&amp;fs=1&amp;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="https://www.youtube.com/v/fNKPWNs7j6g&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>  <h2>Scenario </h2>  <p>Imagine a scenario where I work for a financial company that deals with very large Excel spreadsheets. These spreadsheets are updated daily by analysts and can easily grow to sizes exceeding hundreds of megabytes. At the end of the day a solution is used to read and extract relevant data from every spreadsheet. </p>  <p>Here is a screenshot of an example workbook with millions of cells of data: </p>  <p><a href="https://zeyadrajabi.members.winisp.net/ParsingandReadingLargeExcelFileswiththeO_B954/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://zeyadrajabi.members.winisp.net/ParsingandReadingLargeExcelFileswiththeO_B954/image_thumb.png" width="853" height="550" /></a> </p>  <p></p>  <h2>Solution </h2>  <p>The scenario described above is pretty simple and involves many of the general concepts described in a previous post on <a href="https://blogs.msdn.com/brian_jones/archive/2008/11/10/reading-data-from-spreadsheetml.aspx">reading data from Excel files</a>. The main difference in today's post is that I will show you the solution using both the DOM and SAX-like approaches. To accomplish the scenario we will need to take the following actions: </p>  <ol>   <li>Open the workbook using the Open XML SDK </li>    <li>Get the main workbook part </li>    <li>Get the appropriate worksheet </li>    <li>Read every cell value in the sheet </li> </ol>  <h2>Open XML SDK DOM Approach </h2>  <p>The SDK DOM approach is pretty straight forward. The method below will read every cell value for each row contained within the sheet data. </p>  <p><em>Note that code below works for cells that contain numeric values. Cells that contain other types of content will need a different type of solution. </em></p>  <div>   <table style="border-collapse: collapse; background: #dbe5f1" border="0"><colgroup><col style="width: 655px" /></colgroup><tbody valign="top">       <tr>         <td style="border-bottom: black 0.5pt solid; border-left: black 0.5pt solid; padding-bottom: 1px; padding-left: 7px; padding-right: 7px; border-top: black 0.5pt solid; border-right: black 0.5pt solid; padding-top: 1px" valign="middle">           <div><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">static</span> <span style="color: blue">void</span> ReadExcelFileDOM(<span style="color: blue">string</span> filename) </span></div>            <div><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">using</span> (<span style="color: #2b91af">SpreadsheetDocument</span> myDoc = <span style="color: #2b91af">SpreadsheetDocument</span>.Open(filename, <span style="color: blue">true</span>)) </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">WorkbookPart</span> workbookPart = myDoc.WorkbookPart; </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">WorksheetPart</span> worksheetPart = workbookPart.WorksheetParts.First(); </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">SheetData</span> sheetData = </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt">worksheetPart.Worksheet.Elements&lt;<span style="color: #2b91af">SheetData</span>&gt;().First(); </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">foreach</span> (<span style="color: #2b91af">Row</span> r <span style="color: blue">in</span> sheetData.Elements&lt;<span style="color: #2b91af">Row</span>&gt;()) </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">foreach</span> (<span style="color: #2b91af">Cell</span> c <span style="color: blue">in</span> r.Elements&lt;<span style="color: #2b91af">Cell</span>&gt;()) </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">string</span> text = c.CellValue.Text; </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div><span style="font-family: courier new; font-size: 10pt">}</span></div>         </td>       </tr>     </tbody></table> </div>  <p>The method above will definitely work for reading cell values within a worksheet. However, if the worksheet is quite large then the program's memory footprint will also be quite large. In fact, you are left at the mercy of the garbage collector, which may result in the program throwing an Out of Memory exception. </p>  <h2>Open XML SDK SAX-Like Approach </h2>  <p>If you have performance and/or memory concerns when developing an Open XML solution then you should look into using the <span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">OpenXmlReader</span> </span>and <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlWriter</span>. In today's post I will cover how to use the <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlReader</span>. I'll try to cover the <span style="font-family: courier new; color: #2b91af; font-size: 10pt">OpenXmlWriter</span> in a future post. </p>  <p>The method below will read every cell value for each row contained within the sheet data using the SAX-like approach. </p>  <p><em>Note that code below works for cells that contain numeric values. Cells that contain other types of content will need a different type of solution. </em></p>  <div>   <table style="border-collapse: collapse; background: #dbe5f1" border="0"><colgroup><col style="width: 655px" /></colgroup><tbody valign="top">       <tr>         <td style="border-bottom: black 0.5pt solid; border-left: black 0.5pt solid; padding-bottom: 1px; padding-left: 7px; padding-right: 7px; border-top: black 0.5pt solid; border-right: black 0.5pt solid; padding-top: 1px" valign="middle">           <div><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">static</span> <span style="color: blue">void</span> ReadExcelFileSAX(<span style="color: blue">string</span> filename) </span></div>            <div><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">using</span> (<span style="color: #2b91af">SpreadsheetDocument</span> myDoc = <span style="color: #2b91af">SpreadsheetDocument</span>.Open(filename, <span style="color: blue">true</span>)) </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">WorkbookPart</span> workbookPart = myDoc.WorkbookPart; </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">WorksheetPart</span> worksheetPart = workbookPart.WorksheetParts.First(); </span></div>            <div style="margin-left: 72pt">&#160;</div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">OpenXmlReader</span> reader = <span style="color: #2b91af">OpenXmlReader</span>.Create(worksheetPart); </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">string</span> text; </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">while</span> (reader.Read()) </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">if</span> (reader.ElementType == <span style="color: blue">typeof</span>(<span style="color: #2b91af">CellValue</span>)) </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt">{ </span></div>            <div style="margin-left: 144pt"><span style="font-family: courier new; font-size: 10pt">text = reader.GetText(); </span></div>            <div style="margin-left: 108pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div style="margin-left: 72pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div style="margin-left: 36pt"><span style="font-family: courier new; font-size: 10pt">} </span></div>            <div><span style="font-family: courier new; font-size: 10pt">}</span></div>         </td>       </tr>     </tbody></table> </div>  <p>The method above takes advantage of the <span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">OpenXmlReader</span> </span>class, which allows you to read an entire part without loading the part in memory. The <span style="font-family: courier new; font-size: 10pt">Create</span> method has the following signatures: </p>  <ul>   <li><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">public</span> <span style="color: blue">static</span> <span style="color: #2b91af">OpenXmlReader</span> Create(<span style="color: #2b91af">OpenXmlElement</span> openXmlElement); </span></li>    <li><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">public</span> <span style="color: blue">static</span> <span style="color: #2b91af">OpenXmlReader</span> Create(<span style="color: #2b91af">OpenXmlPart</span> openXmlPart); </span></li>    <li><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">public</span> <span style="color: blue">static</span> <span style="color: #2b91af">OpenXmlReader</span> Create(<span style="color: #2b91af">Stream</span> partStream); </span></li>    <li><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">public</span> <span style="color: blue">static</span> <span style="color: #2b91af">OpenXmlReader</span> Create(<span style="color: #2b91af">OpenXmlElement</span> openXmlElement, <span style="color: blue">bool</span> readMiscNodes); </span></li>    <li><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">public</span> <span style="color: blue">static</span> <span style="color: #2b91af">OpenXmlReader</span> Create(<span style="color: #2b91af">OpenXmlPart</span> openXmlPart, <span style="color: blue">bool</span> readMiscNodes);</span> </li>    <li><span style="font-family: courier new; font-size: 10pt"><span style="color: blue">public</span> <span style="color: blue">static</span> <span style="color: #2b91af">OpenXmlReader</span> Create(<span style="color: #2b91af">Stream</span> partStream, <span style="color: blue">bool</span> readMiscNodes);</span> </li> </ul>  <p>As you can see, the <span style="font-family: courier new; font-size: 10pt">Create</span> method allows you to read either a part or an xml subtree given a specific element. There are methods that allow you to skip miscellaneous nodes that are not associated with the Open XML format. Using the <span style="font-family: courier new; font-size: 10pt"><span style="color: #2b91af">OpenXmlReader</span> </span>class allows you to iterate the entire xml tree one node at a time. </p>  <h2>Conclusion </h2>  <p>Hopefully, this post gives you more insight into reading large Open XML files, while avoiding performance or Out of Memory Exceptions. If you guys have other Open XML SDK related post requests, let me know. </p>  <p>Thanks, </p>  <p>Zeyad Rajabi</p>]]></content:encoded>
    </item>
    <item>
      <title>Improvements Made to the Final Open XML SDK 2.0 compared to the December 2009 CTP</title>
      <link>https://docs.microsoft.com/archive/blogs/brian_jones/improvements-made-to-the-final-open-xml-sdk-2-0-compared-to-the-december-2009-ctp</link>
      <pubDate>Mon, 03 May 2010 10:54:00 GMT</pubDate>
      <dc:creator><![CDATA[I'm Brian Jones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brian_jones/2010/05/03/improvements-made-to-the-final-open-xml-sdk-2-0-compared-to-the-december-2009-ctp/</guid>
      <description><![CDATA[In a previous post, where I announced the release of the Open XML SDK 2.0, I promised to give you...]]></description>
      <content:encoded><![CDATA[<P>In a <A href="https://blogs.msdn.com/brian_jones/archive/2010/03/12/announcing-the-release-of-the-open-xml-sdk-2-0.aspx" mce_href="https://blogs.msdn.com/brian_jones/archive/2010/03/12/announcing-the-release-of-the-open-xml-sdk-2-0.aspx">previous post</A>, where I announced the release of the <A href="https://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=c6e744e5-36e9-45f5-8d8c-331df206e0d0" mce_href="https://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=c6e744e5-36e9-45f5-8d8c-331df206e0d0">Open XML SDK 2.0</A>, I promised to give you guys a list of improvements and breaking changes made to the SDK compared to the <A href="https://blogs.msdn.com/brian_jones/archive/2009/12/14/announcing-the-release-of-the-december-2009-ctp-for-the-open-xml-sdk.aspx" mce_href="https://blogs.msdn.com/brian_jones/archive/2009/12/14/announcing-the-release-of-the-december-2009-ctp-for-the-open-xml-sdk.aspx">December 2009 CTP</A>. </P>
<P>We made a few tweaks to the SDK based on some of the great feedback we received from you guys. The following sections below outline these changes. </P>
<H2>Autosave for Creating Documents </H2>
<P>One of the changes we made to the SDK is around supporting autosave for document creation. Back in <A href="https://blogs.msdn.com/brian_jones/archive/2009/08/27/announcing-the-release-of-the-august-2009-ctp-for-the-open-xml-sdk.aspx" mce_href="https://blogs.msdn.com/brian_jones/archive/2009/08/27/announcing-the-release-of-the-august-2009-ctp-for-the-open-xml-sdk.aspx">August 2009</A> we released a CTP that included autosave functionality when modifying parts within the Open XML package. This functionality allowed for changes to be automatically saved into the package, without the need to call Save() methods. We also provided a mechanism to turn off this functionality. This functionality worked great when opening existing files. However, we never added such functionality for newly created documents. That's what we added this time around for the final version of the SDK. Here are the new Create() methods: </P>
<UL>
<LI><SPAN style="FONT-FAMILY: Courier New; FONT-SIZE: 10pt"><SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: #2b91af">WordprocessingDocument</SPAN> Create(<SPAN style="COLOR: #2b91af">Package</SPAN> package, <SPAN style="COLOR: #2b91af">WordprocessingDocumentType</SPAN> type, <SPAN style="COLOR: blue">bool</SPAN> autoSave);</SPAN> </LI>
<LI><SPAN style="FONT-FAMILY: Courier New; FONT-SIZE: 10pt"><SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: #2b91af">WordprocessingDocument</SPAN> Create(<SPAN style="COLOR: #2b91af">Stream</SPAN> stream, <SPAN style="COLOR: #2b91af">WordprocessingDocumentType</SPAN> type, <SPAN style="COLOR: blue">bool</SPAN> autoSave);</SPAN> </LI>
<LI><SPAN style="FONT-FAMILY: Courier New; FONT-SIZE: 10pt"><SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: #2b91af">WordprocessingDocument</SPAN> Create(<SPAN style="COLOR: blue">string</SPAN> path, <SPAN style="COLOR: #2b91af">WordprocessingDocumentType</SPAN> type, <SPAN style="COLOR: blue">bool</SPAN> autoSave);</SPAN> </LI>
<LI><SPAN style="FONT-FAMILY: Courier New; FONT-SIZE: 10pt"><SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: #2b91af">SpreadsheetDocument</SPAN> Create(<SPAN style="COLOR: #2b91af">Package</SPAN> package, <SPAN style="COLOR: #2b91af">SpreadsheetDocumentType</SPAN> type, <SPAN style="COLOR: blue">bool</SPAN> autoSave);</SPAN> </LI>
<LI><SPAN style="FONT-FAMILY: Courier New; FONT-SIZE: 10pt"><SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: #2b91af">SpreadsheetDocument</SPAN> Create(<SPAN style="COLOR: #2b91af">Stream</SPAN> stream, <SPAN style="COLOR: #2b91af">SpreadsheetDocumentType</SPAN> type, <SPAN style="COLOR: blue">bool</SPAN> autoSave);</SPAN> </LI>
<LI><SPAN style="FONT-FAMILY: Courier New; FONT-SIZE: 10pt"><SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: #2b91af">SpreadsheetDocument</SPAN> Create(<SPAN style="COLOR: blue">string</SPAN> path, <SPAN style="COLOR: #2b91af">SpreadsheetDocumentType</SPAN> type, <SPAN style="COLOR: blue">bool</SPAN> autoSave);</SPAN> </LI>
<LI><SPAN style="FONT-FAMILY: Courier New; FONT-SIZE: 10pt"><SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: #2b91af">PresentationDocument</SPAN> Create(<SPAN style="COLOR: #2b91af">Package</SPAN> package, <SPAN style="COLOR: #2b91af">PresentationDocumentType</SPAN> type, <SPAN style="COLOR: blue">bool</SPAN> autoSave);</SPAN> </LI>
<LI><SPAN style="FONT-FAMILY: Courier New; FONT-SIZE: 10pt"><SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: #2b91af">PresentationDocument</SPAN> Create(<SPAN style="COLOR: #2b91af">Stream</SPAN> stream, <SPAN style="COLOR: #2b91af">PresentationDocumentType</SPAN> type, <SPAN style="COLOR: blue">bool</SPAN> autoSave);</SPAN> </LI>
<LI><SPAN style="FONT-FAMILY: Courier New; FONT-SIZE: 10pt"><SPAN style="COLOR: blue">public</SPAN> <SPAN style="COLOR: blue">static</SPAN> <SPAN style="COLOR: #2b91af">PresentationDocument</SPAN> Create(<SPAN style="COLOR: blue">string</SPAN> path, <SPAN style="COLOR: #2b91af">PresentationDocumentType</SPAN> type, <SPAN style="COLOR: blue">bool</SPAN> autoSave);</SPAN> </LI></UL>
<H2>Improved Namespace Processing </H2>
<P>The older CTPs used a predefined mapping between the XML prefixes and the different namespaces. In other words, the SDK assumed a specific prefix for a specific namespace. For example, a WordprocessingML Paragraph would always write out the element &lt;p&gt; with the prefix w, such as &lt;w:p&gt;. The issue, that some of you brought up, is that the SDK didn't handle custom prefixes defined in XML fragments if those prefixes conflicted with the predefined list of prefixes of the SDK. With the final version of the SDK we fixed this issue. The final version of the SDK should be a lot more robust. </P>
<H2>Breaking Changes in the Final Release of the Open XML SDK 2.0 </H2>
<P>The following table outlines changes made to Open XML SDK classes and attributes where there is a difference in the December 2009 CTP vs. the final RTW version of the Open XML SDK: </P>
<DIV>
<TABLE style="BORDER-COLLAPSE: collapse" border=0>
<COLGROUP>
<COL style="WIDTH: 319px">
<COL style="WIDTH: 319px"></COLGROUP>
<TBODY vAlign=top>
<TR>
<TD style="BORDER-BOTTOM: #4f81bd 2.25pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: #4f81bd 1pt solid; BORDER-RIGHT: #4f81bd 1pt solid">
<P><STRONG>December 2009 CTP Class/Attribute Name</STRONG></P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 2.25pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: #4f81bd 1pt solid; BORDER-RIGHT: #4f81bd 1pt solid">
<P><STRONG>Final RTW SDK Class/Attribute Name</STRONG></P></TD></TR>
<TR style="BACKGROUND: #d3dfee">
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Spreadsheet.ObjectAnchor::Z_order</P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Spreadsheet.ObjectAnchor::ZOrder</P></TD></TR>
<TR>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.AdditionalCharacteristics</P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.AdditionalCharacteristicsInfo</P></TD></TR>
<TR style="BACKGROUND: #d3dfee">
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Wordprocessing.Alias</P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Wordprocessing.SdtAlias</P></TD></TR>
<TR>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Wordprocessing.LatentStyleException</P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Wordprocessing.LatentStyleExceptionInfo</P></TD></TR>
<TR style="BACKGROUND: #d3dfee">
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Drawing.Diagrams.Else</P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Drawing.Diagrams.DiagramChooseElse</P></TD></TR>
<TR>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Drawing.Diagrams.If </P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Drawing.Diagrams.DiagramChooseIf</P></TD></TR>
<TR style="BACKGROUND: #d3dfee">
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Math.Function</P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Math.MathFunction</P></TD></TR>
<TR>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Vml.Handle</P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Vml.ShapeHandle</P></TD></TR>
<TR style="BACKGROUND: #d3dfee">
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Vml.Handles</P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Vml.ShapeHandles</P></TD></TR>
<TR>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Office2010.Ink.Property</P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Office2010.Ink.ContextNodeProperty</P></TD></TR>
<TR style="BACKGROUND: #d3dfee">
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.CustomProperties.Property</P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.CustomProperties.CustumDocumentProperty</P></TD></TR>
<TR>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Spreadsheet.Set</P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.Spreadsheet.TupleSet</P></TD></TR>
<TR style="BACKGROUND: #d3dfee">
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.VariantTypes.VTOStream</P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.VariantTypes.VTOStreamData</P></TD></TR>
<TR>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.VariantTypes.VTStream</P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.VariantTypes.VTStreamData</P></TD></TR>
<TR style="BACKGROUND: #d3dfee">
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.VariantTypes.VTVStream</P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.VariantTypes.VTVStreamData</P></TD></TR>
<TR>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: #4f81bd 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.CustomProperties.CustumDocumentProperty</P></TD>
<TD style="BORDER-BOTTOM: #4f81bd 1pt solid; BORDER-LEFT: medium none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: medium none; BORDER-RIGHT: #4f81bd 1pt solid">
<P>DocumentFormat.OpenXml.CustomProperties.CustomDocumentProperty</P></TD></TR></TBODY></TABLE></DIV>
<P><EM>Note: The change from Alias to SdtAlias will affect the most people. </EM></P>
<P>Zeyad Rajabi</P>]]></content:encoded>
    </item>
    <item>
      <title>Zeyad Rajabi’s Open XML SDK Blog Map</title>
      <link>https://docs.microsoft.com/archive/blogs/brian_jones/zeyad-rajabis-open-xml-sdk-blog-map</link>
      <pubDate>Tue, 06 Apr 2010 10:38:00 GMT</pubDate>
      <dc:creator><![CDATA[I'm Brian Jones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brian_jones/2010/04/06/zeyad-rajabis-open-xml-sdk-blog-map/</guid>
      <description><![CDATA[This post will represent the most up-to-date blog map for topics on the Open XML SDK.   Open XML SDK...]]></description>
      <content:encoded><![CDATA[<p>This post will represent the most up-to-date blog map for topics on the Open XML SDK. </p>  <h2>Open XML SDK Basics </h2>  <div>   <table style="border-collapse: collapse" border="0"><colgroup><col style="width: 222px" /><col style="width: 516px" /></colgroup><tbody valign="top">       <tr style="background: #4f81bd">         <td style="border-bottom: #4f81bd 1pt solid; padding-left: 7px; padding-right: 7px; border-top: #4f81bd 2.25pt solid">           <p><span style="color: white"><strong>Topic</strong></span></p>         </td>          <td style="border-bottom: #4f81bd 1pt solid; padding-left: 7px; padding-right: 7px; border-top: #4f81bd 2.25pt solid">           <p><span style="color: white"><strong>Description</strong></span></p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/01/12/open-xml-sdk-the-basics.aspx"><strong>Open XML SDK… the Basics</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn about classes of the SDK and their first class properties. This post is a great introduction to the Open XML SDK. </p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/01/28/traversing-in-the-open-xml-dom.aspx"><strong>Traversing in the Open XML DOM</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p>Learn the basic techniques of traversing in the Open XML DOM tree using the Open XML SDK.</p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/09/17/open-xml-sdk-code-snippets.aspx"><strong>Open XML SDK Code Snippets</strong></a><strong> </strong></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn how to leverage the Open XML SDK code snippets to create rich solutions.</p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/09/24/finding-open-xml-errors-with-open-xml-sdk-validation.aspx"><strong>Finding Open XML Errors with Open XML SDK Validation</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p>Learn how to use the Open XML SDK to validate your Open XML files.</p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="Announcing%20the%20Release%20of%20the%20December%202009%20CTP%20for%20the%20Open%20XML%20SDK"><strong>Open XML SDK Productivity Tool</strong></a><strong> </strong></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn how to use the Open XML SDK Productivity Tool. This tool is the easiest way to learn about the Open XML file formats and the Open XML SDK. </p>            <p><object width="480" height="385">                                 <param name="movie" value="https://www.youtube.com/v/KSSMLR19JWA&amp;hl=en_US&amp;fs=1&amp;">                                 </param>                                 <param name="allowFullScreen" value="true"></param>                                 <param name="allowscriptaccess" value="always"></param>                                 <embed src="https://www.youtube.com/v/KSSMLR19JWA&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>         </td>       </tr>     </tbody></table> </div>  <h2>Word </h2>  <div>   <table style="border-collapse: collapse" border="0"><colgroup><col style="width: 222px" /><col style="width: 516px" /></colgroup><tbody valign="top">       <tr style="background: #4f81bd">         <td style="border-bottom: #4f81bd 1pt solid; padding-left: 7px; padding-right: 7px; border-top: #4f81bd 2.25pt solid">           <p><span style="color: white"><strong>Topic</strong></span></p>         </td>          <td style="border-bottom: #4f81bd 1pt solid; padding-left: 7px; padding-right: 7px; border-top: #4f81bd 2.25pt solid">           <p><span style="color: white"><strong>Description</strong></span></p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2008/12/08/the-easy-way-to-assemble-multiple-word-documents.aspx"><strong>The Easy Way to Assemble Multiple Documents</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn how to leverage altChunks to easily create a robust document assembly solution in less than a thirty lines of code.</p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/01/05/taking-advantage-of-bound-content-controls.aspx"><strong>Taking Advantage of Bound Content Controls</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p>Learn how to leverage bound content controls to bind to custom XML.</p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/01/19/pushing-data-from-a-database-into-a-word-document.aspx"><strong>Pushing Data from a Database into a Word Document</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn how to build a repeating table within WordprocessingML based on data within a database.</p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/02/06/removing-comments-from-a-wordprocessing-document-programmatically.aspx"><strong>Removing Comments from a Wordprocessing Document Programmatically</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p>Learn how to remove comments from a Word document. </p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/05/05/retrieving-word-content-based-on-styles.aspx"><strong>Retrieving Word Content Based on Styles</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn how to retrieve content in a document based on style information.</p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/06/15/removing-page-and-section-breaks-from-a-word-document.aspx"><strong>Removing Page and Section Breaks from a Word Document</strong></a><strong> </strong></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p>Learn how to remove page and section breaks in a Word document. </p>            <p><object width="480" height="385">                                 <param name="movie" value="https://www.youtube.com/v/yA3TFolIYco&amp;hl=en_US&amp;fs=1&amp;">                                 </param>                                 <param name="allowFullScreen" value="true"></param>                                 <param name="allowscriptaccess" value="always"></param>                                 <embed src="https://www.youtube.com/v/yA3TFolIYco&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>         </td>       </tr>     </tbody></table> </div>  <h2>Excel </h2>  <div>   <table style="border-collapse: collapse" border="0"><colgroup><col style="width: 222px" /><col style="width: 516px" /></colgroup><tbody valign="top">       <tr style="background: #4f81bd">         <td style="border-bottom: #4f81bd 1pt solid; padding-left: 7px; padding-right: 7px; border-top: #4f81bd 2.25pt solid">           <p><span style="color: white"><strong>Topic</strong></span></p>         </td>          <td style="border-bottom: #4f81bd 1pt solid; padding-left: 7px; padding-right: 7px; border-top: #4f81bd 2.25pt solid">           <p><span style="color: white"><strong>Description</strong></span></p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2008/11/04/document-assembly-solution-for-spreadsheetml.aspx"><strong>Document Assembly Solution for SpreadsheetML</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn how to populate a spreadsheet with data from a real SQL database and create a cool looking chart based on that data.</p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2008/11/10/reading-data-from-spreadsheetml.aspx"><strong>Read Data from SpreadsheetML</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p>Learn how to read data from a spreadsheet and insert it into some data source, like a database.</p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2008/11/14/writing-semantically-aware-linq-queries-against-excel-tables.aspx"><strong>Writing Semantically Aware LINQ Queries Against Excel Tables</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn how to write a generic LINQ query that can work against any data source, including an Excel table. </p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/02/19/how-to-copy-a-worksheet-within-a-workbook.aspx"><strong>How to Copy a Worksheet within a Workbook</strong></a><strong> </strong></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p>Learn how to copy a worksheet within the same workbook. </p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/04/20/removing-comments-from-excel-and-powerpoint-files.aspx"><strong>Removing Comments from Excel and PowerPoint Files</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn how to remove comments from an Excel workbook. </p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none"><a href="https://blogs.msdn.com/b/brian_jones/archive/2010/05/27/parsing-and-reading-large-excel-files-with-the-open-xml-sdk.aspx"><strong>Read Large Excel Files using the Open XML SDK</strong></a></td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">Learn how to use the SAX-like capabilities of the Open XML SDK to read very large Excel files. </td>       </tr>     </tbody></table> </div>  <h2>PowerPoint </h2>  <div>   <table style="border-collapse: collapse" border="0"><colgroup><col style="width: 222px" /><col style="width: 516px" /></colgroup><tbody valign="top">       <tr style="background: #4f81bd">         <td style="border-bottom: #4f81bd 1pt solid; padding-left: 7px; padding-right: 7px; border-top: #4f81bd 2.25pt solid">           <p><span style="color: white"><strong>Topic</strong></span></p>         </td>          <td style="border-bottom: #4f81bd 1pt solid; padding-left: 7px; padding-right: 7px; border-top: #4f81bd 2.25pt solid">           <p><span style="color: white"><strong>Description</strong></span></p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2008/11/18/creating-a-presentation-report-based-on-data.aspx"><strong>Creating a Presentation Report Based on Data</strong></a><strong> </strong></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn how to create a rich presentation report based on data from a database. </p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/03/05/how-to-assemble-multiple-powerpoint-decks.aspx"><strong>How to Assemble Multiple PowerPoint Decks</strong></a><strong> </strong></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p>Learn how to merge multiple PowerPoint decks together. </p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/04/20/removing-comments-from-excel-and-powerpoint-files.aspx"><strong>Removing Comments from Excel and PowerPoint Files</strong></a><strong> </strong></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn how to remove comments from a PowerPoint deck. </p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/08/13/adding-repeating-data-to-powerpoint.aspx"><strong>Adding Repeating Data to PowerPoint</strong></a><strong> </strong></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p>Learn how to create repeating data within a table on a PowerPoint slide. </p>            <p><object width="480" height="385">                                 <param name="movie" value="https://www.youtube.com/v/eT2ASswr0kA&amp;hl=en_US&amp;fs=1&amp;">                                 </param>                                 <param name="allowFullScreen" value="true"></param>                                 <param name="allowscriptaccess" value="always"></param>                                 <embed src="https://www.youtube.com/v/eT2ASswr0kA&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>         </td>       </tr>     </tbody></table> </div>  <h2>Multiple Applications (Word, Excel, and PowerPoint) </h2>  <div>   <table style="border-collapse: collapse" border="0"><colgroup><col style="width: 222px" /><col style="width: 516px" /></colgroup><tbody valign="top">       <tr style="background: #4f81bd">         <td style="border-bottom: #4f81bd 1pt solid; padding-left: 7px; padding-right: 7px; border-top: #4f81bd 2.25pt solid">           <p><span style="color: white"><strong>Topic</strong></span></p>         </td>          <td style="border-bottom: #4f81bd 1pt solid; padding-left: 7px; padding-right: 7px; border-top: #4f81bd 2.25pt solid">           <p><span style="color: white"><strong>Description</strong></span></p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/03/13/importing-charts-from-spreadsheets-to-wordprocessing-documents.aspx"><strong>Importing Charts from Spreadsheets to Wordprocessing Documents</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn how to import a chart from a spreadsheet to a Word document. </p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/04/01/importing-a-table-from-wordprocessingml-to-spreadsheetml.aspx"><strong>Importing a Table from WordprocessingML to SpreadsheetML</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p>Learn how to import a table from a Wordprocessing document into a spreadsheet. </p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/06/04/importing-smartart-from-powerpoint-to-word.aspx"><strong>Importing SmartArt from PowerPoint to Word</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn how to import SmartArt from a PowerPoint deck into a Word document. </p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/06/30/embedding-an-open-xml-file-in-another-open-xml-file.aspx"><strong>Embedding an Open XML File in another Open XML File</strong></a><strong> </strong></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p>Learn how to embed Open XML files within other Open XML documents. </p>            <p><object width="480" height="385">                                 <param name="movie" value="https://www.youtube.com/v/xunFeqCW2GA&amp;hl=en_US&amp;fs=1&amp;">                                 </param>                                 <param name="allowFullScreen" value="true"></param>                                 <param name="allowscriptaccess" value="always"></param>                                 <embed src="https://www.youtube.com/v/xunFeqCW2GA&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/07/21/embedding-any-file-type-like-pdf-in-an-open-xml-file.aspx"><strong>Embedding Any File Type, Like PDF, in an Open XML File</strong></a><strong> </strong></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn how to embed any file within Open XML documents. </p>            <p><object width="480" height="385">                                 <param name="movie" value="https://www.youtube.com/v/qRzK035M4xI&amp;hl=en_US&amp;fs=1&amp;">                                 </param>                                 <param name="allowFullScreen" value="true"></param>                                 <param name="allowscriptaccess" value="always"></param>                                 <embed src="https://www.youtube.com/v/qRzK035M4xI&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/08/03/the-open-xml-sdk-and-fluent-ui-extensibility.aspx"><strong>The Open XML SDK and Fluent UI Extensibility</strong></a><strong> </strong></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p>Learn how to add custom UI to a set of documents within a directory. </p>            <p><object width="480" height="385">                                 <param name="movie" value="https://www.youtube.com/v/ci3J9w5iOIg&amp;hl=en_US&amp;fs=1&amp;">                                 </param>                                 <param name="allowFullScreen" value="true"></param>                                 <param name="allowscriptaccess" value="always"></param>                                 <embed src="https://www.youtube.com/v/ci3J9w5iOIg&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2010/01/04/document-assembly-merging-excel-powerpoint-and-word-content-together.aspx"><strong>Document Assembly: Merging Excel, PowerPoint, and Word Content Together</strong></a><strong> </strong></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn how to take multiple Word, Excel and PowerPoint documents and merge them all together to form a final Word document. </p>            <p><object width="480" height="385">                                 <param name="movie" value="https://www.youtube.com/v/abrjIFJHGhs&amp;hl=en_US&amp;fs=1&amp;">                                 </param>                                 <param name="allowFullScreen" value="true"></param>                                 <param name="allowscriptaccess" value="always"></param>                                 <embed src="https://www.youtube.com/v/abrjIFJHGhs&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>         </td>       </tr>     </tbody></table> </div>  <h2>Office Services </h2>  <div>   <table style="border-collapse: collapse" border="0"><colgroup><col style="width: 222px" /><col style="width: 516px" /></colgroup><tbody valign="top">       <tr style="background: #4f81bd">         <td style="border-bottom: #4f81bd 1pt solid; padding-left: 7px; padding-right: 7px; border-top: #4f81bd 2.25pt solid">           <p><span style="color: white"><strong>Topic</strong></span></p>         </td>          <td style="border-bottom: #4f81bd 1pt solid; padding-left: 7px; padding-right: 7px; border-top: #4f81bd 2.25pt solid">           <p><span style="color: white"><strong>Description</strong></span></p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/12/03/extending-the-reach-of-excel-services-with-the-open-xml-sdk.aspx"><strong>Extending the Reach of Excel Services with the Open XML SDK</strong></a><strong> </strong></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn how to extend the reach of Excel Services and hosted charts to gather data from within a library of Word documents. </p>            <p><object width="480" height="385">                                 <param name="movie" value="https://www.youtube.com/v/_oyF9-TRcAs&amp;hl=en_US&amp;fs=1&amp;">                                 </param>                                 <param name="allowFullScreen" value="true"></param>                                 <param name="allowscriptaccess" value="always"></param>                                 <embed src="https://www.youtube.com/v/_oyF9-TRcAs&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2010/02/09/leveraging-the-power-of-word-automation-services-and-the-open-xml-sdk.aspx"><strong>Leveraging the Power of Word Automation Services and the Open XML SDK</strong></a><strong> </strong></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p>Learn how to use Word Automation Services to update a table of contents of several documents have been merged with the Open XML SDK </p>            <p><object width="480" height="385">                                 <param name="movie" value="https://www.youtube.com/v/exj_q4Yoxeo&amp;hl=en_US&amp;fs=1&amp;">                                 </param>                                 <param name="allowFullScreen" value="true"></param>                                 <param name="allowscriptaccess" value="always"></param>                                 <embed src="https://www.youtube.com/v/exj_q4Yoxeo&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2010/02/26/open-xml-sdk-office-services-better-together.aspx"><strong>Open XML SDK + Office Services: Better Together</strong></a><strong> </strong></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p>Learn how to leverage all three components, the SDK and the two Office services, to create a very cool mash up document assembly solution </p>            <p><object width="480" height="385">                                 <param name="movie" value="https://www.youtube.com/v/jz__Nwsecn4&amp;hl=en_US&amp;fs=1&amp;">                                 </param>                                 <param name="allowFullScreen" value="true"></param>                                 <param name="allowscriptaccess" value="always"></param>                                 <embed src="https://www.youtube.com/v/jz__Nwsecn4&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>         </td>       </tr>     </tbody></table> </div>  <h2>Presentations </h2>  <div>   <table style="border-collapse: collapse" border="0"><colgroup><col style="width: 197px" /><col style="width: 441px" /></colgroup><tbody valign="top">       <tr style="background: #4f81bd">         <td style="border-bottom: #4f81bd 1pt solid; padding-left: 7px; padding-right: 7px; border-top: #4f81bd 2.25pt solid">           <p><span style="color: white"><strong>Year + Conference + Session</strong></span></p>         </td>          <td style="border-bottom: #4f81bd 1pt solid; padding-left: 7px; padding-right: 7px; border-top: #4f81bd 2.25pt solid">           <p><span style="color: white"><strong>Presentation</strong></span></p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://channel9.msdn.com/pdc2008/PC34"><strong>2008 PDC - Open XML Format SDK: Developing Open XML Solutions</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p><object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
                                width="980" height="498">                                 <param name="source" value="https://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" />                                 <param name="initParams" value="deferredLoad=true,duration=0,m= https://mschnlnine.vo.llnwd.net/d1/pdc08/WMV-HQ/PC34.wmv,autostart=false,autohide=true,showembed=true, thumbnail=https://mschnlnine.vo.llnwd.net/d1/pdc08/THUMBNAILS/PC34.jpg, postid=426735" />                                 <param name="background" value="#00FFFFFF" />                                 <a href="https://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">                                     <img src="https://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" />                                 </a>                             </object></p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://msdn.microsoft.com/en-us/office/ff436082.aspx"><strong>2009 SPC – Deep Dive Open XML and Open XML SDK</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><object type="application/x-silverlight" data="data:application/x-silverlight-2," width="560"
                                height="450">                                 <param name="source" value="https://microsoftpdc.com/Skins/PDC09/Styles/players/VideoPlayer2009_03_27.xap" />                                 <param name="initParams" value="m=https://zeyadrajabi.members.winisp.net/SPC14_402_OpenXMLDeepDive_Rajabi_1024.wmv,autostart=false, autohide=true,showembed=true, thumbnail=https://microsoftpdc.com/Skins/PDC09/Styles/images/DefaultPlayerBackground.png, postid=0" />                                 <param name="background" value="#00FFFFFF" />                                <a href="https://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">                                     <img src="https://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" />                                 </a>                             </object></p>         </td>       </tr>        <tr>         <td style="border-bottom: #4f81bd 2.25pt solid; padding-left: 7px; padding-right: 7px; border-top-style: none; border-left-style: none">           <p><a href="https://blogs.msdn.com/brian_jones/archive/2009/11/23/open-xml-sdk-word-automation-services-presentation-at-pdc.aspx"><strong>2009 PDC – Open XML SDK + Office Services</strong></a></p>         </td>          <td style="border-bottom: #4f81bd 2.25pt solid; border-right-style: none; padding-left: 7px; padding-right: 7px; border-top-style: none">           <p><object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
                                width="800" height="450">                                 <param name="source" value="https://microsoftpdc.com/Skins/PDC09/Styles/players/VideoPlayer2009_03_27.xap" />                                 <param name="initParams" value="m=https://ecn.channel9.msdn.com/o9/pdc09/wmvhigh/PR09.wmv,autostart=false, autohide=true,showembed=true, thumbnail=https://microsoftpdc.com/Skins/PDC09/Styles/images/DefaultPlayerBackground.png, postid=0" />                                 <param name="background" value="#00FFFFFF" />                                 <a href="https://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">                                     <img src="https://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" />                                 </a>                             </object></p>         </td>       </tr>     </tbody></table> </div>  <p>&#160;</p>  <p>Zeyad Rajabi</p>]]></content:encoded>
    </item>
  </channel>
</rss>