11 
ENHANCING GENERATED EXCEL OUTPUT 
After you generate a workbook with the ExcelXP tagset or with any of the other ODS destinations, you might find that 
later requirements for the workbook exceed what is possible with the ExcelXP tagset or with any of the ODS 
destinations. For example, after you generate a workbook with the ExcelXP destination, you might be required to 
update the workbook by adding a new worksheet from the previous week’s sales data. Or you might need to add the 
company logo and the accompanying graphics for the report. Or, you might want to add password protection or save 
the file in another format. The requirements mentioned here are not possible with the ExcelXP tagset because the 
XMLSS format does not support the tasks listed above. However, you can use any of the following tools to 
accomplish those and other tasks: DDE, VBScript language, PowerShell scripts, and the TableEditor tagset. You can 
also write your own script to accomplish some of these tasks, or you can use the %EXCEL_ENHANCE macro that is 
used in the sample code that follows. This macro, written by the SAS Technical Support Guy, is available at 
ftp://ftp.sas.com/techsup/download/base/SGF2014_examples.ZIP
Display 13 shows a workbook, with one worksheet, as it appears when it is first generated. This is the worksheet that 
you want to modify. 
Display 13. The Original XML Worksheet 
The following sample code generates three worksheets and two images (a logo and a graph): 
proc sgplot data=sashelp.heart; 
scatter x=diastolic y=systolic; 
run; 
options noxwait noxsync; 
%include "c:\example2.sas"; 
%excel_enhance(open_workbook=c:\temp.xml, 
insert_workbook=c:\example_file.xml, 
insert_sheet=%str(Example_1,Example_2,Example_3), 
insert_image=%str(c:\sas.jpg#Sheet1!A1, c:\sgplot1.jpg#Sheet1!I4), 
create_workbook=c:\Combined_file.xml  
file_format=xlsx 
password=password); 
In this code: 
The SGPLOT procedure generates the graph. 
The OPEN_WORKBOOK= option in the %EXCEL_ENHANCE macro points to the file temp.xml that you 
want to modify.  
The INSERT_WORKBOOK= option points to the file that contains the worksheets that you want to insert. 
(list continued) 
Pdf text select tool - search text inside PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn how to search text in PDF document and obtain text content and location information
pdf editor with search and replace text; find and replace text in pdf
Pdf text select tool - VB.NET PDF Text Search Library: search text inside PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn How to Search Text in PDF Document and Obtain Text Content and Location Information in VB.NET application
converting pdf to searchable text format; how to select text in pdf reader
12 
The INSERT_SHEET= option adds the worksheets into the current worksheet. Notice that the new 
worksheet names are embedded in the %STR macro function, which prevents the SAS macro from treating 
values that are separated by commas as separate parameters when the macro code is compiled and 
executed. 
The INSERT_IMAGE= macro parameter is an efficient way to add either a logo or a graph into the 
worksheet. In this parameter, the image descriptor has three parts: the path to the image, the sheet name to 
which the  image should be written, and the range or location to which the image is written. Each image 
descriptor is separated by commas. Because of the embedded commas, this value is also added within the 
%STR() function. In the sample code, a logo is added to line1 (beginning with cell A1), of an existing 
worksheet and a graph to match the table is added to cell I4. 
Display 14 shows the enhanced workbook that results from the previous code. 
Display 14. Workbook with Three Worksheets, a Graph, and a Logo Added
CUSTOMIZING WORKSHEETS AND EXTENDING THEIR FUNCTIONALITY  
While it is nice to be able to make simple enhancements, your workbooks and worksheets will be much more 
effective when you can fully customize them both stylistically and functionally. The next sections explore how to 
maximize style and functionality by using cascading style sheets (CSS). A CSS permits maximum functionality as far 
as styling you output. 
Topics in this section include the following: 
Modifying styles using a CSS:  This topic delves into the use of CSS to achieve more advanced style 
generation. It also covers how the use of CSS differs  from the use of the SAS TEMPLATE procedure 
Extending worksheet functionality: This topic discusses extending the functionality of worksheets by using 
preselected filters and filters. 
MODIFYING STYLES USING CSS 
The ability to create styles for output using SAS ODS has never been as robust and flexible as it is now. In terms of 
robustness, you can use either PROC TEMPLATE (available since the first release of SAS ODS in SAS
®
7)  or a 
CSS (available since SAS 9.2) to create overall styles for your output. Template styles (PROC TEMPLATE) are 
already well documented in SAS documentation. However, the CSS is a newer method. Therefore, this section 
Inserted Worksheets 
C# HTML5 PDF Viewer SDK to view PDF document online in C#.NET
Tools Tab. Item. Name. Description. 1. Select tool. Select text and image on PDF document. 2. Hand tool. Pan around the document. Go To Tab. Item. Name. Description
pdf find highlighted text; pdf text searchable
VB.NET PDF- View PDF Online with VB.NET HTML5 PDF Viewer
Tools Tab. Item. Name. Description. 1. Select tool. Select text and image on PDF document. 2. Hand tool. Pan around the document. Go To Tab. Item. Name. Description
pdf find text; how to make pdf text searchable
13 
focuses more on the use of a CSS. SAS 9.2 provides the ability to apply CSS formatted destinations such as PDF, 
RTF, and ExcelXP. And the HTML destination has always had the capability to apply CSS formatting by using the 
STYLESHEET= option in the ODS HTML statement. In SAS 9.2 and later, you apply a CSS by using the 
CSSSTYLE= in the ODS TAGSET statement. In terms of flexibility, you can also combine both CSS and template 
styles by using the IMPORT statement in PROC TEMPLATE. This method imports the CSS style. 
There are some major differences between styles that are generated by PROC TEMPLATE and those that are 
generated with CSS. Template styles use a proprietary SAS file that is of member type ITEMSTORE. This file type 
can be used only in SAS, and it is not portable across operating systems. Styles that are generated with a CSS use a 
simple text file, which is portable across operating systems, releases, and applications that accept CSS. 
The CSS style syntax consists of a list of rules. Each rule contains one or more selectors along with a declaration 
block that consists of the style properties and values. 
The selector indicates to which part of the output the style applies. The most basic type of selector is the CSS class 
selector. A CSS class selector is indicated by prefixing the name of the class with a period (for example, 
.rowheader
). 
Beginning with SAS 9.3, many other types of selectors are supported by the CSS style engine, for example, ID, 
combinatory, universal, element-name, attribute, and pseudo-class selectors. The ExcelXP tagset supports only the 
class selectors that are supported by the CSS style engine. However, the new experimental Excel destination 
supports the other forms as well.  
The following code is an example of content that appears in a CSS file. 
.rowheader, .header { 
background-color: #D8CFBC; 
color:red; 
font-family: sans-serif,Arial,Helvetica; 
font-size: 11pt; 
border:1px; 
.data { 
background-color: #F5EFE1; 
color: #000000; 
font-family: sans-serif,Arial,Helvetica; 
font-size: 9pt; 
border:1px; 
}
.systemtitle { 
background-color: #000000; 
color: #FFFFFF; 
font-family: sans-serif,Arial,Helvetica; 
font-size: 11pt; 
border:1px; 
ods tagsets.excelxp file="c:\temp.xml" options(embedded_titles="yes") 
cssstyle="c:\temp.css"; 
(code continued) 
VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.
and use the PDF page(s) extraction tool. As String = Program.RootPath + "\\" 1.pdf" Dim doc As PDFDocument = New PDFDocument(inputFilePath) ' Select pages.
select text pdf file; find text in pdf files
C# WPF PDF Viewer SDK to annotate PDF document in C#.NET
Default create. Click to select drawing annotation with default properties. Other Tab. 17. Text box. Click to add a text box to specific location on PDF page.
how to search pdf files for text; search pdf for text
14 
proc print data=sashelp.class; 
title "Using CSS for styles"; 
run; 
ods tagsets.Excelxp close; 
In this code: 
The .rowhead
er
and 
.header
class selectors are shown together on the same line, but they are 
separated by commas. These selectors are listed this way because they share the same style property. The 
.rowheader
class selector adds style to the row header, and the 
.header
class selector adds style to 
the column header. 
The file also contains the 
.data
and the
.systemtitle
class selectors. The 
.data
class selector adds 
style to the individual cells. The 
.systemtitle
class selector adds style to the title. 
In addition, the CSSSTYLE= option is used in the ODS statement to import and use this CSS file for the 
output. 
Display 15 shows the results of using the CSS styles that are created by the previous sample code. 
Display 15. An Excel Table with CSS Styles Applied 
EXTENDING THE WORKSHEET FUNCTIONALITY
As mentioned in the previous section, you can modify the presentation of worksheets by using PROC TEMPLATE 
and CSS styles. In addition to modifying the appearance of worksheets, youc can also enhance their functionality (for 
example, by  adding filters and preselected filters). Filters enable you to drill down in a worksheet and look at the data 
in separate views. You can easily add filters to the ExcelXP tagset by using the AUTOFILTER= tagset option.  
Often, just using a filter is enough for most people. But, suppose you have a worksheet that contains clinical-trials 
data, and you want to send a user a copy of the worksheet that shows just the males with high-blood pressure.     
And you also want to be able to drill down into that information to see what factors in this group (such as weight     
and smoking) might influence the increase in blood pressure. For this type of task, you need to include preselected 
filters. Preselected filters enable you to limit the selection of data based on filters that you specify in the 
AUTOFILTER_VALUES= option. 
VB.NET PDF - Annotate PDF with WPF PDF Viewer for VB.NET
Default create. Click to select drawing annotation with default properties. Other Tab. 17. Text box. Click to add a text box to specific location on PDF page.
make pdf text searchable; search text in pdf using java
C# HTML5 Viewer: Load, View, Convert, Annotate and Edit OpenOffice
Office PowerPoint (.ppt, .pptx) on webpage, Convert CSV to PDF file online C#.NET RasterEdge HTML5 Viewer particular text tool can select text on all
search pdf for text in multiple files; how to make a pdf document text searchable
15 
Currently, preselected filters are not included in the production version of the ExcelXP tagset. However, they can be 
included by modifying the ExcelXP tagset. That is, by modifying the XML that is generated through the tagset, you 
can specify parameters for a preselected filter (for example, you might want to add a column to a preselected filter). 
To do that, you add two new subelements (
<AutofilterColumn>
with the INDEX= attribute and 
<AutofilterCondition>
) within the 
<Autofilter>
element, which resides in the WRITE_AUTOFILTER 
event of the tagset. The 
<AutofilterCondition>
element adds the condition that will be used for the 
preselected filter. 
Display 16 shows the modified XML that is added to the 
<Autofilter>
element in order to generate the 
preselected filters. 
Display 16.  Modified XML Code for Creating a Preselected Filter 
After you download, modify, and compile the ExcelXP tagset code (available at 
ftp://ftp.sas.com/techsup/download/base/SGF2014_examples.ZIP
), you can use the following 
sample code to populate your filter.  
ods tagsets.Excelxp_Mod file="c:\temp.xml" 
options(autofilter_values="C2|Male,C7|High" 
autofilter="yes") style=htmlblue; 
proc print data=sashelp.heart noobs; 
var Status Sex Height Weight Diastolic Systolic BP_Status Smoking_Status; 
run; 
ods tagsets.ExcelXP_Mod close; 
In this code:  
The AUTOFILTER= option is set to YES. 
The AUTOFILTER_VALUES= attribute specifies both the Excel column number and its related values. The 
column number and value are separated by a vertical bar (|). For example, column 2 (
C2
) is populated with 
the value 
Male
and column 7 (
C7
) is populated with the value 
High
. As you can see in Display 17, the 
worksheet lists 1081 of the total 5209 records. 
Value supplied 
Column to supply the filter 
VB.NET PowerPoint: VB Codes to Create Linear and 2D Barcodes on
then apply PPT slide getting method to select the target PowerPoint PDF 417 barcode library is a mature and offers users the human readable text setting option
select text in pdf; how to select text in pdf
TIFF to PDF Converter | Convert TIFF to PDF, Convert PDF to TIFF
for TIFF-PDF Conversion; Able to preserve text and PDF Open TIFF to PDF Converter first; Load a TIFF Select "Convert to PDF"; Select "Start" to start conversion
pdf find and replace text; how to select all text in pdf file
16 
Display 17 shows the output from the previous code sample. 
Display 17. Excel Worksheet with Filters Applied 
MOVING TO THE EXCEL DESTINATION 
The new Excel destination, which is experimental in SAS 9.4 (TS1M1), generates output in Microsoft Office Open 
XML format. This format is new beginning with Microsoft Office 2007.  Files formatted with the new Excel destination 
store data in a compressed ZIP file that contains various supporting files such as those displayed in Figure 2. The 
Excel destination encompasses the functionality of the MSOffice2K tagset (which is capable of including graphs and 
statistical graphs) along with the functionality of the ExcelXP tagset (which is capable of generating multiple 
worksheets per workbook). The Excel destination also includes the functionality of the CSV destination, which is 
capable of generating small files. However, the Excel destination does not generate files as small a CSV file. 
Figure 1. The Excel Destination Encompasses Features        
from the CSV, ExcelXP, and MSOffice2K Tagsets 
Some of the greatest benefits of the Excel destination are the following: 
Output that is generated with the Excel destination can be up to 75% smaller than that generated with other
tagsets (such as the ExcelXP tagset).
Graphics, as well as tables and text, can be stored in the Office Open XML format.
(list continued) 
Excel
CSV
ExcelXP
MSOffice2K
Pre-selected filter based 
on the Sex column 
header 
Pre-selected filter based 
on the BP_Status column  
header 
1081 records subsetted 
from total of 5209 records 
XDoc.HTML5 Viewer for .NET, All Mature Features Introductions
NET developers to search text-based documents, like PDF, Microsoft Office The well built-in text search tool is compatible with most Text Select, Copy & Paste.
cannot select text in pdf; search pdf files for text
VB.NET PDF - Convert PDF Online with VB.NET HTML5 PDF Viewer
tiff, VB.NET read PDF, VB.NET convert PDF to text, VB.NET Export PDF to Tiff file. Users are allowed to set scaling value and select compress mode: UnCompressed
how to select text in pdf reader; pdf select text
17 
The Excel destination combines the functionality of the previous tagsets that are used to created 
worksheets. 
The Excel destination is more fully integrated into ODS (like all the other ODS destinations) than the 
ExcelXP tagset. The integration is possible because many of the capabilities that required special 
accommodation in ExcelXP are now inherent in the Excel destination. 
Output can be read easily by other software and applications (for example, the IMPORT procedure). 
You can add formulas using  the A1 notation as well as R1C1 notation. 
The next sections explore the Office Open XML file format, the ODS and tagset options, new features and 
functionality, and other information you need in order to migrate to the new Excel destination. You will find the Excel 
destination to be most like the ExcelXP tagset in terms of functionality and options but with some differences that are 
also explored in the next sections. 
UNDERSTANDING THE MICROSOFT OFFICE OPEN XML FORMAT 
Microsoft Office Open XML is an XML-based format for spreadsheets, presentations, charts, and Word documents. 
This format is the default files format for Office applications such as Excel, PowerPoint, and Word. Starting in SAS 
9.4, the ODS PowerPoint destination is the first destination to take advantage of the Open XML format. The Excel 
destination started using the format in the first maintenance release for SAS 9.4 (TS1M1). Although the XMLSS 
format that is generated by the ExcelXP destination is simpler, the Open XML format that is generated by the Excel 
destination is more robust. The Open XML format contains more files as well as more functionality that is needed for 
worksheets. Open XML is also more cost effective in that its compressed files use less bandwidth when you send 
them in e-mail. 
To accommodate the requirements for the Open XML file format, the Excel destination uses the Lua programming 
language rather than the ODS Markup language. Other new destinations in SAS 9.4 (HTML5, EPUB, and PowerPoint 
destinations), also use the LUA language. The change in architecture and programming language means that you 
can no longer modify or view the tagset in the tagset library as you have in previous releases. However, you can still 
modify tagsets (ExcelXP, MSOffice2K, CVS, and so on) that were created using the ODS Markup language. Open 
XML also incorporates better error-handling logic. When problems occur with a file, the format attempts to repair the 
file so that it can be displayed. 
Figure  2. The Structure of a Microsoft Office Open XML Archive ZIP File 
FEATURES OFTHE NEW EXCEL DESTINATION 
The new Excel destination has much of the same functionality as the ExcelXP tagset, and it includes some new 
features as well. Most of the existing options and features in the ExcelXP tagset have been carried forward into the 
Excel destination, and the Excel destination includes some additional enhancements. You will find that the Excel 
destination works more like the other ODS destinations than the ExcelXP destination ever did, because of better 
technology and better ways of handling tasks (for example, the Excel destination measures table cells automatically, 
eliminating the need to adjust the width of the cells manually with tagset options). 
The next sections discuss ODS statement options that not valid in the Excel destination, new and deprecated options 
in the Excel destination, the ability to add graphs and statistical graphs, and automatic cell formatting in the Excel 
destination. 
18 
Table 2. New and Deprecated Options in the Excel Destination
on
ODS Statement Options That Are Not Available in the Excel Destination 
The GPATH=, PATH=, and BASE= options that are available to both the ExcelXP tagset and the MSOffice2K 
destination are not valid for the Excel destination. These ODS statement options are used mainly for web output. 
Because the file that is generated with the Excel destination is a self-contained ZIP archive, the GPATH=, PATH=, 
and BASE= options are no longer necessary. As a result, the options are not included in the Excel destination. Other 
options (for example, the FRAME= and DATA= options) for the ExcelXP tagset are no longer valid as well. A syntax 
error is generated when these options are added to the new Excel destination. So the code in the Excel destination 
should be simply the following: 
ods excel file="temp.xlsx"; 
Deprecated and New Excel Destination Options 
As mentioned previously, most of the ExcelXP tagset options are included in the new Excel destination. However, 
some of the existing options have been deprecated in the Excel destination because it inherently handles many tasks 
that were controlled by options in the ExcelXP tagset. Note: This list currently reflects the options that are deprecated 
or new in the experimental release. This list will change as the Excel destination evolves. 
Table 2 lists the options that are new and deprecated in the Excel destination.  
ExcelXP Tagset Option 
Status in 
Excel 
ABSOLUTE_COLUMN_HEIGHT 
New 
ASCII_DOTS 
Deprecated 
AUTOFIT_HEIGHT 
Deprecated 
AUTO_SUBTOTALS 
Deprecated 
CONFIGURATION_FILE 
Deprecated 
CONFIGURATION_NAME 
Deprecated 
CONTENTS_WORKBOOK 
Deprecated 
CONVERT_PERCENTAGES 
Deprecated 
CURRENCY_SYMBOL  
Deprecated 
DEBUG_LEVEL 
Deprecated 
DECIMAL_SEPARATOR 
Deprecated 
DEFAULT_COLUMN_WIDTH 
Deprecated 
MERGE_TITLE_FOOTNOTES 
Deprecated 
MINIMIZE_STYLE 
Deprecated 
ExcelXP Tagset Option 
Status in 
Excel 
MISSING_ALIGN 
Deprecated 
NUMERIC_TEST_FORMAT 
Deprecated 
PAGE_ORDER_ACROSS 
New 
PAGEBREAKS 
Deprecated 
ROW_HEIGHT_FUDGE 
Deprecated 
ROW_HEIGHTS 
Deprecated 
SKIP_SPACE 
Deprecated 
START_AT 
New 
TAB_COLOR 
New 
THOUSANDS_SEPARATOR 
Deprecated 
TITLE_FOOTNOTE_WIDTH 
Deprecated 
WIDTH_FUDGE 
Deprecated 
WIDTH_POINTS 
Deprecated 
WRAPTEXT 
Deprecated 
Many of the deprecated options (for example CURRENCY_SYMBOL= and DECIMAL_SEPARATOR=) are handled 
by the locale that is set for your SAS software. Other options (for example, WRAPTEXT= and AUTOFIT_HEIGHT=) 
are handled internally, by default, so there is no need to use those options. 
The following example demonstrates the use of some of the new Excel destination options that are not present in the 
ExcelXP tagset. This example also uses the ODS TEXT= option that is valid with the MSOffice2K destination but not 
with the ExcelXP destination. 
ods excel file="c:\temp.xlsx" options(start_at="B5" tab_color="red" 
absolute_row_height="15" 
embedded_titles="yes"); 
ods text="Sales report for company X"; 
proc print data=sashelp.orsales; 
title "Sample title showing new features"; 
run; 
ods excel close
19 
In this code: 
The Excel destination’s START_AT= option positions the worksheet text starting in column B and row 5. 
The TAB_COLOR= option adds a highlight color (red) to the tab. 
The ABSOLUTE_ROW_HEIGHT= option adds a default height for all cells in this example. 
The ODS TEXT= statement adds supplementary text to the worksheet. 
The code sample results in the worksheet shown here in Display 18: 
Display 18. Excel Worksheet That Is Styled by Using Two New Options in the Excel Destination 
Automatic Cell Formatting in the Excel Destination 
There are some common issues related to cell formatting that can occur when output is exported to an Excel 
spreadsheet. Problems can occur when you do not apply an Excel format. By default, Excel uses its General format. 
However, this format can cause display problems in output that is generated by the ExcelXP, MSOffice2K, and CSV 
destinations. For example, output might appear with leading zeros removed, or long values might appear in scientific 
notation. 
The new Excel destination alleviates these problems because it performs an automatic mapping of SAS formats to 
Excel formats. This automatic behavior saves you a lot of time and effort because you do not have to learn the Excel 
custom formatting that is required in order to display the output that you want. 
But what do you do if you want to use a different format outside of automatic mapping? With the Excel destination, 
you can override the default automatic mapping of cell formats by using the TAGATTR= attribute with the FORMAT 
parameter (as you can in the ExcelXP tagset), or you can use the HTMLSTYLE= attribute with the CSS style property 
mso-number-format
The following code uses the Excel destination (which automatically maps from SAS formats to Excel formats) to apply 
formats to all of the numeric variables in the code: 
data one; 
zero=0001; 
dollar_val=123456; 
percent_val=.80; 
comma_val=123456; 
number=12345; 
run; 
ods excel file="c:\temp.xlsx"; 
(code continued) 
20 
proc print data=one; 
var _numeric_ ; 
var number / style(data)={tagattr="format:[red]#,###"}; 
format zero z4. dollar_val dollar6.0 percent_val percent5.2 
comma_val comma. number 4.; 
run; 
ods excel close; 
In this code, the variable NUMBER uses both the automatic mapping as well as a style override that changes 
the color to red and that applies the desired format to the output. 
Display 19 shows output that maintains leading zeros and long values because of the automatic format mapping.
Display 19. Output That Is Generated with the New Excel Destination
ADDING GRAPHS TO WORKSHEETS WITH THE EXCEL DESTINATION 
In addition to providing more efficient data storage and automatic format conversion, the Excel destination also 
enables you to add graphs to a multisheet workbook. The Excel destination is the first true ODS destination that 
allows images and tables to co-exist while it generates multiple worksheets per workbook. This capability is not 
possible with the ExcelXP destination. You can add graphs in the MSOffice2K destination, but you cannot generate 
multiple worksheets per workbook. 
With the Excel destination, you can generate graphs in different ways: 
with one of the SAS/GRAPH
®
procedures (device-based graphics) 
with SAS ODS Graphics (template-based graphics, via the Graph Template Language [GTL]) 
statistical graphics procedures such as the SGPLOT, SGPANEL, and SGSCATTR procedures 
The following example uses the Excel destination along with the REG procedure, which generates output both a table 
and a graph to the worksheet. 
ods select fitplot parameterestimates; 
ods excel file="c:\temp.xlsx" options(sheet_interval="none"); 
proc reg data=sashelp.class; 
model weight=height; 
run; 
quit; 
ods excel clos
e; 
In this code: 
The ODS SELECT statement adds the FITPLOT and PARAMETERESTIMATES objects. 
The SHEET_INTERVAL="NONE" option places both the table and graph on the same worksheet. 
Documents you may be interested
Documents you may be interested