BookmarkSubscribeRSS Feed
jardenne
Calcite | Level 5

I want to be able to adjust the underlines for spanning headers in an Excel report using the ExcelXP tagset.  In the document below, there is a description of how to do exactly what I would like to do, but with the RTF tagset:

http://support.sas.com/resources/papers/proceedings11/246-2011.pdf

(see Figure 10, code at bottom of page 😎

When I run this code using the ExcelXP tagset, the inline style statements in the column line have no effect.  The underlines of the spanning headers span the entire table, rather than just the columns spanned by the headers.

Is there ANY way to reproduce this output with the ExcelXP tagset?  I have spent hours searching for a solution (or even a straight answer) and have not found it.

Thanks in advance,

Jon

1 REPLY 1
Cynthia_sas
SAS Super FREQ

Hi,

  RTF files are meant to be opened and rendered by a Word processor. TAGSETS.EXCELXP files are meant to be opened and rendered by Microsoft Excel. The RTF spec was written a LONG time ago (1987) by Microsoft as a way to exchange files; the XML spec for Spreadsheet Markup Language XML was written/released with Office 2002/2003. So, yes, there are some fundamental, underlying differences between RTF and XML; just as there are some fundamental underlying differences between Word and Excel. For example, I -could- write my next user-group paper in Excel instead of Word, but that would a pain to do because papers are huge paragraphs of text. Or, I could keep my gift list in Word instead of Excel, but I like to add a new column every year, so I can keep track of what I've given family so I don't duplicate a present I've already given.

  It doesn't  surprise me that code that works in Word, when it opens an RTF file doesn't work the same way when you switch destinations. The place that I find Excel being "icky" about formatting is with lines, borders, cell heights and cell widths (and general cell formatting). Excel treats cells in its own way, and frequently the same syntax in another destination looks exactly as I want, but in Excel, no dice. I know this is small comfort to you.

  However, using TEXTDECORATION=UNDERLINE, I don't have quite as many issues as you were observing. If you notice in the screenshot, I put 2 reports in 1 sheet for comparison purposes. TAGSETS.EXCELXP will use TEXTDECORATION=UNDERLINE in some places. Notice how it is not used in example #1, but is used in Example #2. -- But Excel has a mind of its own as far as it "auto-adjusted" the cellheights for #2 and I'm not sure why. There is a suboption that I can fiddle with to try to adjust it, but I just wanted to really show that the underline only goes under the text. That is the difference between trying to underline with borders and using the style attribute for underlining. Borders span whole cells from edge to edge (usually) and underlines underline text. If you have SAS 9.2 or higher, then TEXTDECORATION might be a better approach for you.

cynthia

title; footnote;

ods escapechar='^';

ods tagsets.excelxp file='c:\temp\underspan.xls' style=sasweb

    options(sheet_interval='none' doc='Help');

proc report nowd data=sashelp.class

     style(report)=[rules=none frame=void cellspacing=0]

     style(header)=[background=white foreground=black];

where age = 13;

column (name

             ('^S={textdecoration=underline}1) this is spanned'

              age sex height weight));

define name / order style(column)={textdecoration=underline just=c

                                   cellwidth=1.5in};

compute after _page_ / style={just=c};

   line '^S={textdecoration=underline}1) Short Text Underlined';

endcomp;

run;

     

proc report nowd data=sashelp.class

     style(report)=[rules=none frame=void cellspacing=0]

     style(header)=[background=white foreground=black];

where age = 13;

column (name dispname

             ('^S={textdecoration=underline}2) this is spanned'

              age sex height weight));

define name / order noprint;

define dispname / computed 'Name'

       style(column)={just=c cellwidth=1.5in};

compute after _page_ / style={just=c};

   line '^S={textdecoration=underline}2) Short Text Underlined';

endcomp;

compute dispname / character length=40;

   dispname = '^S={textdecoration=underline}'||trim(name);

endcomp;

run;

ods _all_ close;


underline_in_spanning.png

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 1 reply
  • 1634 views
  • 3 likes
  • 2 in conversation