{"id":111,"date":"2009-02-07T17:34:00","date_gmt":"2009-02-07T17:34:00","guid":{"rendered":"\/lisa\/post\/2009\/02\/07\/YAPS-Random-acts-of-kindness-regarding-Reports-Excel-XSLT-and-you.aspx"},"modified":"2009-02-07T17:34:00","modified_gmt":"2009-02-07T17:34:00","slug":"yaps-random-acts-of-kindness-regarding-reports-excel-xslt-and-you","status":"publish","type":"post","link":"https:\/\/spacefold.com\/lisa\/2009\/02\/07\/yaps-random-acts-of-kindness-regarding-reports-excel-xslt-and-you\/","title":{"rendered":"YAPS: Random acts of kindness regarding Reports, Excel, XSLT, and you"},"content":{"rendered":"<p align=\"left\">\nYou&#39;ve provided some gratifying responses to my <a href=\"\/lisa\/2008\/04\/18\/YAPS-(Yet-another-postscript)-on-Custom-Excel-for-RS\/\" title=\"Decent Excel from SSRS\">unintended continuing series<\/a> on using custom XSLT to derive better Excel&nbsp; <a href=\"\/lisa\/2008\/08\/30\/A-bug-IMHO-and-a-workaround-for-conditional-column-export-scenarios\/\" title=\"Getting better CSV in SSRS\">or other formats<\/a> for your reports than the standard stuff &nbsp;you get from SS Reporting Services&#39; Excel renderer.&nbsp; With the gratifying responses come lots of questions about details and areas that I haven&#39;t covered.&nbsp; So here&#39;s a round up of some of those points.\n<\/p>\n<p class=\"NB\">\nI&#39;m going to thank <a href=\"mailto:beth.misc@verizon.ent\">Beth<\/a>&nbsp;for most of the items in this catch-all list, but I&#39;d also like to issue a blanket &quot;thank-you&quot; to the astounding number of readers who continue to be interested in this topic.&nbsp;&nbsp;\n<\/p>\n<h4>\nWhat do you use to&nbsp;test the XSLT (Part 1)?<\/h4>\n<p>\nA number of people have asked about my toolset; I&#39;ve talked about the commercial XML editors that I use, and recommended some others.&nbsp; Most XML editors give you an opportunity to generate output by apply an XSLT transformation to an XML document, although each is different.&nbsp;\n<\/p>\n<p>\nFor those of you who are working in Visual Studio or the BIDS version of Visual Studio that ships with SQL Server as a development tool, you have a very simple choice in your current environment without adding on any tools.&nbsp;\n<\/p>\n<p>\nI didn&#39;t realize this was a problem for you, until Beth wrote about it.&nbsp; As she worked on her custom XSLT for a report, she was deploying the XSLT to her report server to check it out &#8212; or possibly exporting XML from within the Report Preview in Visual Studio;&nbsp; I&#39;m not really sure.&nbsp;\n<\/p>\n<p>\nThe point is,&nbsp;running your report to check your transformation&nbsp;is the long way around, especially if your report runs lots of complex queries.&nbsp;\n<\/p>\n<p>\nLet&#39;s leave the&nbsp;RDL alone, and stop poking it, shall we?&nbsp; You&#39;re finished developing the thing, you&#39;re just supplying an alternative format now.\n<\/p>\n<p>\nHere&#39;s what I suggest you do:\n<\/p>\n<ol style=\"list-style: decimal none inside\">\n<li style=\"list-style: decimal none inside\">Export the XML&nbsp;from your report <em>without <\/em>&nbsp;adding a custom XSLT, so you have your raw source file.&nbsp; You needed this anyway, to figure out how the file was constructed, right? \n\t<\/li>\n<li style=\"list-style: decimal none inside\">Open the exported XML as an XML file in Visual Studio. \n\t<\/li>\n<li style=\"list-style: decimal none inside\">Open the Properties Window for this XML Document; you&#39;ll see something like this (in VS 2005; slightly better in VS 2008 in every way):\n<div align=\"center\">\n\t<img loading=\"lazy\" decoding=\"async\" style=\"width: 536px; height: 230px\" src=\"\/lisa\/wp-non\/migrated\/2009\/2\/RandomRSXSLT1.png\" alt=\"Editing an XML Document in VS 2005\" title=\"Editing an XML Document in VS 2005\" width=\"536\" height=\"230\" \/> &nbsp;<\/p><\/div>\n<\/li>\n<li style=\"list-style: decimal none inside\">You see, in the Properties window, where there&#39;s a place for a Stylesheet name?&nbsp; Go ahead and navigate to the one you&#39;ve been working on; there&#39;s a little ellipsis for a file-picker dialog to the right, on that line, not showing in the screen shot here.&nbsp; While you&#39;re at it, put an &quot;output&quot; filename in the appropriate row, although this is not required.&nbsp;\n<\/li>\n<li style=\"list-style: decimal none inside\">After visiting the Properties window, click back into the XML Document editor, on the left side, and wait for your change-of-focus to register.&nbsp; You should see an XML context menu pad.&nbsp; Open it.&nbsp; Guess what happens when you use the &quot;Show XSLT Output&quot; item on this menu popup?\n<p><\/p>\n<div style=\"text-align: center\">\n\t<img loading=\"lazy\" decoding=\"async\" src=\"\/lisa\/wp-non\/migrated\/2009\/2\/RandomRSXSLT2.png\" alt=\"No prizes for guessing...\" title=\"No prizes for guessing...\" width=\"491\" height=\"167\" \/>\n\t<\/div>\n<\/li>\n<li style=\"list-style: decimal none inside\">If you&#39;re a VS person anyway the above procedure is really all you need.&nbsp; While VS isn&#39;t a great XSLT editor, it&#39;s fine for occasional use, and you can do all your work within your accustomed IDE without strain.\n\t<\/li>\n<\/ol>\n<h4>\nWhat do you use to&nbsp;test the XSLT (Part Deux)?<\/h4>\n<p>\nWhat if you&#39;re not a VS person?&nbsp; Well, frankly, if I just want to apply an XSLT to an XML,&nbsp;I usually go with the command-line approach, using <strong>MSXSL.EXE.&nbsp; <\/strong>This tiny EXE (it&#39;s under 30K) has decent error reporting, allows you to specify XSLT parameters (although you won&#39;t be doing that in an RS context), etc.&nbsp; It&#39;s freely&nbsp;&nbsp; available from Microsoft from the <a href=\"http:\/\/msdn.microsoft.com\/en-us\/xml\/default\/\" target=\"_blank\" title=\"XML on MSDN\" rel=\"noopener\">XML developer section of MSDN<\/a>. You&#39;ll find it easily if you search for &quot;command line transformation utility&quot; or &quot;msxsl.exe&quot; in the downloads section.\n<\/p>\n<p>\nMSXSL is, of course, just a quick wrapper around the MSXML core libraries, so you can also write yourself a little VBS script that does the same thing.&nbsp;&nbsp; I&#39;ve already <a href=\"\/lisa\/2007\/10\/28\/After-you-learn-to-walk-you-can-run-a-postscript-to-the-QnD-XSLT-walkthrough\/\" title=\"blog post showing XSLT explicitly applied in script\">posted an example of how<\/a> to do this, and the example script referred to in that post, <strong>transformRDL.vbs<\/strong>, is part of <a href=\"\/downloads.aspx#DOTNET_Tools\" title=\"RDL Documenter source download\">the samples that&nbsp;accompany RDL Documenter<\/a>.\n<\/p>\n<p align=\"center\">\n<img loading=\"lazy\" decoding=\"async\" src=\"\/lisa\/wp-non\/migrated\/2009\/2\/RandomRSXSLT3.png\" alt=\"MSXSL.EXE command line options\" title=\"MSXSL.EXE command line options\" width=\"511\" height=\"260\" \/>\n<\/p>\n<p>\nPut some PowerShell to work on top of this, if you want to!\n<\/p>\n<h4>\nThe raw xml is the page content data, not the page header and footer data<\/h4>\n<p>\nMost&nbsp;banded report writers have to make a distinction between what I call the &quot;formatting bands&quot; and the &quot;content bands&quot;.&nbsp; &quot;Formatting bands&quot; are full of information that requires pagination to be applied, and therefore will be different from renderer to renderer, and different rendering instance even when done by the same renderer, because of different output page sizes.&nbsp; In the case of the SQL Server Reporting Services engine&#39;s XML renderer, there is no concept of pagination, so the XML renderer only gives you the contents of the page body.&nbsp;\n<\/p>\n<p>\nBeth wanted to include some information from the page header in her report (possibly in the sheet tab name, or the print setup information we&#39;ve just discussed).&nbsp; Since the XML renderer doesn&#39;t give you that information, the usual way to handle this is to include everything you want in the page body instead.&nbsp; You can make it white-on-white, so it doesn&#39;t appear in other renditions, or play other tricks to hide it.&nbsp;\n<\/p>\n<p>\nFor what it&#39;s worth, I sometimes find myself putting the whole &quot;Page header&quot; into the body of the report for other reasons, and telling it to repeat on page.\n<\/p>\n<p align=\"center\">\n<img loading=\"lazy\" decoding=\"async\" style=\"width: 527px; height: 307px\" src=\"\/lisa\/wp-non\/migrated\/2009\/2\/RandomRSXSLT6.PNG\" alt=\"Ersatz Page Header information in Report Body, using repeat on page\" title=\"Ersatz Page Header information in Report Body, using repeat on page\" width=\"527\" height=\"307\" \/>\n<\/p>\n<p>\nIf you have an issue with&nbsp;getting something like this to work, give me a specific case, and I&#39;ll explain in more detail.\n<\/p>\n<h4>\nWhat can SSML (Excel 2003 XML Dialect) do?&nbsp; <br \/>\nWhat can&#39;t it do?&nbsp; <br \/>\n<em>And how do you know?<\/em><\/h4>\n<p>\nJust BTW, and as a caveat, I didn&#39;t set out to become an expert in SSML, but it&#39;s a neglected art, and people keep coming to me for help in it.\n<\/p>\n<p>\nIt&#39;s no wonder SSML is neglected.&nbsp; If you look up that acronym in&nbsp;Standards Land, it&#39;s already been re-used for another purpose (Speech Synthesis Markup Language).&nbsp; In Microsoft Land, it&#39;s been superseded by Excel 2007&#39;s&nbsp;XML format, which is a bit harder to use and create, although quite a bit more capable.&nbsp;\n<\/p>\n<p>\nYou certainly can&#39;t use XSLT with RS to get Excel 2007 as easily as you can create SSML; you&#39;ll need some more manual work than just attaching an XSLT to an RDL definition on the server.&nbsp; So, perfect it isn&#39;t, but I still like Excel 2003 XML.\n<\/p>\n<p>\nAs a general rule, SSML can do &#8230; most things that Excel can do, except for serving as a host to &quot;foreign objects&quot;, such as MS Chart and images.&nbsp; If you want to know exactly what is included in &quot;most things&quot;, start with the documentation.\n<\/p>\n<p>\nWhere in the docs do you find good information about this?&nbsp; The answer will probably surprise you: try doing a Save As XML Spreadsheet 2003 in Excel 2007.&nbsp; Even if you&#39;re saving a blank workbook, you&#39;ll get a warning about features that won&#39;t be included in this format.\n<\/p>\n<p align=\"center\">\n<img loading=\"lazy\" decoding=\"async\" src=\"\/lisa\/wp-non\/migrated\/2009\/2\/RandomRSXSLT4.png\" alt=\"Saving to SSML from Excel 2007\" title=\"Saving to SSML from Excel 2007\" width=\"537\" height=\"302\" \/>\n<\/p>\n<p align=\"left\">\nWhen you press help, here&#39;s what you learn:\n<\/p>\n<blockquote>\n<h4 style=\"color: orange\">&nbsp;&nbsp; <\/p>\n<hr \/>\n<p>\tXML Spreadsheet 2003 <\/p>\n<hr \/>\n<\/h4>\n<p>\n\tThis XML Spreadsheet 2003 file format (.xml) does not retain the following features:\n\t<\/p>\n<ul>\n<li>Auditing tracer arrows <\/li>\n<li>Chart and other graphic objects <\/li>\n<li>Chart sheets, macro sheets, dialog sheets <\/li>\n<li>Custom views <\/li>\n<li>Data consolidation references <\/li>\n<li>Drawing object layers <\/li>\n<li>Outlining and grouping features <\/li>\n<li>Password-protected worksheet data <\/li>\n<li>Scenarios <\/li>\n<li>User-defined function categories <\/li>\n<li>VBA projects<\/li>\n<\/ul>\n<p>\n\tNew Office Excel 2007 features, such as improved conditional formatting, are not supported in this file format. The new row and column limits of Excel 2007, however, are supported.\n\t<\/p>\n<hr \/>\n<\/blockquote>\n<h5>I know you&#39;ll be shocked to hear this&#8230;<\/h5>\n<p>\nThe help file entry you see above is far more complete than the information we had about SSML in Excel 2003 documentation, but it&#39;s not complete-complete.\n<\/p>\n<p>\nSo how do you really know?\n<\/p>\n<p>\nMost people get started writing SSML by Saving Excel As SSML and then looking at what they get.&nbsp; They slavishly follow what they got from the internal &quot;decisions&quot; that Excel makes about how to do this&nbsp;translation.\n<\/p>\n<p>\nThis practice is okay for a while, but it&nbsp; leads to a lot of extremely bad practices.\n<\/p>\n<p class=\"NB\">\nFor example, Excel uses generated style names that are difficult to maintain, and&nbsp;tends&nbsp;to include many more of them than you actually have used in any Excel workbook, just because you&#39;ve changed your mind a couple of times while working on it.&nbsp; For goodness&#39; sakes: figure out which you need, toss the rest out.&nbsp; Then re-name them with sensible names so you know to which types of cells you should apply them when you write your XSLT.&nbsp; I&#39;ve put a small snippet below; you&#39;ll see that I&#39;ve used a reasonable name.\n<\/p>\n<h5>The right place to learn about SSML is from its schema documentation.<\/h5>\n<p>\nSSML is an XML dialect, the schema is published, as it is with most XML dialects, to give you exactly this information. SSML&#39;s XSD is available to tell you exactly what is allowed and what is not allowed, what Excel will recognize and render and what it can&#39;t.&nbsp;&nbsp;&nbsp;Save As gives you the &quot;learn from an example&quot; method, but you can never be sure how much in that example was a quirk and how much was required.&nbsp; The XSD gives you the whole picture and the correct syntax for everything, without ambiguity.\n<\/p>\n<p>\nYou&#39;ll find the full set of <a href=\"http:\/\/www.microsoft.com\/downloads\/details.aspx?familyid=fe118952-3547-420a-a412-00a2662442d9&amp;displaylang=en\" target=\"_blank\" title=\"Office 2003 XML Reference Schemas from Microsoft\" rel=\"noopener\">Office 2003 XML Reference Schemas<\/a> are available on the Microsoft site; if the link I&#39;ve just given you is not correct, just search for that phrase on the MS site and you&#39;ll find it.&nbsp; The organization of the various general and specific schema files, and the contents of the Excel-specific schema, are straightforward and clear, and they&#39;re all heavily annotated.\n<\/p>\n<p align=\"center\">\n<img loading=\"lazy\" decoding=\"async\" src=\"\/lisa\/wp-non\/migrated\/2009\/2\/RandomRSXSLT5.PNG\" alt=\"Office 2003 Reference Schemas\" title=\"Office 2003 Reference Schemas\" width=\"540\" height=\"445\" \/>\n<\/p>\n<div id=\"contentNB2\" class=\"NB\" style=\"list-style-type: square\">\n<p align=\"left\">\n<strong>Extra tip: <\/strong>\n<\/p>\n<p align=\"left\">\nThe editor in the screenshot above is a free editor called <a href=\"http:\/\/www.firstobject.com\/dn_editor.htm\" target=\"_blank\" title=\"FOXE!\" rel=\"noopener\">First Object XML Editor<\/a>.&nbsp; By a wierd coincidence, its short name is FOXE!\n<\/p>\n<p align=\"left\">\nThis app&nbsp;has few frills but some notable benefits:\n<\/p>\n<ul>\n<li style=\"list-style-image: none; list-style-type: square\">It loads very large files extremely fast. <\/li>\n<li style=\"list-style-image: none; list-style-type: square\">It&#39;s a tiny download with no installation routine (it&#39;s a C++ program, I believe). <\/li>\n<li style=\"list-style-image: none; list-style-type: square\">It handles file encodings well (including Chinese characters). <\/li>\n<li style=\"list-style-image: none; list-style-type: square\">It searches and formats\/indents large files like a dream.&nbsp; My team uses it when a file has been created without extra white space.&nbsp;\n<p>\tVisual Studio tends to balk at the load because of &quot;long line lengths&quot;,&nbsp;or crash when you ignore the warnings and try to load the large file anyway.&nbsp;&nbsp; We load it quickly to FOXE, use the Indent feature to break the lines up, save it, and then Visual Studio will load the file. <\/li>\n<\/ul>\n<\/div>\n<h5 align=\"left\">\nBeth&#39;s question: a case-in-point for what&#39;s missing from the help file and what&#39;s hard to find out<\/h5>\n<p align=\"left\">\nIf you look at the screen shot above, you&#39;ll see that I&#39;ve zeroed in on the section describing the &quot;PrintType&quot; complex type, which <em>Contains workbook and worksheet print options<\/em>, according to the schema annotation.&nbsp; Just as with &quot;regular&quot; binary Excel, you can specify the comments layout, whether you want draft quality, scaling, paper sizes and resolutions, etc. You can specify whether gridlines are printed, and whether columns are printed left-right or top-bottom as a large worksheet is broken into printer-page-size chunks.\n<\/p>\n<p align=\"left\">\nBeth wanted to use Excel&#39;s facility to repeat a designated set of rows on every printed page, to use as static column headers.&nbsp; This was something I had never had occasion to do.\n<\/p>\n<p align=\"left\">\nSSML will let you freeze a set of columns or rows in the screen-display of a worksheet, just like binary Excel, and it&#39;s very easy to find the facility in the SSML schema:\n<\/p>\n<p align=\"left\">\n<span class=\"c9Y6TC\"><font color=\"#0000ff\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">xsd:element <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;SplitHorizontal&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> type=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;xsd:int&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> default=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;0&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> minOccurs=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;0&quot;<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">xsd:annotation<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">xsd:documentation<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;<\/font><\/span>Contains the number of points from the top of the window that a worksheet is split horizontally.<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">\/xsd:documentation<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">\/xsd:annotation<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">\/xsd:element<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">xsd:element <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;SplitVertical&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> type=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;xsd:int&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> default=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;0&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> minOccurs=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;0&quot;<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">xsd:annotation<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">xsd:documentation<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;<\/font><\/span>Contains the number of points from the left of the window that a worksheet is split vertically.<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">\/xsd:documentation<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">\/xsd:annotation<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">\/xsd:element<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">xsd:element <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;FreezePanes&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> minOccurs=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;0&quot;<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">xsd:annotation<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">xsd:documentation<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;<\/font><\/span>Specifies whether the panes of a worksheet window are frozen.<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">\/xsd:documentation<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">\/xsd:annotation<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">\/xsd:element<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">xsd:element <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;FrozenNoSplit&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> minOccurs=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;0&quot;<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">xsd:annotation<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">xsd:documentation<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;<\/font><\/span>Specifies whether the frozen panes of a worksheet window are not split.<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">\/xsd:documentation<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">\/xsd:annotation<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c7DQY4\"><font color=\"#ac30bd\">\/xsd:element<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<\/p>\n<p align=\"left\">\n&#8230; and SSML also gives you the opportunity to include custom content in the page header and footer; this is clearly spelled out in the XSD.&nbsp; But I couldn&#39;t find what Beth was asking for, and this really had me scratching my head.&nbsp; The schema contains about a zillion different settings to specify attributes of Pivot Tables. No matter how warped Microsoft priorities are, it seemed inconceivable that they would have left out this basic feature.\n<\/p>\n<p align=\"left\">\nWell, they didn&#39;t leave it out but, it&#39;s not something you&#39;ll really figure out from the schema, either.\n<\/p>\n<p align=\"left\">\nSigh.&nbsp; When in doubt, go back to the &quot;learn from an example&quot; strategy.\n<\/p>\n<p align=\"left\">\nIt turns out that this feature isn&#39;t baked into the Excel XSD because it uses one of Excel&#39;s &quot;magic&quot; named ranges: the one called <strong>Print_Titles<\/strong>.&nbsp; Anything included in a named range with this magic name gets treated in a special way, and this is just as true in SSML as in binary Excel.\n<\/p>\n<p align=\"left\">\nBut the magic range names aren&#39;t called out in the annotations (where else would they be able to put a secret knowledge thing like this, from an XML perspective?!?).\n<\/p>\n<p align=\"left\">\nThe Named Range feature is, of course, thoroughly baked into the XSD.&nbsp; To use it, you define a range with the magic name&nbsp;and tell it what rows to look at&#8230;\n<\/p>\n<p align=\"left\">\n<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Worksheet <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;Sheet1&quot;<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Names<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">NamedRange <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;Print_Titles&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> ss:RefersTo=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;=Sheet1!R1:R3&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Names<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><\/font>&nbsp;\n<\/p>\n<p align=\"left\">\n&#8230; then you use the NamedCell syntax to call out the items that will actually need to be repeated by Excel. (And don&#39;t ask me why it works this way.&nbsp; I don&#39;t know.&nbsp; That is one of the dangers of learning from examples, remember?)\n<\/p>\n<p align=\"left\">\n<span class=\"c9Y6TC\"><font color=\"#0000ff\"><font color=\"#000000\">&nbsp;<\/font><span class=\"c9Y6TC\">&lt;<\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Table<\/font><\/span><span class=\"c9Y6TC\">&gt;<\/span><font color=\"#000000\">&nbsp;<\/font>&nbsp;<br \/>\n<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&nbsp;&nbsp; &lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Row <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:AutoFitHeight=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;0&quot;<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Cell<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Data <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Type=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;String&quot;<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;<\/font><\/span>My major title line<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Data<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">NamedCell<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;Print_Titles&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Cell<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Row<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Row <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:AutoFitHeight=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;0&quot;<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Cell<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Data <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Type=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;String&quot;<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;<\/font><\/span>My minor title line<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Data<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">NamedCell<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;Print_Titles&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Cell<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Row<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Row <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:AutoFitHeight=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;0&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> <\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Cell <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:StyleID=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;sHeaderLeft&quot;<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">NamedCell <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;Print_Titles&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Cell<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Cell <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:StyleID=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;sHeader&quot;<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">NamedCell <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;Print_Titles&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Cell<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Cell <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:StyleID=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;sHeader&quot;<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">NamedCell <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;Print_Titles&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Cell<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Cell <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:StyleID=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;sHeader&quot;<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">NamedCell <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;Print_Titles&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Cell<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Cell <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:StyleID=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;sHeader&quot;<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<span class=\"cLUY2\"><font color=\"#ea8f0f\">Data <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Type=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;String&quot;<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;<\/font><\/span><font color=\"#000000\">Address<\/font><span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Data<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span>&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">NamedCell <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;Print_Titles&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Cell<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Cell <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:StyleID=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;sHeader&quot;<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Data <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Type=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;String&quot;<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;<\/font><\/span>Invoice To<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Data<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">NamedCell<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;Print_Titles&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Cell<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Cell <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:StyleID=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;sHeader&quot;<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Data <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Type=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;String&quot;<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;$<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Data<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">NamedCell<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;Print_Titles&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Cell<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Cell <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:StyleID=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;sHeaderRight&quot;<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">Data <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Type=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;String&quot;<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;<\/font><\/span>Notes<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Data<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">NamedCell<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">ss:Name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;Print_Titles&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Cell<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cLUY2\"><font color=\"#ea8f0f\">\/Row<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><\/font>\n<\/p>\n<h4>One more thing:<\/h4>\n<p>\nWhen&nbsp;you&#39;re trying to find a feature like print setup in the Excel schema, remember to distinguish between an item that is specific to a Worksheet and an item that is global to a Workbook.&nbsp; These items will be in different places in the schema.&nbsp;\n<\/p>\n<p>\n<strong>Print_Titles<\/strong> happens to be a &quot;sheet thing&quot;, as my example above probably shows.&nbsp; However,&nbsp;if I am not mistaken, Excel ranges used for other purposes can be global to the book as well.\n<\/p>\n<h4>What have I forgotten?<\/h4>\n<p>\nThere is no end to the wonder and glory that is Excel.\n<\/p>\n<p>\nHere&#39;s an apology if I have not addressed <em>your<\/em> question in this random list.&nbsp; Nudge me e-mail or something and I&#39;ll top it up.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>You&#39;ve provided some gratifying responses to my unintended continuing series on using custom XSLT to derive better Excel&nbsp; or other formats for your reports than the standard stuff &nbsp;you get from SS Reporting Services&#39; Excel renderer.&nbsp; With the gratifying responses come lots of questions about details and areas that I haven&#39;t covered.&nbsp; So here&#39;s a<a class=\"more-link\" href=\"https:\/\/spacefold.com\/lisa\/2009\/02\/07\/yaps-random-acts-of-kindness-regarding-reports-excel-xslt-and-you\/\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,6,10,12],"tags":[],"class_list":["post-111","post","type-post","status-publish","format-standard","hentry","category-reporting","category-sql-server","category-xml-xslt","category-yaps"],"_links":{"self":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/posts\/111","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/comments?post=111"}],"version-history":[{"count":0,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/posts\/111\/revisions"}],"wp:attachment":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/media?parent=111"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/categories?post=111"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/tags?post=111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}