<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Begin informative text</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/chrisrae/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/chrisrae/feed.xml</link>
    <description>There are two types of people: Those that find file formats exciting, and those that haven&amp;#039;t read Chris Rae&amp;#039;s blog yet.</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:19:07 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Open XML Package Editor for Visual Studio updated and open-sourced</title>
      <link>https://docs.microsoft.com/archive/blogs/chrisrae/open-xml-package-editor-for-visual-studio-updated-and-open-sourced</link>
      <pubDate>Mon, 02 Jun 2014 13:43:00 GMT</pubDate>
      <dc:creator><![CDATA[Chris Rae]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/chrisrae/2014/06/02/open-xml-package-editor-for-visual-studio-updated-and-open-sourced/</guid>
      <description><![CDATA[Back in 2010, we released the Open XML Package Editor for Visual Studio, a plugin which allowed...]]></description>
      <content:encoded><![CDATA[<p>Back in 2010, we released the <a title="Open XML Package Editor for Visual Studio" href="http://visualstudiogallery.msdn.microsoft.com/450a00e3-5a7d-4776-be2c-8aa8cec2a75b">Open XML Package Editor for Visual Studio</a>, a plugin which allowed users to open Office documents in Visual Studio and edit the OPC package content directly.</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/35/74/1258.1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-35-74/1258.1.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/35/74/1258.1.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-35-74/1258.1.png" alt="" width="230" /></a><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/35/74/4265.2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-35-74/4265.2.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/35/74/4265.2.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-35-74/4265.2.png" alt="" border="0" /></a>&nbsp;</p>
<p>It's a great tool for anyone working on debugging or developing Office Open XML documents &ndash; since we shipped it it's had over 35,000 downloads, and I personally use it all the time.</p>
<p>Unfortunately, as is often the way with these things, it was developed in 2010 for Visual Studio 2010, and so you need to keep a copy of VS2010 around in order to use it. Well, I'm pleased to say that in the last few weeks we've rebuilt the project so that it now works in VS2012 and VS2013, supports Visio's new VSDX format and has a few other handy minor fixes and additions. And I'm especially pleased to announce that we've published the code as an open-source project, <a href="https://github.com/OfficeDev/Open-XML-Package-Editor-Power-Tool-for-Visual-Studio">here on GitHub</a> (under the <a title="Apache 2.0 license" href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache 2.0 license</a>). So if you have a burning desire to get it working in VS2007, have at it!</p>
<p>If you just want to download the new version of the Package Editor, it's <a href="http://visualstudiogallery.msdn.microsoft.com/450a00e3-5a7d-4776-be2c-8aa8cec2a75b">here on the Visual Studio gallery</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>ODF 1.2 enters the ISO standardization process</title>
      <link>https://docs.microsoft.com/archive/blogs/chrisrae/odf-1-2-enters-the-iso-standardization-process</link>
      <pubDate>Tue, 15 Apr 2014 06:35:00 GMT</pubDate>
      <dc:creator><![CDATA[Chris Rae]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/chrisrae/2014/04/15/odf-1-2-enters-the-iso-standardization-process/</guid>
      <description><![CDATA[On March 26th, OASIS announced to the ODF TC that they had officially submitted ODF 1.2 to ISO/IEC...]]></description>
      <content:encoded><![CDATA[<p>On March 26th, OASIS <a href="https://lists.oasis-open.org/archives/office/201403/msg00015.html">announced to the ODF TC that they had officially submitted ODF 1.2 to ISO/IEC JTC1 as a candidate international standard</a>. This is great news for the office application community and an important milestone for the format.</p>
<p>ODF 1.2 is entering the ISO system using the <a href="http://www.iso.org/iso/home/standards_development/deliverables-all.htm?type=pas">PAS process</a>, which allows extant non-ISO standards to become ISO-certified more quickly. It's the same process which was used by ODF 1.1 1.0 (ISO/IEC 26300) and very similar to the Fast Track process used for Open XML (ISO/IEC 29500). It is fast in standardization terms, but still somewhat lengthy &ndash; after a two month grace period for National Bodies to translate it into their local languages, there follows a three month ballot during which NBs may vote and submit comments. If necessary, a Ballot Resolution Meeting may be called to discuss and resolve these comments. As Rob Weir mentioned in <a href="http://www.robweir.com/blog/2014/03/odf-12-submitted-to-iso.html">his blog post</a>, it's unwise to predict the speed of standards development, but it's probably probable we will see the ballot close in Q4 this year.</p>
<p>In 2009, Microsoft <a href="https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;cad=rja&amp;uact=8&amp;ved=0CCkQFjAA&amp;url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fnews%2Fpresskits%2Feu-msft%2Fdocs%2Fmicrosoft_interoperability_undertaking.doc&amp;ei=ajs8U6TOBeeCyAHzuIDgDQ&amp;usg=AFQjCNHg51z-c_KnbT1UprSlbbdKPnVaLA&amp;sig2=Rqh4w_ptsiN1X037SI6CxQ&amp;bvm=bv.63934634,d.aWc">made a commitment</a> to support new ISO versions of ODF within nine months of final publication. When we built Office 2013, we made the decision to include support for ODF 1.2 as published by OASIS because there are important improvements over ODF 1.1, such as the specification of formulas for spreadsheets early, to avoid the possibility of having to add a new file format in a service pack. We're therefore fully supportive of the ISO submission, and as a member of the ODF TC I've been working to help produce the necessary paperwork. After some months of preparation, it's great to see the OASIS standard finally make its way to ISO, and I'm pleased that we could play a small part in that process.<br />No rest for the wicked, though, and this means that the focus of the OASIS ODF TC now shifts towards ODF 1.3. Onwards and upwards!</p>]]></content:encoded>
    </item>
    <item>
      <title>Creating a simple XLSX from scratch using the Open XML SDK</title>
      <link>https://docs.microsoft.com/archive/blogs/chrisrae/creating-a-simple-xlsx-from-scratch-using-the-open-xml-sdk</link>
      <pubDate>Thu, 18 Aug 2011 16:39:00 GMT</pubDate>
      <dc:creator><![CDATA[Chris Rae]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/chrisrae/2011/08/18/creating-a-simple-xlsx-from-scratch-using-the-open-xml-sdk/</guid>
      <description><![CDATA[Recently I've been scouting around Stack Overflow looking for Open XML-related questions - it's...]]></description>
      <content:encoded><![CDATA[<p>Recently I've been scouting around <a href="http://stackoverflow.com/">Stack Overflow</a> looking for Open XML-related questions - it's always interesting to see what real people are doing with technologies you've been involved in.</p>
<p>One topic that often comes up is the question of how to create SpreadsheetML files from scratch. The way most people go about this is to save a blank file directly from Excel and then, using the <a href="http://msdn.microsoft.com/en-us/library/bb448854.aspx">Open XML SDK</a>, open that template file, insert your necessary data into it and save it as the destination output file. While this works fine I can't help feeling it's a little inelegant. Why not create a file from scratch? The Open XML SDK comes with a great tool called the Reflector. You can open a file, click "Reflect code" and it'll generate the code necessary to create that file. I saved a blank file from Excel, and then opened it in the reflector. It generated 900 lines of code. Which wasn't exactly what I had in mind.</p>
<p>It turns out that a "blank" file saved by Excel contains a lot of data that isn't <em>required</em> by the standard. As well as styles, font data, margins and other layout information, it also contains many application properties and some theme definitions created by Microsoft. These are useful when you want your annual report to look great in non-Microsoft products, but they're not so helpful if you just want a grid of numbers to show up. In addition, the reflector is geared towards helping you write code to structure your workbook, not really to write large amounts of static data into it.</p>
<p>Nearly five years ago, my colleague Doug wrote a blog post, "<a href="http://blogs.msdn.com/b/dmahugh/archive/2006/07/15/createxlsx.aspx">CreateXlsx sample program</a>", which walked the user through creation of a minimalist SpreadsheetML file using the System.IO.Packaging library. This was before the Open XML SDK existed, so I thought I'd write an updated version of that code using the SDK.</p>
<p>Without further ado, here is the code. To run it:</p>
<ul>
<li>Get a copy of Visual Studio 2010, and download and install the <a href="http://msdn.microsoft.com/en-us/library/bb448854.aspx">Open XML SDK</a></li>
<li>Click File..New..Project and select<strong> Visual C#</strong> \ <strong>Windows</strong> \ <strong>Console Application</strong></li>
<li>Add a reference to the <strong>DocumentFormat.OpenXml</strong> library</li>
<li>Replace the entire text of Program.cs with the following code:</li>
</ul>
<div></div>
<div>
<pre style="color: #000000;"><span style="color: #0000ff;">using</span> System;
<span style="color: #0000ff;">using</span> System.Collections.Generic;
<span style="color: #0000ff;">using</span> System.Linq;
<span style="color: #0000ff;">using</span> System.Text;
<span style="color: #0000ff;">using</span> DocumentFormat.OpenXml.Packaging;
<span style="color: #0000ff;">using</span> DocumentFormat.OpenXml.Spreadsheet;
<span style="color: #0000ff;">using</span> DocumentFormat.OpenXml;

<span style="color: #0000ff;">namespace</span> MakeXLSX
{
    <span style="color: #0000ff;">public class</span><span style="color: #2b91af;"> MostlyGeneratedClass</span>
    {
        <span style="color: #008000;">// Creates a SpreadsheetDocument</span></pre>
<pre style="color: #000000;"><span style="color: #0000ff;"><span class="Apple-tab-span" style="white-space: pre;"></span></span></pre>
<pre>        <span style="color: #0000ff;">public void</span> CreatePackage(<span style="color: #0000ff;">string</span> filePath)</pre>
<pre>        {
            <span style="color: #0000ff;">using</span> (<span style="color: #2b91af;">SpreadsheetDocument</span> package = <span style="color: #2b91af;">SpreadsheetDocument</span>.Create(filePath, <span style="color: #2b91af;">SpreadsheetDocumentType</span>.Workbook))
            {
                CreateParts(package);
            }
        }

        <span style="color: #008000;">// Adds child parts and generates content of the specified part</span></pre>
<pre><span style="color: #0000ff;"></span></pre>
<pre><span style="color: #0000ff;"></span></pre>
<pre>        <span style="color: #0000ff;">private void</span> CreateParts(<span style="color: #2b91af;">SpreadsheetDocument</span> document)</pre>
<pre>        {</pre>
<pre>            <span style="color: #2b91af;">WorkbookPart</span> workbookPart1 = document.AddWorkbookPart();
            GenerateWorkbookPart1Content(workbookPart1);

            <span style="color: #2b91af;">WorksheetPart</span> worksheetPart1 = workbookPart1.AddNewPart&lt;<span style="color: #2b91af;">WorksheetPart</span>&gt;(<span style="color: #a31515;">"rId1"</span>);
            GenerateWorksheetPart1Content(worksheetPart1);
        }

        <span style="color: #008000;">// Generates content of workbookPart1.</span><span style="color: #0000ff;">&nbsp;</span></pre>
<pre style="color: #000000;"><span style="color: #0000ff;"></span></pre>
<pre>        <span style="color: #0000ff;">private void</span> GenerateWorkbookPart1Content(<span style="color: #2b91af;">WorkbookPart</span> workbookPart1)</pre>
<pre>        {
            <span style="color: #2b91af;">Workbook</span> workbook1 = <span style="color: #0000ff;">new</span><span style="color: #2b91af;"> Workbook</span>();
            workbook1.AddNamespaceDeclaration(<span style="color: #a31515;">"r"</span>, <span style="color: #a31515;">"http://schemas.openxmlformats.org/officeDocument/2006/relationships"</span>);

            <span style="color: #2b91af;">Sheets</span> sheets1 = <span style="color: #0000ff;">new</span><span style="color: #2b91af;"> Sheets</span>();
            <span style="color: #2b91af;">Sheet</span> sheet1 = <span style="color: #0000ff;">new</span><span style="color: #2b91af;"> Sheet</span>() { Name = <span style="color: #a31515;">"Sheet1"</span>, SheetId = (<span style="color: #2b91af;">UInt32Value</span>)1U, Id = <span style="color: #a31515;">"rId1"</span> };
            sheets1.Append(sheet1);

            workbook1.Append(sheets1);
            workbookPart1.Workbook = workbook1;
        }

        <span style="color: #008000;">// Generates content of worksheetPart1.</span><span style="color: #0000ff;">&nbsp;</span></pre>
<pre style="color: #000000;"><span style="color: #0000ff;"></span></pre>
<pre>        <span style="color: #0000ff;">private void</span> GenerateWorksheetPart1Content(<span style="color: #2b91af;">WorksheetPart</span> worksheetPart1)</pre>
<pre>        {
            <span style="color: #2b91af;">Worksheet</span> worksheet1 = <span style="color: #0000ff;">new</span><span style="color: #2b91af;"> Worksheet</span>();
            <span style="color: #2b91af;">SheetData</span> sheetData1 = <span style="color: #0000ff;">new</span><span style="color: #2b91af;"> SheetData</span>();

            <span style="color: #2b91af;">Row</span> row1 = <span style="color: #0000ff;">new</span><span style="color: #2b91af;"> Row</span>();
            <span style="color: #2b91af;">Cell</span> cell1 = <span style="color: #0000ff;">new</span><span style="color: #2b91af;"> Cell</span>() { CellReference = <span style="color: #a31515;">"A1"</span>, DataType = <span style="color: #2b91af;">CellValues</span>.InlineString };
            <span style="color: #2b91af;">InlineString</span> inlineString1 = <span style="color: #0000ff;">new</span><span style="color: #2b91af;"> InlineString</span>();
            <span style="color: #2b91af;">Text</span> text1 = <span style="color: #0000ff;">new</span><span style="color: #2b91af;"> Text</span>();
            text1.Text = <span style="color: #a31515;">"hello"</span>;
            inlineString1.Append(text1);
            cell1.Append(inlineString1);
            row1.Append(cell1);

            sheetData1.Append(row1);
            worksheet1.Append(sheetData1);
            worksheetPart1.Worksheet = worksheet1;
        }
    }

    <span style="color: #0000ff;">class</span><span style="color: #2b91af;"> Program</span>
    {
        <span style="color: #0000ff;">static void</span> Main(<span style="color: #0000ff;">string</span>[] args)
        {
            <span style="color: #2b91af;">MostlyGeneratedClass</span> x = <span style="color: #0000ff;">new</span><span style="color: #2b91af;"> MostlyGeneratedClass</span>();
            x.CreatePackage(<span style="color: #a31515;">"c:\\chris.xlsx"</span>);
        }
    }
}</pre>
</div>
<p>Running this code will create a c:\chris.xlsx which contains one worksheet, with "hello" in cell A1. Using this template and the reflector you should be able to build onwards to develop whatever solution you're after.</p>
<p>Of course, not everyone is using the SDK. In case you're generating spreadsheet files using another platform, I've attached the file that this code creates. As you probably know, you can look at the content of this file by simply renaming it to .zip and then viewing it with a normal zip file editor. It contains only five Parts, with around 32 lines of XML in total, so it should be easy enough to port this to your platform.</p>
<p>Code is provided under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache License 2.0</a>&nbsp;- I hope this is permissive enough to allow reuse in any circumstances; please get in touch if you would like to use this code under a different license for any reason.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/10/19/75/60/minimalistfile.xlsx" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-19-75-60/minimalistfile.xlsx">minimalistfile.xlsx</a></p>]]></content:encoded>
    </item>
    <item>
      <title>New interoperability testing library for ISO/IEC 29500 documents</title>
      <link>https://docs.microsoft.com/archive/blogs/chrisrae/new-interoperability-testing-library-for-isoiec-29500-documents</link>
      <pubDate>Tue, 12 Jul 2011 14:59:00 GMT</pubDate>
      <dc:creator><![CDATA[Chris Rae]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/chrisrae/2011/07/12/new-interoperability-testing-library-for-isoiec-29500-documents/</guid>
      <description><![CDATA[One thing implementers of Open XML often get in touch with me about is test documents....]]></description>
      <content:encoded><![CDATA[<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/35/74/8032.image_gallery.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-35-74/8032.image_5F00_gallery.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/35/74/8032.image_gallery.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-35-74/8032.image_5F00_gallery.jpg" border="0" width="200" alt="" /></a></p>
<p>One thing implementers of Open XML often get in touch with me about is test documents. Understandably, any implementer wants to test their implementation against some corpus of test material, but so far there&rsquo;s been no straightforward place to find a bunch of documents with which to test an ISO/IEC 29500 or ECMA-376 implementation.</p>
<p>Well, now there is. We&rsquo;ve been working with the <a href="http://www.fraunhofer.de/en/">Fraunhofer Institute</a> for the last year or so to build and stock such a library, and I'm pleased to say that this library is now live, at&nbsp;<a href="http://www.document-interoperability.com/">document-interoperability.com</a>.</p>
<p>At the core of the site is a database of PresentationML, SpreadsheetML and WordprocessingML documents. Implementers can download these documents to use in their testing, and anyone with a login can upload documents to the library to allow other implementers to test with them too.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/35/74/7888.Capture.PNG" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-35-74/7888.Capture.PNG"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/35/74/7888.Capture.PNG" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-35-74/7888.Capture.PNG" border="0" alt="" /></a></p>
<p>The documents are organised into a folder structure by ML, and the downloads are available to everyone. The documents are made available under the&nbsp;Creative Commons <a href="http://creativecommons.org/licenses/by/3.0/">Attribution 3.0 Unported License</a>.</p>
<p>As well as linking to various other validation tools, the site incorporates <a href="http://www.document-interoperability.com/validator">copies of two existing validators</a>, which implementers can use to test their own files for validity against the standard. Any files uploaded to the library are tested using these validators, and the validation results are available with the file details. Users can also vote on files, and even write comments about them.</p>
<p>Like any other implementer, Microsoft have an internal library of our own test documents, and over the next few weeks we'll be uploading many of those to this new public repository. I hope that, over time, this site will become a valuable resource for any implementers looking to test their Open XML applications. &nbsp;If you have any comments or suggestions for parts of the site, please get in touch via the feedback form!</p>]]></content:encoded>
    </item>
    <item>
      <title>Trip report: WG4 Prague</title>
      <link>https://docs.microsoft.com/archive/blogs/chrisrae/trip-report-wg4-prague</link>
      <pubDate>Wed, 06 Apr 2011 14:44:27 GMT</pubDate>
      <dc:creator><![CDATA[Chris Rae]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/chrisrae/2011/04/06/trip-report-wg4-prague/</guid>
      <description><![CDATA[Just back from another WG4 meeting, so I thought I’d write up a few thoughts. My trip was slightly...]]></description>
      <content:encoded><![CDATA[<p>Just back from another WG4 meeting, so I thought I’d write up a few thoughts. My trip was slightly longer than usual this time, mainly because I was with Doug at the <a href="http://www.xmlprague.cz/">XML Prague</a> conference the preceeding weekend. Doug wrote a <a href="http://blogs.msdn.com/b/dmahugh/archive/2011/03/29/xml-prague-2011.aspx">trip report</a> about XML Prague, so I won’t talk about it here.</p>  <p>We had the traditional three days of meetings for WG4 and I’d say these were very productive. Aside from munching through defect reports, there were a few interesting topics that looked worthy of calling out. All the photos in here are Doug’s, unless I say otherwise.</p>  <p><a href="http://www.flickr.com/photos/dougerino/5576796546/"><img src="http://farm6.static.flickr.com/5098/5576796546_5660ea0e71_o.jpg" width="321" height="234" /></a></p>  <p><strong>Working out how to maintain Strict and Transitional</strong></p>  <p>The text of IS 29500 specific to Office document formats is currently split into two parts – Part 1 (Strict) and Part 4 (Transitional). Part 4 is styled as an addendum to Part 1 because, originally, Transitional was a superset of Strict, so it made a lot of sense to lay it out that way. However, recently we’ve changed a few areas so that Strict actually has a larger feature set than Transitional – a good example being Amendment 1 (formerly Amendment 2) which deals with the treatment of ISO-8601 dates in spreadsheet cells. It’s difficult to describe restrictions in an addendum, and it’s even harder to describe paragraphs that are simply modified. Going forward, this problem is likely to worsen, as WG4 are not intending enlarging the feature set of Transitional with future enhancements. Should we reorganise the standard and, if so, how? We discussed a few options in the meeting, and a task force was assigned to report back with the pros and cons of the various approaches. We agreed the following day that the best solution was probably to split Parts 1 and 4 into entirely distinct texts, but we also agreed that this shouldn’t happen until such a time as a Revision of Part 1 was initiated, to avoid the duplication of the revision work. I suspect we’ll discuss this more in future meetings, as it’s likely something we’ll have to solve both for implementers and for ourselves as editors.</p>  <p><strong>Changing process around maintenance of schemas</strong></p>  <p>On another maintenance topic, we continued a discussion that’s been ongoing on the WG4 mailing list regarding how best to maintain the schema files. At the moment we have four sets of schemas, as we have full RNG and XSD schemas for both Parts 1 and 4. In total there’s some 2.5Mb of raw schemas, so it’s not an insignificant bundle. We’re obliged to distribute both printed and digital copies and until last week we maintained these separately, giving us some eight different schema sets to keep track of. We’ve actually found the current system to be pretty reliable, but there is widespread agreement that a better one could be found, and so we discussed this in some detail and came up with a plan.</p>  <p>From now on, we’ll use the electronic schemas as a master copy. Our electronic schemas are stored in an <a href="http://en.wikipedia.org/wiki/Apache_Subversion">SVN</a> repository (hosted on <a href="http://www.assembla.com/">Assembla</a>) and WG4 members are able to check in/out – by tagging schema changes with the relevant DR numbers, we will be able to easily derive schema changes which applied to a given DR, and we’ll also be able to consolidate the changes using standard source control tools. Whenever we are working on defect reports which require schema changes, publishing Amendments or altering the core text, we’ll integrate the necessary schema changes from the electronic copy. I was tasked with building some sort of tool to effect that, a task which I’m secretly rather looking forward to. We also agreed that schema changes would be okayed before DRs could be moved to “Last Call” by WG4, and so we have a new DR status to represent “waiting for schema”. I’m reminded of how valuable the face-to-face meetings are when we can discuss a topic at length, and finish off by agreeing on a new process and putting it in place immediately. Somehow this is often a little trickier on conference calls – perhaps this experience will all change with the onset of products like Cisco’s <a href="http://www.cisco.com/en/US/products/ps7060/index.html">Telepresence</a>, but we’re not quite there yet.</p>  <p><a href="http://www.flickr.com/photos/dougerino/5576796606/"><img src="http://farm6.static.flickr.com/5187/5576796606_0796b11558_b.jpg" width="321" height="221" /></a></p>  <p><strong>Measurement units in Strict</strong></p>  <p>For some time, we have had a long discussion about a topic covered by two defect reports - <a href="http://cid-c8ba0861dc5e4adc.office.live.com/view.aspx/Public%20Documents/2009/DR-09-0295.docx?wa=wsignin1.0">DR 09-0295</a> [WML: gridCols measurement units] and <a href="http://cid-c8ba0861dc5e4adc.office.live.com/view.aspx/Public%20Documents/2011/DR-11-0001.docx">DR 11-0001</a> [SML: Failures to specify measurement units explicitly]. As you can see from the DR itself there’s a long history on DR 09-0295, which runs to some sixteen pages, and it took us some time in the meeting even to fully grasp what that history was. However, I’ll attempt to summarise…</p>  <p>In ECMA-376, there were many attributes whose values were simply numbers, but which actually represented distances (e.g. marTop, the top margin for an HTML DIV element), which is a distance in twips. At the BRM meeting back in Geneva, it was determined that implementers should be able to specify units on these instead of relying on the default unit types – so instead of using the value “5” to mean 5 twips, they could use “0.003472 in” or “0.25 pt”. For a large number of such attributes, a union of types was created to allow both numeric values and strings with a two-digit unit specifier appended to them.</p>  <p>Now, things become a bit more complex. Firstly, the unit specifiers were made optional in both Strict and Transitional. In Beijing we agreed that they should be mandatory in Strict and optional in Transitional, and I wrote up the changes necessary for that. However, in Prague, we just re-agreed that they should be optional in both. Well, hey, it’s the right of a committee to change its mind. You might think that this means we can just leave the standard as it is right now! Well, you’d be wrong. DR 11-0001 points out a large number of places that appear not to have felt the benefit of the BRM changes, and it’s quite possible that there are more. Additionally, there are some places where the default units (specifically EMUs) are not actually available in the list of unit specifiers, and that seems inconsistent as well.</p>  <p>Murata-san, Jirka and I were tasked with establishing the possible scope of missing changes from the BRM, and once we have that data we’ll reconvene and discuss in WG4. We’re going to determine this by each attacking the standard from the angle we feel most confortable about – handily, for Murata-san and Jirka it’s the schema, and for yours truly it’s the prose. VBA, here we come.</p>  <p><img src="http://farm6.static.flickr.com/5104/5566886536_bbdc8d599f_b.jpg" width="227" height="181" /></p>  <p><strong>Extra-curricular</strong></p>  <p>Prague is a beautiful city, and so it seemed rude not to take a look at the local sights while we were there. Doug and I walked over Charles Bridge a few times to see if we could take some fine original shots. Given the number of giant cameras on the bridge at any one time, I think this might be the world’s most photographed landmark. If you don’t get the photo you wanted on Charles Bridge, console yourself with the fact that you can just hunt through Google image search and dig up the exact photo you had in mind, probably taken on the same day. I did take one half-decent photo (below) but some practice required, evidently.</p>  <p><a href="http://www.flickr.com/photos/22959236@N00/5567592360/"><img src="http://farm6.static.flickr.com/5105/5567592360_3e90f5625f_b.jpg" width="423" height="281" /></a></p>  <p>Overall, I think these meetings went very well and I enjoyed my first time at XML Prague. We’ll be meeting again in Berlin in June – this will be more of a flying visit for me because I’ll be taking part in the <a href="http://en.wikipedia.org/wiki/24_Hours_of_LeMons">24 Hours of Lemons</a> on the following weekend, and I’ll have to dash out at the end. Perhaps I’ll do some sort of combo trip report for the two events…</p>]]></content:encoded>
    </item>
    <item>
      <title>My first dabblings in open source</title>
      <link>https://docs.microsoft.com/archive/blogs/chrisrae/my-first-dabblings-in-open-source</link>
      <pubDate>Sun, 26 Dec 2010 09:03:00 GMT</pubDate>
      <dc:creator><![CDATA[Chris Rae]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/chrisrae/2010/12/26/my-first-dabblings-in-open-source/</guid>
      <description><![CDATA[When I started this job, I had a hunch that I'd be living a little more in the open source world,...]]></description>
      <content:encoded><![CDATA[<p>When I started this job, I had a hunch that I'd be living a little more in the open source world, and working more with FOSS-type people. This has turned out to be true, and on WG4 I've been involved quite a bit with people who are trying to make money from open source (Novell, IBM, Oracle etc) and also with some truly free pieces of work (most notably&nbsp;<a href="http://www.probatron.org:8080/officeotron/officeotron.html">Office-o-tron</a> and <a href="http://29500.idippedut.dk/">Jesper's IS 29500 validator</a>). So far, hardly any of those involved have had beards.</p>
<p>It seems like a sensible thing for me to do would be to contribute to an open source project myself, just to get a better handle on how that whole approach to software works. Apart from a few forays at university, I've so far been involved with closed-source, paid software. I spent a lot of time working in investment banking (where we'd fight bitterly with our own internal departments for source code) and then went to work for Microsoft, who are primarily closed-source software manufacturer. However, since I saw Stallman talking in London back in the mid-1990s, I've always been curious about how the open source model might work and this job seemed like an ideal chance to experiment.</p>
<p>But what project to work on?</p>
<p>One of the other things I did to, erm, increase my understanding of the working of WG4 was to buy a Nikon D40 and start attempting to take photos with it. Once I'd uploaded a few photos to <a href="http://www.flickr.com/photos/22959236@N00/">my Flickr profile</a>, I thought it might be fun to use my best photos as my Windows wallpaper. Flickr being as popular as it is, surely there was an app that did that.</p>
<p>There wasn't anything hugely obvious but after a bit of digging I found one, written by a gentleman named <a href="http://www.rushfrisby.com/">Rush Frisby</a>. It existed as a .EXE attached to a blog post of his, and I enthusiastically downloaded it. It looked like just the thing I needed - no complicated UI, it lives for most of the time as just a taskbar icon, and off it goes and downloads pictures from Flickr. It worked very well, although it wouldn't let me pick from my own photographs (I had to use a keyword search instead) and it had a few bugs in it, mostly where the computer had no internet connection. The bugs looked pretty simple, so I emailed Mr Frisby wondering if I could fix them for him. He very kindly dug up the entire source code from his archives, and sent me it. I fixed the bugs, added a couple of features and sent it back. I was really just intending using it myself, but it seemed decent to send the changes back to Rush.</p>
<p>After a few more changes, I (tentatively) suggested to Rush that he open source the project. It would appear he's done more of this sort of thing, and he uploaded it to Codeplex almost immediately. Since then I've checked in a few more changes and built a setup file, so it should be reasonably usable by most people.</p>
<p>
<a href="http://www.flickr.com/photos/22959236@N00/5293754264/" title="Screenshot for Wallpaper Flickr by pugwonk, on Flickr"><img src="http://farm6.static.flickr.com/5047/5293754264_741f040c68.jpg" width="500" height="453" alt="Screenshot for Wallpaper Flickr" /></a></p>
<p>The app is available now at:</p>
<p><a href="http://flickrwallpaper.codeplex.com/">http://flickrwallpaper.codeplex.com/</a></p>
<p>I'd be very interested in thoughts on the app, and very interested indeed in anyone else who'd like to help develop it. I've so far not experienced any of the integration headaches that I know can exist with open source - as far as I can see I just check in changes and they magically appear on Codeplex, so it's possible I'm a project editor, or something similar to that. Or it's possible that I've misunderstood generally how Codeplex works...</p>
<p>More on this experience as it continues. In the meantime, Merry Christmas.</p>]]></content:encoded>
    </item>
    <item>
      <title>Using VBA to turn numbering into normal text in Word documents</title>
      <link>https://docs.microsoft.com/archive/blogs/chrisrae/using-vba-to-turn-numbering-into-normal-text-in-word-documents</link>
      <pubDate>Fri, 08 Oct 2010 15:13:00 GMT</pubDate>
      <dc:creator><![CDATA[Chris Rae]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/chrisrae/2010/10/08/using-vba-to-turn-numbering-into-normal-text-in-word-documents/</guid>
      <description><![CDATA[As you probably know by now, I spend a lot of my time writing up proposed edits to&nbsp;the file...]]></description>
      <content:encoded><![CDATA[<p>As you probably know by now, I spend a lot of my time writing up proposed edits to&nbsp;the file format standard&nbsp;IS 29500 in Word. The end result of what I'm doing always ends up being sent to my ISO colleagues on WG4 in another document. I'll be editing something that looks like this:</p>
<p><img border="0" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/35/74/3404.Capture.PNG" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-35-74/3404.Capture.PNG" /></p>
<p>When I copy and paste this into a new document to send to my colleagues, it unfortunately looks like this:</p>
<p><img border="0" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/35/74/4846.Capture2.PNG" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-35-74/4846.Capture2.PNG" /></p>
<p>This is because Word faithfully maintained my numbering settings, and the proceeding numbered sections are all gone. You may come across similar headaches when you want to edit a large document where the section numbering must remain constant, and you don't want to mess with it by mistake.</p>
<p>Well, I wrote some code to turn the numbered sections in my document into normal paragraph text. It works on numbered lists as well as numbered sections.</p>
<p>I'll not go into great detail about how it works, but basically it's a two stage process - I first go through the document <i>adding</i> the numbering text to each numbered paragraph, then I go through the document again deleting the numbering from the paragraphs. Why not do it all at once? Well, that's what I tried first, actually. You probably realised faster than I did that I ended up with a document which contained a large number of "1"s. Why not go through the paragraphs in reverse order? A fine question - I'm afraid to say that using the Word object model to index into the Paragraphs collection is very slow indeed - my guess is that when Word is asked for Paragraphs(186543) it needs to go through the prior ones first to find it. Using For Each is much faster than indexing, and I guess I can see why.</p>
<p>As you'll know if you run this code on a large document, it's as slow as the proverbial anyway. For thousands of pages, you may wish to prepare a cup of tea.</p>
<p>The code is below - as ever, if you have any fixes or changes, I'd love to hear them. Please bear in mind that I wrote this for my own purposes and it's not really been tested at all - I noticed today, for example, that it seems to remove indentation on paragraphs which doesn't matter to me but might matter to you. Please don't run this on your documents without keeping a copy of them first!</p>
<p>&nbsp;</p>
<p><span style="font-family: 'courier new', courier;">Private Sub RemoveNumberingOnAllSections()<br />Dim i As Paragraph, lastsaved As Date<br />&nbsp;&nbsp; &nbsp;' Convert all important sections to straight text (no numbering)<br />&nbsp;&nbsp; &nbsp;For Each i In ActiveDocument.Paragraphs<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;If IsNumberedPara(i.Range) Then<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ConvertNumberedToTextNoDelete i.Range<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ActiveDocument.UndoClear<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;End If<br />&nbsp;&nbsp; &nbsp;Next</span></p>
<p><span><span style="font-family: 'courier new', courier;">&nbsp;&nbsp; &nbsp;For Each i In ActiveDocument.Paragraphs<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;If IsNumberedPara(i.Range) Then<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;i.Range.ListFormat.RemoveNumbers<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ActiveDocument.UndoClear<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;End If<br />&nbsp;&nbsp; &nbsp;Next<br /></span></span><span style="font-family: 'courier new', courier;">End Sub</span></p>
<p><span style="font-family: 'courier new', courier;">Private Sub ConvertNumberedToTextNoDelete(rOf As Range)<br />&nbsp;&nbsp; &nbsp;If InStr(rOf.ListFormat.ListString, ".") &gt; 0 Then<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;If Left(rOf.Text, Len(rOf.ListFormat.ListString)) &lt;&gt; rOf.ListFormat.ListString Then<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;' Haven't done this one already<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rOf.InsertBefore rOf.ListFormat.ListString + " "<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;End If<br />&nbsp;&nbsp; &nbsp;End If<br />End Sub</span></p>
<p><span style="font-family: 'courier new', courier;">Private Function IsNumberedPara(rOf As Range) As Boolean<br />&nbsp;&nbsp; &nbsp;If rOf Is Nothing Then ' if the document doesn't have numbered sections, this will cause changes to be enumerated in the whole thing<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;IsNumberedPara = True<br />&nbsp;&nbsp; &nbsp;ElseIf rOf.ListFormat.ListString &lt;&gt; "" Then<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;If Asc(rOf.ListFormat.ListString) &lt;&gt; 63 Then<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IsNumberedPara = True<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;End If<br />&nbsp;&nbsp; &nbsp;End If<br />End Function</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Where is the documentation for Office's docx/xlsx/pptx formats? Part 2: Office 2010</title>
      <link>https://docs.microsoft.com/archive/blogs/chrisrae/where-is-the-documentation-for-offices-docxxlsxpptx-formats-part-2-office-2010</link>
      <pubDate>Wed, 06 Oct 2010 14:55:00 GMT</pubDate>
      <dc:creator><![CDATA[Chris Rae]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/chrisrae/2010/10/06/where-is-the-documentation-for-offices-docxxlsxpptx-formats-part-2-office-2010/</guid>
      <description><![CDATA[This follows up on my post earlier this week about where the documentation for Office 2007's formats...]]></description>
      <content:encoded><![CDATA[<p>This follows up on my <a href="http://blogs.msdn.com/b/chrisrae/archive/2010/09/25/where-is-the-documentation-for-office-2010-s-docx-xlsx-pptx-formats.aspx">post earlier this week</a> about where the documentation for Office 2007's formats live. I am powerless to make you do anything you don't want to, of course, but I'd strongly encourage you to read that one first as I'll be building on a lot of what I said there. I shall link it regularly during this article to instill a nagging feeling of guilt.</p>
<p><strong>ECMA-376 and the Flavours of ISO/IEC 29500</strong></p>
<p>Perhaps I'll use that as a band name. As I mentioned in my <a href="http://blogs.msdn.com/b/chrisrae/archive/2010/09/25/where-is-the-documentation-for-office-2010-s-docx-xlsx-pptx-formats.aspx">previous post</a>, Office 2007 uses the file format specified in the first edition of the international standard <a href="http://www.ecma-international.org/publications/standards/Ecma-376.htm">ECMA-376</a> as its default file format - these are the xlsx/docx/pptx files that we know and love. Office 2010 uses another standard, ISO/IEC 29500, as its default file format. These also use the xlsx/docx/pptx extensions. But wait, you say! How the heck can I open files from Office 2010 in Office 2007 then?</p>
<p>ISO/IEC 29500 is a direct descendant of ECMA-376. It's so direct a descendant, in fact, that <a href="http://www.ecma-international.org/publications/standards/Ecma-376.htm">ECMA-376 2nd edition</a> is identical to ISO/IEC 29500. This is useful information for implementers, particularly because Ecma distribute standards for free, so you can get a copy of ISO/IEC 29500 by downloading ECMA-376 2nd edition from the <a href="http://www.ecma-international.org/publications/standards/Ecma-376.htm">Ecma site</a>.</p>
<p>ISO/IEC 29500 has two variants: "Strict" and "Transitional". Transitional ISO/IEC 29500 is almost identical to ECMA-376 first edition, and it is this that Office 2010 uses as its default file format. Because of the similarity between the standards, files created in Office 2010 can be opened without issues&nbsp;in Office 2007. Office 2010 is able to <i>read</i> the Strict variant of ISO/IEC 29500, but writes files using Transitional. We've <a href="http://blogs.msdn.com/b/dmahugh/archive/2010/04/06/office-s-support-for-iso-iec-29500-strict.aspx">announced</a>&nbsp;that the next version of Office, version 15, will support the creation of Strict files, but that's a story for a future blog post.</p>
<p><strong>ISO/IEC 29500</strong></p>
<p>I covered the organisation of ECMA-376 in my <a href="http://blogs.msdn.com/b/chrisrae/archive/2010/09/25/where-is-the-documentation-for-office-2010-s-docx-xlsx-pptx-formats.aspx">earlier post</a>, so I'd like to give ISO/IEC 29500 the same treatment. The standard is split into four parts:</p>
<table cellspacing="3" cellpadding="3" class="MsoNormalTable" style="border-collapse: collapse; border-width: 0px; border-style: solid;" border="1">
<tbody>
<tr>
<td><strong>Part</strong></td>
<td><strong>Title</strong></td>
<td><strong>Contents</strong></td>
</tr>
<tr>
<td>1</td>
<td><a href="http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-376,%20Second%20Edition,%20Part%201%20-%20Fundamentals%20And%20Markup%20Language%20Reference.zip">Fundamentals And Markup Language Reference</a></td>
<td>The detailed reference of all that files may contain, and how to use them. This information pertains to both Strict and Transitional files. Roughly equivalent to ECMA-376 Parts <a href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%201%20(PDF).zip">1</a>, <a href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%203%20(PDF).zip">3</a> and <a href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%204%20(PDF).zip">4</a>,&nbsp;but without the features that ended up&nbsp;in Transitional.</td>
</tr>
<tr>
<td>2</td>
<td><a href="http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-376,%20Second%20Edition,%20Part%202%20-%20Open%20Packaging%20Conventions.zip">Open Packaging Conventions</a></td>
<td>How Office files are composed &ndash; how to break a file into its constituent parts, and how those parts can relate to one another. Equivalent to <a href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(PDF).zip">ECMA-376 Part 2</a>.</td>
</tr>
<tr>
<td>3</td>
<td><a href="http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-376,%20Second%20Edition,%20Part%203%20-%20Markup%20Compatibility%20and%20Extensibility.zip">Markup Compatibility and Extensibility</a></td>
<td>An inbuilt mechanism for adding arbitrary extensions to files. More on this shortly. Equivalent to <a href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%205%20(PDF).zip">ECMA-376 Part 5</a>.</td>
</tr>
<tr>
<td>4</td>
<td><a href="http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-376,%20Second%20Edition,%20Part%204%20-%20Transitional%20Migration%20Features.zip">Transitional Migration Features</a></td>
<td>Read as an addendum to Part 1, this part defines Transitional files. By and large, Transitional features are <em>added </em>to Strict, so in order to fully understand Transitional files you must read Parts 1 <em>and</em> 4. Roughly equivalent to the parts of ECMA-376 Parts <a href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%201%20(PDF).zip">1</a>, <a href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%203%20(PDF).zip">3</a> and <a href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%204%20(PDF).zip">4</a>&nbsp;which didn't make it into Part 1.</td>
</tr>
</tbody>
</table>
<p>If you've ever tried to print out this standard (as I did by mistake once) you will notice that it's very large. It's not the&nbsp;thirty thousand&nbsp;pages that some telecom standards stretch to, but it's a lot of reading.&nbsp;As I mentioned in my <a href="http://blogs.msdn.com/b/chrisrae/archive/2010/09/25/where-is-the-documentation-for-office-2010-s-docx-xlsx-pptx-formats.aspx">previous post about Office 2007 file formats</a>, I'd advise using the toolsets of others as much as you can rather than starting writing your read code from scratch. But, hey, maybe you like a challenge.</p>
<p><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Camper_soffietto.jpg/220px-Camper_soffietto.jpg" /></p>
<p><strong>Office 2010 Extensions</strong></p>
<p>Like any software developer, Microsoft are busy adding new features to Office with each new release, and for some features we need to find a way to store them in the file format. One of the great things about ISO/IEC 29500 is its extensibiltiy mechanisms - implementers can extend the file format while remaining 100% compliant with the standard. The bulk of the extension system is covered in Part 3, Markup Compatibility and Extensibility.</p>
<p>If you're not interested in Office 2010 features, you can use the mechanisms described in Part 3 to ignore them. If you do want to understand Office 2010's extensions, they're fully documented on MSDN. They're with all of Microsoft's other file format documents, at <a href="http://msdn.microsoft.com/en-us/library/cc313105(v=office.12).aspx">http://msdn.microsoft.com/en-us/library/cc313105(v=office.12).aspx</a>. Depending on the type of files you're interested in reading, you'll want to read <a href="http://msdn.microsoft.com/en-us/library/dd773189(v=office.12).aspx">MS-DOCX</a>, <a href="http://msdn.microsoft.com/en-us/library/dd922181(v=office.12).aspx">MS-XLSX</a>, <a href="http://msdn.microsoft.com/en-us/library/dd926741(v=office.12).aspx">MS-PPTX</a> or <a href="http://msdn.microsoft.com/en-us/library/dd905216(v=office.12).aspx">MS-ODRAWXML</a>. Right now these are all up-to-date with Office 2010's content - when we eventually get done with the next version of Office, we will publish full documentation of those extensions at the same time as the product ships.</p>
<p><strong>Implementer Notes</strong></p>
<p>I mentioned Implementer Notes in my <a href="http://blogs.msdn.com/b/chrisrae/archive/2010/09/25/where-is-the-documentation-for-office-2010-s-docx-xlsx-pptx-formats.aspx">last post</a> about Office 2007 - we've also published Implementer Notes for Office 2010 against the ISO/IEC 29500 standard. These live with the documents above on MSDN, and the exact file is&nbsp;<a href="http://msdn.microsoft.com/en-us/library/ee908652(v=office.12).aspx">MS-OI29500</a>. I already gave a lot more information regarding how to read implementer notes in my <a href="http://blogs.msdn.com/b/chrisrae/archive/2010/09/25/where-is-the-documentation-for-office-2010-s-docx-xlsx-pptx-formats.aspx">previous post</a>, so I won't go into detail again here.</p>
<p><strong>Stuck?</strong></p>
<p>If you get stuck here, Microsoft have two forums dedicated to you. The <a href="http://social.msdn.microsoft.com/Forums/en-US/os_openXML-ecma/threads">first</a> (brand new) covers Office's implementation of IS 29500 and is something we're hoping to build up in the coming months. It's agnostic to the technology you're using to create or read the files. The <a href="http://social.msdn.microsoft.com/Forums/en-US/oxmlsdk/threads">second</a> is applicable if you're using our own .NET <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyId=C6E744E5-36E9-45F5-8D8C-331DF206E0D0&amp;displaylang=en">Open XML SDK</a> to build files - as I mentioned above I'd encourage you to use other toolsets wherever you can, and our <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyId=C6E744E5-36E9-45F5-8D8C-331DF206E0D0&amp;displaylang=en">Open XML SDK</a> is currently the most popular approach on the Windows platform.</p>
<p><strong>Summary</strong></p>
<p>I realise the situation is more complicated here than it is for Office 2007, and it's much more complicated than it was for the old binary formats where all the documentation was in one place. With standards compliance comes a slightly more complex documentation situation, but the upside of using a standards-based file format maintained by ISO will, I believe, outweigh the extra effort in reading the documentation. If you remember nothing else from this article, I propose memorising the following table:</p>
<table style="border-collapse: collapse; border-width: 0px; border-style: solid;" cellspacing="3" cellpadding="3" border="1">
<tbody>
<tr>
<td><strong>Document</strong></td>
<td><strong>When to refer to it?</strong></td>
</tr>
<tr>
<td><a href="http://www.ecma-international.org/publications/standards/Ecma-376.htm">IS-29500</a></td>
<td>Always (when looking at files Office creates, it's this PDF I have open 99% of the time)</td>
</tr>
<tr>
<td><a href="http://msdn.microsoft.com/en-us/library/ee908652(v=office.12).aspx">Office 2010 Implementer Notes</a></td>
<td>When investigating specific Office behaviour with regard to features covered in IS 29500 (quite honestly, I only look at these when something doesn't work the way I expected)</td>
</tr>
<tr>
<td><a href="http://msdn.microsoft.com/en-us/library/cc313105(v=office.12).aspx">Office 2010 Extensions</a></td>
<td>When trying to read or write a feature that is new in Office 2010</td>
</tr>
</tbody>
</table>
<p>I've styled this post as referring to Office 2010, but in reality this approach should stand you in good stead for many versions of Office into the future, as you'll be using variants of the above three documents for a long time to come.</p>]]></content:encoded>
    </item>
    <item>
      <title>Where is the documentation for Office's docx/xlsx/pptx formats? Part 1: Office 2007</title>
      <link>https://docs.microsoft.com/archive/blogs/chrisrae/where-is-the-documentation-for-offices-docxxlsxpptx-formats-part-1-office-2007</link>
      <pubDate>Sat, 25 Sep 2010 16:34:00 GMT</pubDate>
      <dc:creator><![CDATA[Chris Rae]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/chrisrae/2010/09/25/where-is-the-documentation-for-offices-docxxlsxpptx-formats-part-1-office-2007/</guid>
      <description><![CDATA[Since we started using XML-based file formats, we&rsquo;ve seen a huge uptick in the number of...]]></description>
      <content:encoded><![CDATA[<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">Since we started using XML-based file formats, we&rsquo;ve seen a huge uptick in the number of customers who want to read and write those files from applications that aren&rsquo;t Office. That&rsquo;s great, because that was one of the things we had hoped for when we first started using them.</span></span></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><br /></span></span></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"></span></span><span style="font-family: Calibri; font-size: small;">The first question customers ask when starting to read and write Office files is: Where is the documentation for the Office 2007 and 2010 file formats? It&rsquo;s on MSDN, with the <a href="http://msdn.microsoft.com/en-us/library/cc313105(v=office.12).aspx">rest of your file format documentation</a>, right?</span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;"><br /></span></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">Well&hellip; wrong. Let me start with Office 2007 first, and I&rsquo;ll cover Office 2010 in the next post. I do this to build my audience into a frenzy of excitement. It&rsquo;s like Eastenders.</span></span></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><br /></span></span></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><a href="https://www.youtube.com/user/EastEnders?hl=en-GB"><img border="0" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/35/74/0474.Dot_Lou_Ethel_ee.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-35-74/0474.Dot_5F00_Lou_5F00_Ethel_5F00_ee.jpg" width="215" height="155" /></a></span></span></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><br /></span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><strong>Office 2007 and ECMA-376</strong></span></span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">Office 2007&rsquo;s default file format is not something that belongs to Microsoft &ndash; it&rsquo;s actually an international standard, ECMA-376 (also called &ldquo;<span style="color: #1f497d;"><span style="background-color: #ffffff;"><span style="color: #000000;">Ecma</span></span> </span>Office Open XML&rdquo;). Microsoft were very active in the creation of this standard, and we&rsquo;re still the biggest implementers of it, but the documentation of this standard is owned and controlled by the standards organisation Ecma<span style="color: #1f497d;"> <span style="background-color: #ffffff;"><span style="color: #000000;">International</span></span></span>, not Microsoft, and so it doesn&rsquo;t appear with our file format documentation on MSDN.</span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;"><br /></span></p>
<p class="MsoNormal"><o:p><span style="font-family: Calibri; font-size: small;"></span></o:p></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">The good news is that ECMA-376 is <a href="http://www.ecma-international.org/publications/standards/Ecma-376.htm">freely available</a> and almost everything Office 2007 writes is covered by that standard. The standard is split into five parts:</span></span></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><br /></span></span></p>
<p class="MsoNormal"><o:p><span style="font-family: Calibri; font-size: small;"></span></o:p></p>
<table style="border-collapse: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 0cm 0cm 0cm 0cm;" class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 29.75pt; padding-right: 5.4pt; padding-top: 0cm; border: windowtext 1pt solid;" valign="top" width="40">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><strong>Part<o:p></o:p></strong></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="213">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><strong>Title<o:p></o:p></strong></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 333.15pt; padding-right: 5.4pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="444">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><strong>Contents<o:p></o:p></strong></span></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 1;">
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 29.75pt; padding-right: 5.4pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="40">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">1<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="213">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><a href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%201%20(PDF).zip">Fundamentals<o:p></o:p></a></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 333.15pt; padding-right: 5.4pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="444">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">Each Office file contains many other segments (&ldquo;Parts&rdquo;). These contain things like the text of a document; the picture on your presentation and the PivotTable on your spreadsheet. This section of the standard describes each of these at a high level, and what they may contain. The way in which they get into the file in the first place is covered in Part 2.<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 2;">
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 29.75pt; padding-right: 5.4pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="40">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">2<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="213">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><a href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(PDF).zip">Open Packaging Conventions<o:p></o:p></a></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 333.15pt; padding-right: 5.4pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="444">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">How Office files are composed &ndash; how to break a file into its constituent parts, and how those parts can relate to one another.<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 3;">
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 29.75pt; padding-right: 5.4pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="40">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">3<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="213">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><a href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%203%20(PDF).zip">Primer<o:p></o:p></a></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 333.15pt; padding-right: 5.4pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="444">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">A plain-English summary (or, erm, &ldquo;primer&rdquo;) on how the various pieces fit together. My advice is to read this first &ndash; it has some great worked examples of what files contain and how to understand them and is easier bedtime reading than the reference-style material in the other parts.<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 4;">
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 29.75pt; padding-right: 5.4pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="40">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">4<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="213">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><a href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%204%20(PDF).zip">Markup Language Reference<o:p></o:p></a></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 333.15pt; padding-right: 5.4pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="444">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">The nitty-gritty on how everything works at a low level. This is by far the largest part of the standard, and will tell you exactly what types of data can go in a spreadsheet cell; what data constitutes an embedded font; what order your styles have to go in; et cetera. If this was a programming language, think of Part 4 as the function reference.<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 5; mso-yfti-lastrow: yes;">
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 29.75pt; padding-right: 5.4pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="40">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">5<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 159.6pt; padding-right: 5.4pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="213">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><a href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%205%20(PDF).zip">Markup Compatibility and Extensibility<o:p></o:p></a></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 333.15pt; padding-right: 5.4pt; border-top: #f0f0f0; border-right: windowtext 1pt solid; padding-top: 0cm;" valign="top" width="444">
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">ECMA-376 contains an inbuilt mechanism for adding arbitrary extensions to files. Office 2007 doesn&rsquo;t use this mechanism, so you should only read this part if you&rsquo;re wanting to read Office 2010 files, create your own arbitrary extensions or read someone else&rsquo;s extensions. More about this in the next post.<o:p></o:p></span></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">The standard contains the documentation for all three spreadsheet, wordprocessing and presentation formats. In reality they are very similar &ndash; the packaging and extension mechanisms are almost identical, and so it makes sense to have them in the one standard. Once you get into the details in Part 4, they&rsquo;re broken up into separate sections.</span></span></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><br /></span></span></p>
<p class="MsoNormal"><o:p><span style="font-family: Calibri; font-size: small;"></span></o:p></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">If you&rsquo;re starting with nothing, you might have to read all of the separate parts of the standard. You can implement code to read and write files from scratch, of course, but as always&nbsp;I&rsquo;d encourage you to build on the shoulders of giants and use some of the existing tools to read and write files. <a href="http://blogs.msdn.com/b/ericwhite/">Eric White</a> has done a number of blog posts about&nbsp;such tools,&nbsp;so that's a good place to start. If you do build upon stuff created by others, the chances are Parts 3 and 4 will be where you spend the most time as someone else will have done the grunt work on the rest of it.</span></span></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><br /></span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><strong>Implementer Notes</strong></span></span></p>
<p><span style="font-family: Calibri; font-size: small;">With our other file formats (XLS, DOC et cetera), there&rsquo;s just one document to read. This is because Microsoft is the keeper of both the product and the documentation &ndash; if we find a discrepancy, we&rsquo;ll change the documentation to fix the error or add a footnote pointing out the product behaviour. Because ECMA-376 is an international standard, we aren&rsquo;t able to simply edit it, and so we maintain a second document explaining where Microsoft&rsquo;s implementation differs from that standard. These are our &ldquo;implementer notes&rdquo;, and they&rsquo;re freely available <a href="http://msdn.microsoft.com/en-us/library/ee908654(v=office.12).aspx">here</a>. Developing these types of notes is a common courtesy for implementers of standards - for an example in a completely different world, <a href="http://www.sinet.bt.com/386v3p0.pdf">here</a> are British Telecom's "Supplier Information Notes" about aspects of their xDSL implementation.</span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">If you&rsquo;re generating ECMA-376 documents for consumption by others, we&rsquo;d encourage you to create some similar notes for your implementation, so that your customers can interoperate with you easily too.</span></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><br /></span></span></p>
<p class="MsoNormal"><o:p><span style="font-family: Calibri; font-size: small;"></span></o:p></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">ECMA-376 fairly closely represents what Office 2007 writes, and I have to admit that it&rsquo;s been quite a while since I ever had to look up an implementer note when delving into files created by Office 2007. However, if interoperating with MS Office is your top priority, you should take a look at the implementer notes before relying heavily on a feature. One example that I&rsquo;ve mentioned in the past is grouping and outlining on spreadsheets.</span></span></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><br /></span></span></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"></span></span></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><img border="0" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/35/74/7737.Untitled.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-35-74/7737.Untitled.png" /></span></span></p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">ECMA-376 allows up to&nbsp;256 levels of these, while Office 2007 will only use seven or fewer. This behaviour is documented&nbsp;on page 276 of the implementer notes:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><span style="font-size: xx-small;"><span style="font-size: xx-small;">
</span></span></span></span></p>
<p><span style="font-size: xx-small;">
</span></p>
<p style="padding-left: 30px;"><span style="font-size: small;"><i><span style="font-size: small;">The standard defines the outlineLevel attribute without specifying its maximum value.&nbsp;<br /></span></i></span><span style="font-size: small;">Office specifies the outlineLevel attributes maximum value is 7.</span></p>
<p><span style="font-family: Calibri; font-size: small;">If interoperability with Office 2007 is a priority for you, it would be wise to read the implementers&rsquo; notes for each ECMA-376 element you&rsquo;re thinking of using before doing a lot of development work.</span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">The standard, ECMA-376 1st Edition, is now frozen in time and will not change. If Microsoft find any other ways that our implementation differs from that standard, we&rsquo;ll publish new implementer notes, but we can never change the version of the standard that we targeted to be compliant with. In some ways this is great news for you as it means you&rsquo;ll never have to update your implementation in order to remain conformant to the standard. However, to interoperate with Office, you&rsquo;ll need to keep an eye on the implementer notes in case there are any changes. In reality we think we&rsquo;ve found most of the notes we&rsquo;ll need for Office 2007, but every so often we do find a bug that needs a new one.</span></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;"><br /></span></span></p>
<p class="MsoNormal"><o:p><span style="font-family: Calibri; font-size: small;"></span></o:p></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">But what if you want to interoperate with Office 2010 features? Well, you&rsquo;ll have to wait for the next post. How am I doing with this cliff-hanger thing?<o:p></o:p></span></span></p>]]></content:encoded>
    </item>
    <item>
      <title>Trip report: WG4 Tokyo</title>
      <link>https://docs.microsoft.com/archive/blogs/chrisrae/trip-report-wg4-tokyo</link>
      <pubDate>Thu, 16 Sep 2010 11:54:00 GMT</pubDate>
      <dc:creator><![CDATA[Chris Rae]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/chrisrae/2010/09/16/trip-report-wg4-tokyo/</guid>
      <description><![CDATA[WG4 met last week in a rather humid Tokyo &ndash;
I&rsquo;m just back now after some travel...]]></description>
      <content:encoded><![CDATA[<p>WG4 met last week in a rather humid Tokyo &ndash;
I&rsquo;m just back now after some travel headaches and I wanted to share a few
thoughts.</p>
<p class="MsoNormal"><strong>"Most Productive Meeting Ever"</strong></p>
<p class="MsoNormal"><strong><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/35/74/8244.DSC_0006.JPG" original-url="http://blogs.msdn.com/resized-image.ashx/__size/250x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-35-74/8244.DSC_5F00_0006.JPG" border="0" /><br /></strong></p>
<p class="MsoNormal">Well, perhaps not the world record holder, but t<o:p>he convener </o:p><o:p><a href="https://twitter.com/al3xbrown/status/23880094764">remarked</a></o:p><o:p> on the final day that this had been WG4's most productive meeting ever. I've only been to four of them, but I'd certainly agree that it's the busiest one I've been to. Towards the end of the third day we were rushing to try and get through the agenda items, and we only covered around half of the defect reports (DRs) that I'd hoped to discuss. Looks like we'll be heading for a few of WG4's most productive conference calls in the coming weeks.</o:p></p>
<p class="MsoNormal"><strong>Meeting Content</strong></p>
<p class="MsoNormal">I was very interested to see Murata-san's presentation on the issues with internationalisation and Part 2 (OPC). I felt like it framed the conversation well for me - there was some work done at the BRM to internationalise Part 2, and it looks like there's still polishing to be done in that area. I was also very pleased indeed that Suzuki-san, a Japanese font expert, was there to talk through several font DRs that we have. Suzuki-san is a well-known contributor to a bunch of print-related open source projects (with <a href="http://pages.cs.wisc.edu/~ghost/">GhostScript</a> probably being the most famous one) and is also an expert explainer, so with his help we managed to resolve a bundle of these DRs.</p>
<p class="MsoNormal">We spent a lot of time working through the open defect reports at this meeting. I'd been working for the last few weeks on writing up the required changes for many of them, and I pledged at this meeting that, at each WG4 face-to-face meeting, I'd try and be current with the un-written-up defect reports which were opened before the previous meeting. When we meet in China in December, I'll have written up the changes for any we had open in Tokyo that were waiting for Microsoft input, and I'll keep this rolling forward. Obviously I'll also try to keep on top of any that appeared in the interim period, but I'll at least set this baseline so we can get through a few of the oldest DRs.</p>
<p class="MsoNormal"><strong>Amendment 2: Improvements to ISO 8601 Support</strong></p>
<p class="MsoNormal">At the Plenary, a few changes were approved to Amendment 2, the Amendment which will improve ISO 8601 date support in IS 29500. While working on this, <a href="https://twitter.com/aristippus303">Gareth Horton</a> and I have broadened the scope slightly to cover a new change to Part 4 (that being the removal of ISO 8601 dates) and a few other alterations in Part 1 (most notably the removal of the leap year bug, which was not covered in the original Amendment). We knew we were going to take this scope change to the plenary and we already have draft text for the newly-approved Amendment. We've had an enormous amount of help from WG4 in writing and reviewing this Amendment -&nbsp;<a href="http://idippedut.dk/">Jesper Lund Stocholm</a>,
<a href="http://www.oreillynet.com/pub/au/1712">Rick Jelliffe</a>, <a href="http://en.wikipedia.org/wiki/Makoto_Murata">Makoto Murata</a>, <a href="http://adaptux.com/standards/">Norbert Bollow</a>&nbsp;and&nbsp;<a href="http://www.kosek.cz/index-en.html">Jirka Kosek</a> have been a great help during our review period with WG4, and most recently I've got some great feedback from <a href="http://kohei.us/">Kohei Yoshida</a>, a key spreadsheet developer on <a href="http://www.novell.com/products/desktop/features/ooo.html">Novell Open Office</a>. Gareth and I have committed to circulate a final draft around WG4 before November 1st. Feels good to be near the end of the tunnel, and on a personal level it'll be great to be a project editor of a finished SC34 project.</p>
<p><span lang="EN-GB"><strong>Creating More Defect Reports</strong></span></p>
<p><span lang="EN-GB">As we all know, IS 29500 is a lengthy standard. There are indubitably defects in it that nobody's found yet, and we brainstormed for a while at the WG4 meeting about how we could go about finding some more. We talked about comparing the normative XSD schema with the informative RNG one; looking for long recurring strings in the text and reviewing those areas; generating a </span><span lang="EN-GB"><a href="http://en.wikipedia.org/wiki/Concordance">concordance</a></span><span lang="EN-GB"> and looking for rarely-occuring words which might be signs of trouble. I think we had a really interesting discussion about the topic, and I'm going to spend some time looking into actually getting started on some of those "bug-fixing" missions.</span></p>
<p><strong>Study Groups Abound</strong></p>
<p>Two of the hottest topics in SC34 at the moment are <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Epub">EPUB</a> (the current de-facto standard for electronic book publishing) and ZIP (the file compression format). For both of those, SC34 has decided to do some more thought - for EPUB this comes in the form of an ad-hoc study group, and for ZIP it comes in the form of a study period during which some experts will work out how best to proceed. WG4 has also agreed&nbsp;to embark upon the early stages of a revision to Part 3 (MCE, the part which specifies how implementers can add their own custom features to the format). We agreed that we wouldn't break any existing implementations in taking on the revision, and a study group are off working on a scope description which will be circulated around WG4 soon.</p>
<div></div>
<p><strong>Office "15" Strict IS 29500 Support</strong></p>
<p>As you probably know, we announced some time ago that we would support saving the Strict variant of IS 29500 for Office "15", the version&nbsp;after Office 2010, which will appear some time in the next few years. We're right at the beginning stages of development of that product, so I took the opportunity to talk with WG4 about how they'd expect our strict support to behave. For me, the most interesting part was how we resolve a dichotomy we have: We want to be as pure as we can be in the data we put in strict files (so not too much MCE), but we also don't want to discard anything when a user saves as the default file format. We had some interesting talks around this in WG4 and I may do a future post outlining some of our more detailed thoughts.</p>
<p><strong>Mount Fuji</strong></p>
<p><strong><a href="http://www.flickr.com/photos/22959236@N00/4991999502/"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/35/74/7268.DSC_0206_DxO.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/250x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-35-74/7268.DSC_5F00_0206_5F00_DxO.jpg" border="0" /></a><br /></strong></p>
<p style="text-align: left;">After the UOML BRM meeting on Saturday, Jirka and I left town to head for Mount Fuji. How nice to get into the peaceful wilderness of the mountains after a hectic week in the centre of the metropolis!</p>
<p style="text-align: left;"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/35/74/7356.DSC_0054_DxO.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/250x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-35-74/7356.DSC_5F00_0054_5F00_DxO.jpg" border="0" /></p>
<p style="text-align: left;">How great indeed. They say that Mount Fuji is the world's most climbed mountain, and now I can see why. There are probably twenty rudimentary mini-hotels on the way up, and a quite astounding amount of building work going on in avalanche protection and such. If you ever find a spot on Mount Fuji where you can't hear a diesel engine, the chances are you can instead smell a chemical toilet.</p>
<p>We had a good time - it was an interesting climb, but not quite what we had in mind. It made us wonder whether it would be fun to try and reach the highest point in each country hosting SC34 meetings, until we realised what our <a href="http://en.wikipedia.org/wiki/Mount_Everest">next target would be</a>.</p>]]></content:encoded>
    </item>
  </channel>
</rss>