White Paper - SoftArtisans
Transcription
White Paper - SoftArtisans
White Paper ACKNOWLEDGEMENTS SoftArtisans would like to thank Jon Flanders for his original vision and prototype of ExcelWriter. Copyright © 2002 by SoftArtisans Inc. All rights reserved. No part of this paper may be reproduced or transmitted in any form or by any means without the written permission of SoftArtisans Inc. This white paper is a working document and is provided "AS IS," without any warranties. SoftArtisans expressly disclaims any warranties or representations as to accuracy or completeness of the contents and any implied warranties of merchantability or fitness for a particular purpose. The contents are not suitable for use in all situations, and any use by you of the contents is at your own risk; the information in this document may be corrected or updated from time to time. SoftArtisans will not be liable for damages of any kind, including direct, consequential (including loss of profits, business, or data) or special damages, which may arise out of or result from reliance on or use of the information. 1/28/2002 2:39 PM Revision History Date Initials Description 10/07/01 LM VSLive! 11/9/01 LM ExcelWriter V3 Release 12/18/01 LM/RI V3.02 Update 01/14/02 JG/LM/RI Update SoftArtisans 1330 Beacon Street Suite 400 Brookline, MA 02446 Tel: 617-738-0777 / 877-SOFTART Fax: 617-738-6278 i E-mail: info@softartisans.com INTRODUCTION........................................................................ 1 1.1 WHAT IS EXCELWRITER .........................................................................1 1.2 WHAT EXCELWRITER IS NOT...................................................................2 1.3 HOW EXCELWRITER WORKS ...................................................................2 2 GENERAL INFORMATION.................................................. 4 2.1 OPERATION .........................................................................................4 • • • • • 2.1.1 How Does it Work? 4 2.1.2 Server Operation 4 2.1.3 Excel Not Required on Server 2.1.4 ExcelWriter CodeWizard 5 2.1.5 Single Multi-threaded DLL 5 2.2.1 Supported Platforms 5 2.3.1 Automated Installation via MSI 2.3.2 Manual Installation via REGSVR32 6 2.3.3 Documentation and Samples 7 2.3.4 Minimal Installation 7 2.4.1 Server Licenses 7 2.4.2 Developer Licenses 8 2.4.3 ExcelWriter Desktop Licenses 2.4.4 Bundling ExcelWriter in Your Solution – OEM Program 2.5.1 Differences Between the Full and LE Versions 2.5.2 Which Version is Right for You? 2.6.1 Microsoft Excel on Win32 2.6.2 Microsoft Excel on Apple Macintosh 16 5 2.2 DEPLOYMENT .......................................................................................5 • 2.3 INSTALLATION .....................................................................................6 • • • • 6 2.4 LICENSING ..........................................................................................7 • • • • 8 9 2.5 EDITION DIFFERENCES...........................................................................9 • • 11 15 2.6 CLIENT REQUIREMENTS ........................................................................ 16 • • 3 16 EXCEL AS A REPORTING FORMAT................................... 17 3.1 ADVANTAGES ..................................................................................... 17 • • • • 4 3.1.1 Familiarity of Client 17 3.1.2 Richness 3.1.3 Ease of Modification 3.1.4 Upload Back to Server 17 17 17 USAGE SCENARIOS ........................................................ 19 4.1 INTRANET REPORTING .........................................................................19 4.2 B2B COMMERCE .................................................................................20 ii 4.3 STOCK PORTFOLIO ..............................................................................21 4.4 HUMAN RESOURCES.............................................................................21 • 5 4.4.1 Web-based Payroll 21 FEATURES IN DEPTH ...................................................... 22 5.1 5.2 5.3 5.4 • • 5.5 5.6 5.7 5.8 5.9 • • EXCEL VERSION COMPATIBILITY ............................................................22 ADDRESSING CELLS .............................................................................22 SETTING CELL VALUES .........................................................................22 IMPORTING FROM A DATABASE ..............................................................23 5.4.1 ADO 23 5.4.2 ODBC 23 5.9.1 MSXML 5.9.2 Excel XML DOM FORMATTING .....................................................................................23 FORMULAS.........................................................................................24 CHARTING .........................................................................................24 IMAGES ............................................................................................25 XML IMPORT .....................................................................................26 26 27 5.10 SAVING RESULTS ................................................................................29 • • • 5.10.1 To Disk 30 5.10.2 To Memory 30 5.10.3 Streamed to Browser 30 5.11 READ AN EXISTING SPREADSHEET* ........................................................31 • 5.11.1 Importing Formulas • 5.14.1 ExcelApp.Open vs. ExcelTemplate Decision Tree 32 5.12 MODIFYING AN EXISTING SPREADSHEET ..................................................33 5.13 USING TEMPLATE SPREADSHEETS ...........................................................33 5.14 EXCELAPP.OPEN VS. EXCELTEMPLATE .....................................................36 37 5.15 DATA ...............................................................................................38 • • 6 5.15.1 Formulas 38 5.15.2 Macros, Outlines, Pivot Tables and VBA 39 COMPARISON TO MICROSOFT EXCEL ............................. 40 6.1 EXCEL ON THE WEB SERVER ..................................................................40 • • 6.1.1 Licensing 40 6.2 OFFICE WEB COMPONENTS ...................................................................40 7 6.1.2 Performance 40 COMPARISON TO OTHER ALTERNATIVES ....................... 43 7.1 CSV FILES ........................................................................................43 7.2 HTML ..............................................................................................43 7.3 CRYSTAL DECISIONS ...........................................................................43 8 ADMINISTRATION ......................................................... 44 8.1 SECURITY CONSIDERATIONS .................................................................44 8.2 CONFIGURING IIS ..............................................................................45 8.3 INSTALLATION / UNINSTALLATION.........................................................46 iii 9 CASE STUDIES ............................................................... 47 9.1 MANUFACTURING COMPANY ..................................................................47 9.2 B2B E-COMMERCE COMPANY.................................................................50 9.3 DESTINATION HARDWARE SALES AND MANUFACTURING COMPANY ................53 10 PERFORMANCE............................................................... 56 10.1 BENCHMARKS .....................................................................................56 EXCEL RITER BJECT VERSUS XCEL BJECT FFICE W O (V2) E O O 2000.......................56 10.2SCALABILITY .....................................................................................57 10.3PERFORMANCE LIMITATIONS .................................................................57 • • • 10.3.1 ExcelWriter LE 57 10.3.2 ExcelWriter Developer 57 10.4IMPROVING PERFORMANCE ...................................................................58 • • 11 12 10.3.3 ASP Threading 10.4.1 Using Styles 57 58 10.4.2 Use CopyFromRecordSet or GetDataFromRecordset 61 TECHNICAL SUPPORT..................................................... 62 11.1PRE-SALES SUPPORT ...........................................................................62 11.2MAINTENANCE PROGRAM......................................................................63 11.3TWO-HOUR PRIORITY SUPPORT INCIDENT ...............................................63 11.424-HOUR PRIORITY SUPPORT INCIDENT..................................................63 11.5SUPPORT HOURS ................................................................................63 11.6SELF-HELP SUPPORT............................................................................64 11.7PEER-SUPPORTED DISCUSSION LIST .......................................................64 11.8SOFTARTISANS CONSULTING SERVICES ...................................................64 FOR MORE INFORMATION.............................................. 65 12.1SOFTARTISANS WEB SITES ...................................................................65 • • • • • 12.1.1 Main ExcelWriter Page 65 12.1.2 News and Announcements 65 12.1.3 Support Site 65 12.1.4 Demo Site 65 12.2EXCEL ON THE WEB .............................................................................66 • • 12.1.5 Discussion Lists 65 12.2.1 Microsoft Excel Web Site 66 12.3ASP SITES........................................................................................66 13 12.2.2 EXCEL-L Discussion List 66 OTHER PRODUCTS FROM SOFTARTISANS ...................... 67 iv Introduction Online reporting is among the best uses of Web technology and a challenging objective on many Web sites. The most efficient method of delivering timely data to partners, internal employees, and customers is a self-service Web reporting application. Already, many companies business calculate administration ® formatted in Microsoft and over track the sales, Web. evaluate investments, Traditionally, most and automate quantitative data is Excel and the business world is proficient in the software. But most of today’s Web reporting solutions do not produce native Excel—particularly not richly formatted Excel with charts, pivot tables, and VBA. Difficult new software requires training and may limit users’ capacity and interest to manipulate data that they receive over the Web. SoftArtisans provides a powerful spreadsheet engine that generates Excel on the Web. Organizations do not need to stop using Excel because they move processes to the Web. With SoftArtisans ExcelWriter, developers quickly and easily build robust, scalable reporting applications that generate native Excel without installing Excel on the server. A simple yet comprehensive solution, ExcelWriter creates full-function Excel from a database, ADO recordset, or an existing workbook. ExcelWriter enables a wide range of businesses to create high-performance applications while making efficient use of limited systems, development resources, and users’ Excel proficiency. ExcelWriter generates editable Microsoft Excel worksheets and charts in a few easy steps. This powerful product creates native .xls code, which is real, full-function Excel— not Comma Separated Value (CSV) flat files or Excel look-alikes. ExcelWriter populates the spreadsheet from the recordset object, and then adds formatting and formulas to cells—or serves you the can open users a clear, pre-existing workbook professionally or formatted template Excel workbook. spreadsheets ExcelWriter and charts. ExcelWriter is capable of high performance for demanding sites that need to generate thousands of spreadsheets for many concurrent users each day. Users may save fullfunction, formatted accessed spreadsheets Excel spreadsheets generated server for easy access. by to immediately SoftArtisans manipulate ExcelWriter can be data. saved Heavily on the Custom spreadsheets can be streamed directly to the client machine. 1.1 What is ExcelWriter ExcelWriter is a server-side control for developing high-speed Excel Web applications. It consists of a single, multi-threaded dynamic link library (DLL) that accepts data from many sources. The data can be gathered from an ActiveX Data Object (ADO) connection to a database, parsed from an XML document, scripted to gather from a CSV or other flat file, or retrieved from a pre-existing Excel workbook. It generates Excel in the native Microsoft binary format (BIFF8 or BIFF7, depending on the what version of Excel or Excel viewer is installed on the client.). The output can be streamed via the Internet or intranet to a client machine for display in a browser or with Excel. These files can also be saved on the server or the client machine hard disk. ExcelWriter-generated Excel files can contain comprehensive formatting, formulas, custom styles, charting, and images. They can consist of single or multiple worksheets. An Excel file generated by ExcelWriter is virtually identical to having created it directly in Excel. 1 ExcelWriter does not require the Microsoft Excel object on your server. This control has no dependencies on Excel. In fact, it generates Excel format output with benchmarked performance that is at least over 100 times faster than that of the Microsoft Excel object. ExcelWriter can be used from any environment that supports COM, such as Active Server Pages (ASP) or Visual Basic (VB), VB.NET or ASP.NET. 1.2 What ExcelWriter is Not ExcelWriter is not a visual end-user tool like Microsoft Excel. It is not an ActiveX control that exists client side. Rather, it generates native Excel files via server-side scripting that can be read by Microsoft Excel. ExcelWriter does not use XML or HTML to represent the spreadsheet. The resultant spreadsheet is in the native Microsoft binary format. This permits the creation of much richer spreadsheets, including charts and images, and allows for support of many versions of Excel from Excel ’95 through Excel XP. ExcelWriter does not have a calculation engine to perform computation on the cells in the spreadsheet. When formulas are included in a spreadsheet, Excel calculates the values when it loads the spreadsheet. (Please note: since ExcelWriter does not calculate values, evaluation of formulas is not possible during spreadsheet creation). ExcelWriter is not a charting engine. It cannot produce static charts in GIF or JPG/JPEG image format. Rather, it produces fully dynamic 2D or 3D Excel charts capable of referencing data from the same or another worksheet in the workbook. 1.3 How ExcelWriter Works ExcelWriter instructs entirely consists ExcelWriter in memory of a to on series create the of a COM new server. objects. A spreadsheet. Working developer This writes spreadsheet exclusively in a script will memory be that built enhances performance and maximizes security. Here is an example of how a Web developer might use ExcelWriter within an ASP page. In this case, we’ll assume that a client, accessing the application, has just filled out some information on a Web form and pressed the “Submit” button. The ASP forms processing page: • • Validates the user’s input Based on the user’s input, customizes a query and runs it against a data source, to produce a recordset • • • • • • • • Instantiates the ExcelWriter object Creates a blank worksheet(s) Imports the recordset into the spreadsheet where applicable Adds formulas Creates custom styles Applies these styles and other formatting elements to the worksheet(s) Adds charts or inserts images Streams the newly created Excel file to the user’s machine for opening in the browser or with Excel or for saving locally to the client’s hard disk 2 In this example, every user receives a fresh, new unique spreadsheet in response to their input. In addition to streaming the spreadsheet to the user, ExcelWriter could also save the file to the hard disk of the server. Figure 1: ExcelWriter is a server-side component that generates a native Excel workbook on the Web from an existing .xls file, an ASP page, and/or any data source. Simply click a button and display existing data as a Web form. A second click and you get a full- featured Excel spreadsheet. Save it as an Excel file on the server or stream to a client. The document is fully editable and virtually all of the standard formulas are available. It's just that easy! This provides just one possible scenario for usage of ExcelWriter. We will cover others later in this document. 3 2 General Information 2.1 Operation 2.1.1 How Does it Work? ExcelWriter object In order to create an Excel workbook in the native Microsoft binary format (BIFF) with ExcelWriter, you must create an instance of the in a script that is executed server-side. With ASP, this is done as follows: Set xlw = Server.CreateObject("SoftArtisans.ExcelWriter") As with Microsoft Excel, a Worksheet is then created: Set ws = xlw.Worksheets(1) WorkSheets(1) Each spreadsheet contains multiple worksheets. Only one worksheet is needed in this WorkSheets(2) Cells example. The Next, first worksheet is and so on. . The second worksheet would be server or are added to the WorkSheet: ws.Cells("A1").Value = "Name" ws.Cells("B1").Value = "Count" ws.Cells("C1").Value = "Dollar" ws.Cells("A2").Value = "Fred Smith" ws.Cells("B2").Value = 10 ws.Cells("C2").Value = 37.5 This creates the cells on the worksheet and fills in the values. Once the values are filled in, the virtual workbook can be saved to the streamed to a client machine. xlw.Save "first.xls", saOpenInExcel In this case, the spreadsheet is streamed to the client and triggers a “FileDownload” dialog box that will give the client the choice of opening the file with Excel or saving the spreadsheet locally. If it is saved, the default name will be first.xls. 2.1.2 Server Operation The ExcelWriter application object requiring the should ability be installed on to generate Excel a Web server Web reports. that hosts Once the installed, Web the object model’s methods and properties are accessed via an ASP script that runs serverside. A fully formatted, dynamic Excel workbook is created, populated with data from a data source and then formatted in memory on the server. Depending on the “Save” option called, the output can be stored as a file on the server or streamed via the Internet or intranet to a client machine for viewing or saving locally. 4 2.1.3 Excel Not Required on Server ExcelWriter works without dependency on the Microsoft Excel object so the Excel object is not required on the server. This avoids the performance penalties and instability otherwise associated with instantiating multiple copies of the Excel object on a Web server. In addition to performance improvements, ExcelWriter offers greater licensing flexibility and ease of deployment than does Excel. This is ideal for a Web reporting application. There are no per-user or per-seat license costs. 2.1.4 ExcelWriter CodeWizard ExcelWriter Developer editions contain a very useful added component: CodeWizard. This new component has the ability to take an Excel ExcelWriter workbook (or template) as input and to generate an ASP, VB, or ASP.NET file that contains the code necessary to functionality) reproduce using it (with ExcelWriter most, on the if not server. all of Using formatting and ExcelWriter CodeWizard its included can greatly reduce the time and the resources required to script complex Web reports. 2.1.5 Single Multi-threaded DLL ExcelWriter is a high-performance, multi-threaded set of COM objects built for serving thousands of concurrent users on a single server. Unlike the Excel object, separate instances of ExcelWriter can be created safely on the server to handle individual concurrent requests. 2.2 Deployment ExcelWriter is designed for easy deployment on your Web server. It is flexible enough to work with most Windows-based server configurations and security settings. 2.2.1 Supported Platforms ExcelWriter has the following System Requirements: • • • Windows 2000 or Windows NT 4.0 Any environment that supports COM or Automation, including: - Active Server Pages (IIS3 or IIS4) Visual Basic Windows Scripting Host Visual C++ Internet Explorer ASP DLL Version 4.0.622 or later (WinNT Server or Workstation) or ASP DLL Version 5.0 or later (Windows 2000 or Advanced Server) • If you intend to create workbooks from databases, install the latest Microsoft drivers. The driver package is available for free for all versions of IIS at http://www.microsoft.com/data/. Choose to download MDAC 2.0 or later. MDAC includes updates to ADO, OLEDB, and related ODBC drivers 5 2.3 Installation ExcelWriter can be installed in two ways: by running the automated installation that uses the Microsoft Installer (MSI), or by doing a manual installation. The automated installation is easiest to use and deploy. Simply double-click on the “ExcelWriterVxx.exe” and follow the InstallShield Wizard instructions. The manual installation option is available for situations where the use of an auto installer is disallowed or where minimal installation may be desired. 2.3.1 Automated Installation via MSI Running the Auto Installation program will: • Unpack ExcelWriter files to C:\Program Files\SoftArtisans\ExcelWriter (or to an alternative location that you specify during the installation) • • Register the ExcelWriter DLL (saexcel.dll) Create a virtual directory which gives access to the documentation and included samples 2.3.2 Manual Installation via REGSVR32 To manually install ExcelWriter, you must first run the automatic installation (described above) to unpack the files. Once the files are unpacked, if you move ExcelWriter to a new server, you can run either the automatic or manual installation. To register the ExcelWriter component, do the following: • Copy the ExcelWriter DLL (saexcel.dll) to any stable directory on your Web server. For example, to copy the saexcel.dll to c:\winnt\system32\inetsrv, at the command prompt, type, “copy saexcel.dll c:\winnt\system32\inetsrv” • Manually register the saexcel.dll, as follows. - To stop the Web server, open a DOS window, and enter, "net stop iisadmin /y" - To register the saexcel.dll, enter, - To restart the Web server, enter, “regsvr32 path\ saexcel.dll” "net start w3svc" - Optional: If you want to restart FTP and SMTP services, use the following commands: "net start msftpsvc" "net start smtpsvc" 6 2.3.3 Documentation and Samples ExcelWriter documentation is online at http://demo.softartisans.com/Excelwriter/default.asp or can be installed (optional). To install the ExcelWriter documentation and included samples, do the following: • Create a virtual directory called ExcelWriter, and map it to the Doc-Samples directory, as follows: 1. Open the Internet Services Manager. 2. Right-click Default Web Site. 3. Select New -> Virtual Directory. The Virtual Directory Creation Wizard will open. 4. Click Next. 5. Enter ExcelWriter as the alias for your virtual directory, and click Next. Note: You may use a different alias, but you will need to change the contents of the global.asa file. To do this, Open doc-samples\global.asa, and change Application("vroot") = "/ExcelWriter/" to, Application("vroot") = "/YourAlias/" 6. Browse to ExcelWriter's Doc-Samples directory and click next. Unless you selected a different directory during installation, you will find DocSamples in C:\Program Files\Software Artisans\ExcelWriter. 7. Check Read, Run, and Browse, and click Next. 8. Click Finish. 2.3.4 Minimal Installation The minimal installation of ExcelWriter consists of simply registering the single ExcelWriter DLL (saexcel.dll) as described above. No other libraries or DLLs need be registered or present on the system, besides the standard Windows installation. 2.4 Licensing ExcelWriter has a simple license. Every machine where the ExcelWriter DLL (saexcel.dll) is present and registered must have a valid license from SoftArtisans. This applies to both production and servers development workstations. Whether the software was installed by auto or manual installation, or by some other means, a valid license is required for the machine. 2.4.1 Server Licenses ExcelWriter server edition is licensed on a per-central processing unit (CPU) basis. This means that pricing is determined by the number of CPUs that exist on the Web server that will use ExcelWriter to generate Web reporting in Excel. The ExcelWriterLE version is licensed strictly on a per-server basis irrespective of the number of CPUs on that server. There are no per-user licenses for any version of ExcelWriter. This enables ExcelWriter to be used on an Internet server without any regard to what the user has installed on their PC. The user does not need a license 7 of Excel to use ExcelWriter-generated reports. In the case of a multi-homed, shared server that may be serving many different sites concurrently, a server license of ExcelWriter is required for each CPU. In the case of a cluster, either by Microsoft Clustering Services or Network Load Balancing, a license of ExcelWriter is required for every CPU in the cluster. This is the case even when using an Active-Passive cluster. 2.4.2 Developer Licenses A low-cost Developer Edition license is available for developers creating solutions using ExcelWriter. A Developer Edition license is necessary for every machine where ExcelWriter is installed for development purposes. If several developers share a single Web server for development, only a single license of ExcelWriter is necessary. If each developer uses his own Web server for development, an ExcelWriter-developer license is required for each development Web server. If a developer has multiple Web servers or test servers, each Web server or test server requires a Developer Edition license. The Developer Edition has precisely the same functionality as the server version, but it is limited to creating only a single spreadsheet at a time. ExcelWriter’s multi-threaded capability has been disabled in the Developer Edition. The Developer Edition must not be used in a production server environment. It is only to be used to create solutions. Usage of the Developer Edition in a production server environment is a violation of the license agreement. The ExcelWriter license in no way allows you to bundle or redistribute ExcelWriter as part of a solution. The Developer Edition license simply allows your developers to create solutions around ExcelWriter at lower cost than the full server license. It does not allow you to bundle or redistribute ExcelWriter in your solution, either within your organization or to other parties. (Please see the Desktop or OEM licenses if you need to bundle ExcelWriter in your application.) 2.4.3 ExcelWriter Desktop Licenses SoftArtisans ExcelWriter Desktop Edition is a high performance control for generating Microsoft ® Excel format spreadsheets from your client-side applications. It provides all the richness of ExcelWriter Server Edition, with the ability to bundle this functionality into the desktop applications that you create and distribute. Licensing is per-developer with no run-time royalties. Applications developed using ExcelWriter Desktop Edition can be used on any Windows client, including Windows 95, Windows 98, Windows Me, Windows NT, Windows 2000 and Windows XP. No additional software is required to create an Excel spreadsheet with your ExcelWriter Desktop Edition application on the client machine. If the application created with ExcelWriter Desktop Edition will access data from a database, the database must be on or accessible from the client machine. When using an ADO data source, all client machines running the ExcelWriter Desktop application must have the latest Microsoft ADO libraries. ExcelWriter Desktop cannot be installed on a server. 8 2.4.4 Bundling ExcelWriter in Your Solution – OEM Program The ExcelWriter license specifically prohibits resale or redistribution in any manner. If you are interested in bundling ExcelWriter in your Web solution, please contact the SoftArtisans OEM Sales Department at oem@softartisans.com. There are several flexible OEM programs that can be tailored to meet your requirements. 2.5 Edition Differences The pricing and licensing schemes for ExcelWriter differ depending on the features. The price of each ExcelWriter (Full) license is determined by the number of CPUs in the deployment server configuration. The ExcelWriterLE license is priced strictly on a per- server basis regardless of the number of CPUs. A developer license is required for every development PC where the product is installed. license. any Each server requires a server There are no per-user, per-IP address, or per-Web site costs associated with version. SoftArtisans also offers a non-expiring free version of ExcelWriter, ExcelWriterFree. This freeware version has limited functionality and contains a nonremovable splash page advertisement for SoftArtisans. There are four major editions of ExcelWriter: • ExcelWriter Server • ExcelWriter Developer Edition for enterprise class Web sites requiring maximum functionality and volume. offers the same functionality as ExcelWriter Server, but is limited to only a single spreadsheet created at one time. This is the typical development environment. Other restrictions may apply. • ExcelWriterLE Server o ExcelWriterLE Developer Edition for entry level Web sites requiring ease of use and minimal formatting and functions. offers the same functionality as ExcelWriterLE server but is limited to only a single spreadsheet created at one time. This is the typical development environment. Other restrictions may apply. • ExcelWriter Desktop for generating Excel format spreadsheets from your client- side applications. • ExcelWriterFree provides the same functionality as ExcelWriterLE spreadsheet contains a worksheet that advertises the paid versions. 9 but every EDITION DIFFERENCES ExcelWriter Server Edition Licensing Per CPU OS Required Server Only Developer Edition Per development server Professional/ WorkStation or Server ExcelWriterLE Server Edition Developer Edition ExcelWriter Desktop ExcelWriter Free Per server Per development Per developer server Free, no redistribution Server Only Professional/ WorkStation or Server Professional/ WorkStation Server Only Yes Easy Database Yes Import Yes Yes Yes Yes Templates Yes Yes Yes No Unlimited Unlimited Font type, style, size, and color; cell borders, alignment, and background Font type, style, size, and color; cell borders, Unlimited alignment, and background Over 53, more to come Over 53, more to come Sum, Average only Sum, Average only Over 53, more to come Yes Max rows: 500 Font type, style, size, and color; cell borders, alignment, and background Sum, Average only Yes Yes Yes Yes Yes Yes Cell Formatting Excel Functions Numeric Formatting Yes Max Cell Length Biff7: Biff8: 255 32000 Biff7: Biff8: 255 32000 Biff7: Biff8: 255 32000 Biff7: Biff8: 255 32000 Biff7: Biff8: 255 32000 Max Number of Rows Biff7: Biff8: 16384 65536 Biff7: Biff8: 16384 65536 Biff7: Biff8: 16384 65536 Biff7: Biff8: 16384 65536 Biff7: Biff8: 16384 65536 Max Number 256 of Columns Max workbooks generated per Unlimited 24 hour period Number of concurrent workbooks Unlimited that can be generated Biff7: Biff8: 255 32000 500 256 256 256 256 256 Unlimited 200* 200* Unlimited 200* 1 Unlimited 1 1 Unlimited Bar, column, and pie only No Bar, column, and pie only No Yes Yes Bar, column, and pie only No Charting Yes Yes Pictures Yes Open Method or ExcelTemplate Object Yes Open Method or ExcelTemplate ExcelTemplate Object only Object ExcelTemplate Object only ExcelTemplate Object only ExcelTemplate Object only No No No No No Yes No Yes No Yes Yes No Read Excel workbooks Worksheets contain Ad ExcelWriter CodeWizard ExcelWriterLE and ExcelWriter Free will fail when generating more than 200 workbooks within 24 hours. Generated workbooks can be streamed to the browser or saved in static files on the hard disk. Static workbooks can be served an unlimited number of times. Only the generation of new workbooks is limited. * 10 All editions of ExcelWriter support Microsoft's BIFF7 and BIFF8 file formats. BIFF7 is the format used in Excel 95, and BIFF8 is used in Excel 97/2000/2002 (XP). BIFF7 and BIFF8 files can be opened in Excel 97/2000/2002 (XP) and BIFF7 files can be opened in Excel 95. Note that ExcelWriter 2.0+ produces spreadsheets in BIFF8 format by default, ExcelWriter 1.x produces spreadsheets in BIFF7 format only, and not all BIFF8 features are available in Excel 95. 2.5.1 Differences Between the Full and LE Versions ExcelWriter is tailored functionality functionality while that is specifically for serving a currently enterprise large part number of the class sites of product requiring a maximum of requests. and no It includes limitation on all of the spreadsheet generation. ExcelWriterLE is designed for lower volume sites that require ease of use and minimal formatting and functions. It has a maximum of 200 new workbooks that can be generated during a 24-hour period that begins when the first spreadsheet is created. The developer important versions distinction: are These equivalent versions to the are comparable single-threaded server and editions allow with only a one single spreadsheet to be created at one time. This is typical of the development environment. The developer versions also include the ExcelWriter CodeWizard that can automate development by producing the code for ExcelWriter to easily recreate an existing Excel file. SoftArtisans ExcelWriter SoftArtisans ExcelWriterLE SoftArtisans ExcelWriter Desktop SoftArtisans ExcelWriter Free and FORMATTING NUMERIC FORMATTING GENERAL NUMBER CURRENCY ACCOUNTING DATE TIME PERCENTAGE FRACTION SCIENTIFIC TEXT SPECIAL CUSTOM STYLISTIC FORMATTING FREEZE PANES FONT FONT TYPE FONT STYLE (REGULAR, BOLD, OR ITALIC) FONT SIZE FONT UNDERLINE (NONE, SINGLE, DOUBLE, ACCOUNTING SINGLE, ACCOUNTING DOUBLE) yes yes yes yes yes yes yes yes yes yes yes yes and yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes 11 yes yes yes FONT COLOR FONT EFFECTS (STRIKETHROUGH, SUPERSCRIPT, SUBSCRIPT) CELL HEIGHT AND WIDTH ROW HEIGHT AUTOFIT ROW HEIGHT COLUMN WIDTH AUTOFIT COLUMN WIDTH MERGE CELLS ALIGNMENT HORIZONTAL (GENERAL, LEFT, CENTER, RIGHT, FILL, JUSTIFY, CENTER ACROSS SELECTION) VERTICAL (TOP, CENTER, BOTTOM, JUSTIFY) TEXT CONTROL (WRAP TEXT) ORIENTATION BORDER BORDER OUTLINE (NONE, OUTLINE) BORDER LINE STYLE BORDER LINE COLOR CELL SHADING COLOR CELL BACKGROUND PATTERN BREAK HORIZONTAL PAGE BREAK PROTECTION LOCKED HIDDEN HYPERLINK NON-RELATIVE: HTTP, HTTPS, FTP, MAILTO, UNC PATH CHARTING STANDARD CHARTING COLUMN: Clustered column, Stacked column, 100% stacked column, 3D clustered column, 3D stacked column, 3D 100% stacked column, 3D column BAR: Clustered bar, Stacked bar, 100% stacked bar, 3D clustered bar, 3D stacked bar, 3D 100% stacked bar LINE: Line, Stacked line, 100% stacked line, Line with data markers, Stacked line with data markers, 100% stacked line with data markers, 3D line PIE: Pie, 3D Pie, Exploded Pie, 3D Exploded Pie XY (Scatter): Scatter, Scatter connected by curves, with data markers, Scatter connected by curves, without data markers, Scatter connected by lines, with data markers, Scatter connected by lines, without data markers AREA: Area, Stacked area, 100% stacked area, 3D area, 3D stacked area, 3D 100% stacked area DOUGHNUT: Doughnut, Exploded doughnut RADAR: Radar, Radar with data markers, Filled radar SURFACE: 3D surface, Wireframe 3D surface, Contour, Wireframe contour BUBBLE: 3D Bubble CYLINDER: 3D All types of column charts with cylindrical shape CONE: 3D All types of column charts with cone shape PYRAMID: 3D All types of column charts with pyramid shape 12 yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes CUSTOM CHARTING LINE-COLUMN: Clustered column, stacked column, yes 100% stacked column (with line) LINE-COLUMN 2 AXES: Clustered column, stacked column, 100% stacked column (with line) yes EXCEL FUNCTION MATH FUNCTIONS ABS worksheet function EXP worksheet function INT worksheet function MOD worksheet function ROUND worksheet function SUBTOTAL worksheet function SUM worksheet function SUMIF worksheet function STRING FUNCTIONS LEN worksheet function MID worksheet function REPLACE worksheet function VALUE worksheet function BOOLEAN FUNCTIONS (AKA logical functions) AND worksheet function OR worksheet function FALSE worksheet function NOT worksheet function TRUE worksheet function IF worksheet function TIME FUNCTIONS DATE worksheet function DAY worksheet function HOUR worksheet function MINUTE worksheet function MONTH worksheet function NOW worksheet function SECOND worksheet function TIME worksheet function TODAY worksheet function WEEKDAY worksheet function YEAR worksheet function STATISTICAL FUNCTIONS AVERAGE worksheet function COUNT worksheet function COUNTA worksheet function COUNTIF worksheet function MAX worksheet function MEDIAN worksheet function MIN worksheet function PERCENTILE worksheet function STDEV worksheet function STDEVP worksheet function ISNUMBER worksheet function DATABASE FUNCTIONS DAVERAGE worksheet function DCOUNT worksheet function yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes 13 yes DCOUNTA worksheet function DGET worksheet function DMAX worksheet function DMIN worksheet function DPRODUCT worksheet function DSTDEV worksheet function DSTDEVP worksheet function DSUM worksheet function DVAR worksheet function DVARP worksheet function LOOKUP and REFERENCE FUNCTIONS ROW worksheet function COLUMN worksheet function ROWS worksheet function COLUMNS worksheet function HLOOKUP worksheet function VLOOKUP worksheet function yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes 14 2.5.2 Which Version is Right for You? Figure 2: Determining which license your application requires In order to determine which ExcelWriter version will best fit your requirements, you will need to evaluate such factors as the daily volume of Excel workbook generation created by your application, the depth of formatting required, types of charts required, need for image insertion and whether or not you will need to use pre-existing Excel files as a data source. ExcelWriterLE may fulfill your needs if you do not expect a high volume and do not require complex formatting or formulas other than “Sum” and “Average”, charts other than bar, column or pie, and will not need to open pre-existing Excel files. (See Figure 2) Please contact sales@softartisans.com for assistance with determining which version will best suit your requirements. They can also assist with providing information on upgrading from the LE to the full version, so you can start with a lower cost and, as your needs grow, possibly upgrade to a more robust edition. 15 2.6 Client Requirements No software is required on the client in order to download and save an ExcelWriter generated Excel file. However, to open the file, one of the following must be installed on the client. • Microsoft Excel 95, 97, 2000, 2001(MAC) or 2002 (XP). • Microsoft's free Excel 97 Viewer: (http://office.microsoft.com/downloads/2000/xlviewer.aspx) The Viewer Excel 97 allows the user to view and print an Excel spreadsheet, but not to modify it. • Another application that supports the Excel format, such as, Quattro Pro (http://www.corel.com/) or Gnome/Gnumeric (http://www.gnome.org/projects/gnumeric) ExcelWriter is supported for use with the following browsers: • Microsoft Internet Explorer 4.0, 5.0 or 5.5 or later on all 32-bit versions of Windows, including Windows '95, '98, Me, NT, 2000, XP and Macintosh. • Netscape Navigator/Communicator 4.5 or later on all 32-bit versions of Windows. Please note: Communicator for Macintosh, Unix systems, and V6.0 have not been tested at this time. SoftArtisans does not guarantee that all issues can be resolved for an unsupported browser. 2.6.1 Microsoft Excel on Win32 All 32-bit versions of Microsoft Excel 95,97, 2000 and 2002 (XP) for Windows operating systems are currently supported. If the client machine does not have Excel installed locally, the user can download and install Microsoft's free Excel 97 Viewer (http://office.microsoft.com/downloads/2000/xlviewer.aspx). formulas will appear as "0" when using the Excel 97 Viewer. Please note: All 2.6.2 Microsoft Excel on Apple Macintosh Web reports can be accessed on Macintosh clients or on Unix clients through the use of Excel 2001, Gnome / Gnumeric (http://www.gnome.org/projects/gnumeric) Office. 16 or Star 3 Excel As a Reporting Format With over 120 million licensed copies of Microsoft Excel being used around the world, Excel is easily the most popular reporting tool available. SoftArtisans ExcelWriter brings this preferred format to Web applications. ExcelWriter generates Excel files that are in the native Excel 97 Microsoft or 2000 Binary (BIFF8) format. format ExcelWriter and, for Version 2.0 backwards and newer compatibility support with the previous versions, the Excel 95 (BIFF7) format. 3.1 Advantages True full-formatted familiarity with Excel this reporting widely is used in high office demand application. by The end users richness due of to the the data visualization and the flexibility that is available when working with files received in .xls format are just a couple of the reasons why Excel is so extensively used. Excel files also provide cross-platform access. 3.1.1 Familiarity of Client As part of the Microsoft Office suite of products, Excel is the most widely used spreadsheet application. A large percentage of users already have Excel installed on their machines. And those that do not have Excel installed can always take advantage of the free Excel 97 Viewer or use an alternative application that can open and work with Excel files. The widespread familiarity with Excel prevents the need for comprehensive training on a Web reporting software package. 3.1.2 Richness ExcelWriter delivers formatting, formulas, richly formatted custom styles, native Excel charting, and files that images. contain The comprehensive ability to precisely control page layout, set page breaks, and format print options is included. This goes far beyond the static representations of data that are offered by the alternative CSV files, HTML Tables or PDF files. 3.1.3 Ease of Modification ExcelWriter generates native Excel files that provide maximum ease of interaction for the end user. No cutting and pasting is required to save the data. the client machine, the spreadsheets can be manipulated, sorted, Once received on and modified as required. Alternatively, where required, these Excel files can be secured and protected client-side, to avoid tampering or unauthorized access. 3.1.4 Upload Back to Server Excel files that have been modified client-side, can be uploaded back to the Web server and opened with the ExcelWriter (Full version only) “Cells.GetDataFromExcelSheet” method. The cell values and cell formats can be extracted for inclusion into a new Excel workbook that is formatted server-side with ExcelWriter. Alternatively, the cell values can be used to update a database via ADO. This allows the use of a pre-existing Excel file as a data source. 17 REPORTING FORMAT COMPARISON Modifiable by Users Multi-platform Support Used for Business Intelligence/ Decision Support Image Support Dynamic Chart Support Upload Back to Server Opened in Browser Rich Formatting Microsoft Excel Adobe® PDF HTML CSV Yes No No Limited Yes Yes Yes Yes Yes Yes No No Yes Yes Yes No No Yes Limited No No Yes Yes No Yes Yes No Yes 18 No Yes Yes Yes 4 Usage Scenarios SoftArtisans ExcelWriter applications make a dramatic impact on the distribution of information across an enterprise. ExcelWriter can save enormous amounts of time and effort for both application developers and end users. Users are accustomed to reports in full-function, richly formatted Excel on their desktop. SoftArtisans ExcelWriter means that standard Excel documents do not have to be compromised into HTML, flat CSV files, or any lesser format to be quickly served through the Web. Web applications seamlessly integrate with common desktop applications. SoftArtisans ExcelWriter brings the power of Microsoft Excel to the Web. Benefits of using SoftArtisans ExcelWriter and native Excel spreadsheets on the Web include: FLEXIBILITY: • Users can serve themselves data and generate Excel reports from any location that has Internet access. DELIVERY SPEED: • Concurrent users receive Excel reports faster, when they need them, without straining the Web server or their patience. PRODUCTIVITY: • Business administration can become more automated. Custom reports for different departments/regions can be automated, reducing dependency on IT department. DATA VISUALIZATION FOR EASY ANALYSIS: • Native Excel charting (2D & 3D) makes data easy to understand. CONSISTENCY: • Same data and formatting in reports across the corporation— frequently accessed reports can be saved on the server. EASE OF USE: • just specially ExcelWriter makes Web reports accessible to all end users, not trained power users. Most business people are familiar and proficient in using Microsoft Excel as compared to other Web reporting tools. TIME MANAGEMENT: Reporting via the Web reduces and eliminates meetings, • conference calls, and many customer service issues. COST EFFECTIVE: • per user costs. SoftArtisans ExcelWriter has flexible licensing—there are no If users do not have Microsoft Excel installed on their workstation, they can view the Excel spreadsheets with a free viewer. The following scenarios demonstrate just a few ways organizations can use SoftArtisans ExcelWriter. 4.1 Intranet Reporting ExcelWriter is successfully used in many password-protected intranet sites. Corporate portals can contain standard company documents online and in native Excel: • • Sales reports Inventory status 19 that are dynamically generated • • • • • Market share/competitive comparisons Status reports Organization charts Administrative forms Research information ExcelWriter is commonly used for sales reporting. With ExcelWriter, static monthly reports can provide real time, dynamic information. Executives, sales representatives, marketing departments, accounting departments, can all access sales data any time. Popular reports may be saved on the server for easy access for thousands of end users, or custom reports can be generated through dynamic Web forms and drop down lists. Sales representatives may want to view sales by region with comparative data to goals or peers. Sales managers can keep track of regional performance. Marketing can analyze trends and measure success of campaigns. Once the employees download the spreadsheet to their desktop, they can manipulate data for their own purposes. advantage of having this sales information in dynamic Excel format is that The the information becomes easily accessible anytime to employees. 4.2 B2B Commerce ExcelWriter can be used for automating many business processes such as delivering information to customers, partners, manufacturers, and others. Companies can generate Excel spreadsheets to provide account information, online invoices, instant price quotes, documents sales from leads, the Web product lets lists, clients hours—self-service applications provide hurdles. many that There are ways contacts, access a and charts. information solution e-commerce for The during many businesses ability to provide own business international business can their use ExcelWriter to deliver information to partners and clients. For instance, an online office supply store may provide services such as a customer shopping lists in Excel. Many corporations order office supplies over the Web; the online store could provide an application that allowed customers to download shopping lists based on past purchase cycles. 20 4.3 Stock Portfolio With more and more information at their fingertips, investors are hungry to access upto-the-minute information about their finances. Rather than wait for an appointment with a broker, clients could access reports on the Web. With ExcelWriter, financial services companies provide their clients Excel Web applications such as self-service calculators, planners and worksheets. The developer can set up the reports from a database with formulas and the clients can run several different hypothetical scenarios in order to assist with decisions that will help them to maximize their investments. By allowing clients to access data, companies can reduce call frequency, providing subsequent savings through decreased staffing requirements. Clients can track their portfolio and save the reports to their personal computer to track stock records and facilitate long-term planning and budgeting. Native Excel charting and graphing provides simple data visualization for easy trend analysis. 4.4 Human Resources Human Resources departments have saved a tremendous amount of staff time by making information available online. HR departments usually have a strong presence on intranet sites. Employee handbooks, policy distribution, company-wide calendar, personnel forms and payroll information can all be stored in online corporate portals as Excel files. 4.4.1 Web-based Payroll Web payroll processing is easy and convenient for both employers and employees. A business can use ExcelWriter to give employees the option to view and download their payroll information in Excel format. Employees can view payroll reports, view electronic pay stubs including tracking of vacation and sick time. They can modify the year-to-date spreadsheets to plan their personal budgets as well as review their payroll history and statements from anywhere. 21 5 Features in Depth 5.1 Excel Version Compatibility ExcelWriter generates Excel files that are in the native Microsoft Binary format. ExcelWriter is compatible with Excel 95 (BIFF7), 97, 2000 and 2002 (BIFF8). 5.2 Addressing Cells There are two methods of addressing cells contained in a spreadsheet generated by ExcelWriter: by Addressing Name cells by or by name Number is . easier to read, more intuitive and matches the cell references seen in Microsoft Excel. Addressing cells by number is significantly faster, and is easier to program if it is necessary to walk a number of cells. It is possible to employ both means of referencing cells within your code. set xlw = Server.CreateObject("SoftArtisans.ExcelWriter") set cells = xlw.worksheets(1).cells '--- By name cells("B3").value = 123 '--- Same cell by number cells(3, 2).value = 123 When referencing a cell by number, the format is cells(row, column). 5.3 Setting Cell Values An ExcelWriter-created workbook allows for the flexible assignment of cell values by various methods. Cell values can be assigned programmatically: • • On a cell-by-cell basis with data that has been parsed from a CSV file or an XML file By iterating through an ADO Recordset and assigning field values to cells on a rowby-row basis • By importing the entire contents of the Recordset in a single step with the “CopyFromRecordset” or “GetDataFromRecordset” methods • Or by extracting data from a pre-existing Excel File and copying it into the newly created Excel sheet by means of the “GetDataFromExcelSheet” method ExcelWriter allows you to format these imported cell values as virtually any data types that are supported by Excel. This includes currency, date/time, numeric data types such as integer or floating point number, strings, text, etc. Casting (or changing cell values from one data type to another) can be accomplished by means of the serverside scripting functions (i.e. VBScript’s CStr() or CINT() functions). 22 5.4 Importing From a Database As mentioned above, data can be imported into the worksheet being created from any ADO datasource, either by using the simple one-step pasting method of a rectangular block of data offered by the “CopyFromRecordset” or “GetDataFromRecordset” methods, or by walking the Recordset object and assigning values via a loop. Multiple recordsets can be added in a single worksheet or workbook. 5.4.1 ADO Data from worksheets a database via Microsoft can be made ActiveX Data accessible Object for (ADO). importing ADO into provides ExcelWriter the ability to connect to a database, and by means of a SQL query that can be formulated by using values retrieved from a client-side form, to retrieve a recordset object that contains the exact data that a user ExcelWriter. ADO can wishes to have populated in the Excel file created by be used to filter or sort the data prior to scripting it into an ExcelWriter-generated worksheet. 5.4.2 ODBC In order to import data from databases, it is recommended that you first install the latest Microsoft drivers on your machine. There are specific ODBC Drivers available that will allow you to create connections to most major databases such as Access, Oracle, or SQL Server. The driver package http://www.microsoft.com/data/. for Choose to each version download of MDAC 2.0 IIS or is free later. at MDAC includes updates to ADO, OLEDB, and related ODBC drivers. 5.5 Formatting Once cell values have been set, the accurate and easy-to-understand display of that data is dependent on properly executed formatting of the cells contained in the worksheet. Cells are formatted by the application of fonts, formats and styles. This can be done in the server-side scripting either prior to or as a follow-up to the importation of cell values in the script. Fonts determine the text representation of a cell, such as the font name, the size, the color, etc. A font can be included as a property of a style or format. Format and style share many characteristics. Both are used to set the look of text, defining properties such as alignment, text wrap and so on. However, a format is specific to one cell. A style ensures that a set of cells have the same look. If the style is changed, all cells that reference the style will automatically update with the modified formatting. A style can be used repetitively for each cell in a set of cells. Once a style is applied to a cell, it is possible to override specifics of style by using the cell's format. Updating a style will automatically update all cells where the style was applied. 23 Wherever possible, create a set of custom styles and fonts and then apply them to multiple cells rather than setting individual format properties on a per cell basis. This will help to avoid exceeding Excel’s maximum limit of approximately 4074 separate styles and formats (combined) that can be included in a workbook. The custom styles that are defined can include numerous properties that set such things as text alignment and display (mentioned above), cell patterns and color fill, cell ” borders, etc. The “Style.Number property can be included to specify how numbers and dates are to be displayed in these cells. This “Number” property is equivalent to the “Format.Number” property used when formatting on a per cell basis. This property can be set to any of the predefined choices available in the “Formatting Code” table that is part of the ExcelWriter documentation or to a customized mask that is created. 5.6 Formulas ExcelWriter supports almost all major math, string, boolean, time, statistical, database, lookup and reference formulas or functions that are part of Excel. Formulas can be inserted into any cell in a worksheet by using the “Cell.Formula” property. They can be inserted into the spreadsheet either by hard coding the address for the cell “NumRows” where the to contain (the last it return row of or by value the dynamic of pasted the coding which includes “CopyFromRecordset” recordset will be a variable method positioned in which the such as indicates worksheet) to provide a sum at the bottom of a column. In ExcelWriter, formulas can reference data across worksheets, as follows: ws3.Cells(1,1).Formula = "=sum(sheet1!A1,Sheet2!A2)" ws3.Cells(2,1).Formula = "=sum(sheet1!A1:A3)" When applying a formula to a cell, always include the entire string in double quotation marks (“”) and begin the string with an equal sign (=), as you would when creating a Microsoft Excel spreadsheet. With ExcelWriter, formulas cannot be executed server-side to retrieve values for use in the script. All formulas are executed at the time that the file is downloaded and opened in Excel. (Please note: If the downloaded files are opened client side with the free Microsoft Excel Viewer, all formulas will be rendered with “0” as the resultant value.) 5.7 Charting ExcelWriter offers the ability to create full-formatted, native Excel workbooks that can include charts in 2D or 3D format. The server edition currently supports fifteen major chart types and over seventy subtypes. (Please note: The ExcelWriterLE version available chart types are bar, column, and pie). ExcelWriter is not a charting engine and .jpeg cannot be used to produce static .gif inclusion into an HTML page. 24 or representations of charts for One or more charts can be added on the same worksheet in which the data being referenced is contained. Charts are added using the “Add” method of the “Charts” collection object and specifying the range on a worksheet in which the chart should be positioned: Set Charts = ws.Charts Set Chart = Charts.Add(ChartType, [SubType], [UpperLeftRow], [UpperLeftColumn], [LowerRightRow], [LowerRightColumn]) Once the chart type has been established and positioned within a worksheet, data can be referenced by means of the creation of a “SeriesCollection” object. The X-Axis (Category) data is added as follows: SeriesCollection.CategoryData = "A1:A3" The Y-Axis (Value) data is added by means of this object’s “Add” method as follows: Set SeriesCollection =Chart.SeriesCollection SeriesCollection.Add(Area, , [Vertical]) Area The parameter specifies the values from which to plot the data series. Area may be a range of cells (such as, "A1:C3"), or a sequence of values (such as,"{5,7,9}"). The optional parameter Vertical specifies whether to plot the series from a range of cell values by row or by column. When by row. When Vertical is set to Vertical 1, is set to 0, ExcelWriter will plot the series ExcelWriter will plot the series by column. The default value of Vertical is 0. Data can be referenced across worksheets by the use of absolute, cross-sheet ranges as follows: SheetName!$Column$Row:$Column$Row ExcelWriter allows you to create such elements as a chart title, legend, category and value axis titles and data labels, and grid lines. By first creating and then referencing custom fonts in the “TextFont” property, chart titles and legend text can be fully customized for font type, color, and size. By using the “Area” “MarkerFormat”, “AreaFormatting” object, “Wall3D”, from which and is available “ChartFrame”, automatic to for manipulating it’s custom also or the possible none, and “Series to Area”, toggle to set the the “BackgroundColor”, “ForegroundColor” or “Pattern” for the chart area, plot area, or the data series markers, and other elements of the chart. 5.8 Images The ExcelWriter Server Edition also offers the ability to import images or pictures into a workbook. The primary method for inserting a picture is by “CreateFromFile” method of the “Pictures” object: Set Pictures = ws.Pictures Pictures.CreateFromFile(UpperLeftColumn, UpperLeftRow, LowerRightColumn, LowerRightRow, FileName) 25 means of the “UpperLeftColumn”, “UpperLeftRow”, “LowerRightColumn”, and “LowerRightRow” specify the location of the picture in the worksheet. “FileName” specifies the complete path and name of the file from which you are creating a picture. Since ExcelWriter is a server-side control, it does not have the ability to adjust the display of an image based on the screen resolution of the monitor that will be used to display the worksheet and the included image. Therefore, when employing the “CreateFromFile” method to specify the range of cells in which to display the image, the image may appear somewhat distorted, when displayed at certain resolutions, from being stretched or shrunken to fill the area specified in the range. The “BorderlineType” and “BorderLineWeight” properties of the image borderline can be specified. properties: By correctly “LowerDeltaX”, manipulating “LowerDeltaY”, the horizontal and “UpperDeltaX”, and the vertical offset “UpperDeltaY”, an image can be made to overflow the boundary rows and columns or to shrink inward in order to create a buffer or white space around the image. An image can also be made to move dynamically, when required, by means of the “Move” method of the “Picture” object. 5.9 XML Import As mentioned earlier, ExcelWriter can be used to display, in an Excel worksheet, data that has been parsed from an XML file which is being used as a datasource and that is available on the Web server. 5.9.1 MSXML In order to parse data and to make it available for importing into the Excel workbook being created by ExcelWriter, an XML parser is required. Microsoft offers its own version of an XML parser with MSXML. In order to make MSXML available for use in the ASP page that contains ExcelWriter, an instance of the server-side parser must be created as follows: Set XML = Server. CreateObject(“MSXML2.DOMDocument”) Once the XML object is available, the XML source file can be accessed via the “load” method (with error handling): Xml_file = Server.MapPath(“my_xml.xml”) Dim bRet BRet = XML.Load(xml_file) If (bRet = False) Then Response.Write Err.Description End If 26 5.9.2 Excel XML DOM The XML “Document Object Model” (DOM) is a programming interface for XML documents. It defines the way a document can be read and manipulated. Once the XML file is provides a loaded means in for the the ASP page that server-side includes scripting to the ExcelWriter navigate its object, structure in this DOM order to import the data contained in the document’s various “nodes” into the Excel worksheet on a cell-by-cell basis. The DOM represents a tree view of the XML document. The documentElement is the top-level of the tree. This element has one or many childNodes that represent the branches of the tree. A Node Interface is used to read and write the individual elements in the XML node tree. The childNodes property of the documentElement can be accessed with a for/each construct to enumerate each individual node. Here’s a code snippet, continued from above, that demonstrates how to “walk” the XML DOM in order to retrieve the data to be imported into the Excel file being created by ExcelWriter: Private Sub BuildWorksheet(ByRef parent, ByRef sheet) Dim Dim Dim Dim Dim node row cell nRow nCol For Each node In parent.childNodes If node.nodeName = "Table" Then For Each row In node.childNodes If Not row.Attributes.getNamedItem("ss:Index") & _ Is Nothing Then nRow = & _ row.Attributes.getNamedItem("ss:Index").nodeValue End If For Each cell In row.childNodes If Not cell.Attributes.getNamedItem("ss:Index") & _ Is Nothing Then nCol = & _ cell.Attributes.getNamedItem("ss:Index").nodeValue End If If Not cell.firstChild Is Nothing Then sheet.Cells(nRow, nCol) = & _ cell.firstChild.firstChild.nodeValue End If nCol = nCol + 1 Next nRow = nRow + 1 Next End If Next End Sub 27 Dim XLW, XML Set XLW = Server.CreateObject("SoftArtisans.ExcelWriter") Set XML = Server. CreateObject(“MSXML2.DOMDocument”) Xml_file = Server.MapPath(“my_xml.xml”) Dim bRet bRet = XML.Load(xml_file) If (bRet = False) Then Response.Write Err.Description End If Set doc = XML.documentElement Dim strSheetName Dim node For Each node In doc.childNodes If node.nodeName = "Worksheet" Then strSheetName = & _ node.Attributes.getNamedItem("ss:Name").nodeValue XLW.Worksheets.Add strSheetName Set tempSheet = XLW.Worksheets(CStr(strSheetName)) BuildWorksheet node, tempSheet '--- Create Worksheet 1 to contain the data table Set WKS = tempSheet Set Cells = WKS.Cells End If Set tempSheet = Nothing Next 28 Once the Excel file in memory on the server has successfully imported the data, the worksheet can then be formatted, manipulated and saved or streamed using the various options available with the ExcelWriter “Save” method. Figure 3: Resulting spreadsheet for XML sample 5.10 Saving Results ExcelWriter provides a number of options for saving or streaming the Excel files that it creates with server-side scripting. The option that will best suit the requirements of the application is specified in the “Save” method of the “ExcelApplication” principal object. The “Save” method takes three parameters and returns the output file as a series of “bytes”: varBytes = xlw.Save "filename", option1, option2 “FileName” contains either the name of the file with which you wish to stream it, or the full path to the location on the server where you wish to save the file. “Option1” specifies the manner in which the file is saved or streamed: • saDefault (= 0) • saOpenInExcel (= 1) • saOpenInPlace (= 2) 29 “Option2” specifies the format in which the file is saved or streamed: • saFileFormatDefault (in V2 or later =8, in V1.x =7) • saFileFormatExcel95 (= 7) • saFileFormatExcel97 (= 8) • saFileFormatExcel2000 (= 8) 5.10.1 To Disk In order to save the file as a flat file on the Web server’s hard disk, the “Save” method will contain only the “filename” parameter with the full path of the file as it is to be saved on the server’s hard disk: xlw.Save "d:\excelreports\report1.xls" 5.10.2 To Memory If the “Save” method is followed with three empty parameters, the file will be returned as a sequence of bytes in memory (a variant of type VT_UI1 | VT_ARRAY): varBytes = xlw.Save 5.10.3 Streamed to Browser The “Save” method can be used to designate that the newly created file should be streamed to a client machine via HTTP protocol in order to be launched directly in the client’s browser. Or it can be used via a “File Download” dialog, to present the client with the choice of opening the file in a new window with Excel, or of saving the file to their hard drive. The exact method is specified by means of “Option1”. 5.10.3.1 In-place Activation When “Option1” of the “Save” method includes the “saOpenInPlace” (=2) constant, as follows: xlw.Save "report.xls", saOpenInPlace the downloaded file will be opened with Excel (or the freeware “ExcelViewer”) directly in the client browser. 30 5.10.3.2 In a Separate Window When “Option1” of the “Save” method includes the “saOpenInExcel” (=1) constant, as follows: xlw.Save "report.xls", saOpenInExcel the downloaded window. If the file will force client chooses a “File Download” dialog box to appear in the “Open this file from its current location”, the client file will launch and display in Excel (if installed) in a separate window. If “Save this file to disk” is chosen, the client will be allowed to save the file locally with the name of the file as specified in the first “filename” parameter of the “Save” method. 5.11 Read an Existing Spreadsheet* * This feature is not available in ExcelWriterLE. With ExcelWriter, you can get data from an existing Excel spreadsheet and copy it to another spreadsheet. To read from an existing sheet use the “Cells” object method GetDataFromExcelSheet. GetDataFromExcelSheet can be called more than once in the process of creating a new spreadsheet. GetDataFromExcelSheet can only retrieve cell values. To retrieve charts, formulas, macros, and VBA, use ExcelTemplate or ExcelApplication.Open. GetDataFromExcelSheet takes seven parameters, and returns a range object: Range = cells.GetDataFromExcelSheet(FileName, [Source], [IncludeFormatting], [FirstRow], [FirstCol], [MaxRows], [MaxCols]) Once the range has been imported into the new worksheet, it can be accessed via server side scripting. This enables setting formulas or charts that reference imported cell values, updating a database via ADO code that parses out the data, and adding or modifying formatting. 31 Parameter Definition Default Value [MaxRows] The name of the source file, that is, the spreadsheet from which ExcelWriter is reading. Optional. Specifies the first cell in the source range of cells. Source may include both sheet number and cell name (e.g. "Sheet2!$B$11"), or a cell name alone (e.g. "B11"). If Source does not include a sheet reference, ExcelWriter will read from the first sheet in the workbook. Optional. When set to True, ExcelWriter will copy the original formatting with the data from the existing spreadsheet. Optional. First row in the destination sheet. Optional. First column in the destination sheet. Optional. Maximum number of rows to write in the destination sheet. [MaxColumns] Optional. Maximum number of columns to write in the destination sheet. FileName [Source] [IncludeFormatting] [FirstRow] [FirstColumn] "" If you do not assign a Source value, ExcelWriter will start reading at cell A1 in the first worksheet. True 1 1 16384 in Excel 95 (BIFF7) 65536 in Excel 97/2000 (BIFF8) 256 (Limit imposed by Microsoft's BIFF7 and BIFF8 formats, not by ExcelWriter) To get data from an existing Excel workbook, 1. Use GetDataFromExcelSheet to specify the source file, and, optionally, the first source cell, the first destination cell, and the maximum numbers of rows and columns to copy. Example: To get data from C:\spreadsheets\workbook1.xls, sheet 2, starting at cell B3, without formatting, and copy to cells B3:F12 in the destination file, use, Set ResultRange = ws.Cells.GetDataFromExcelSheet ("C:\spreadsheets\workbook1.xls", "Sheet2!$B$3", False, 3, 2, 10, 5) 2. Save the destination file. Example: xlw.Save "c:\workbook2.xls" 5.11.1 Formulas Importing Formulas contained in a cell that is imported as part of the range object can be copied. However, the cell values that are the result of the execution of the formula will not be available on the server. This means, for example, that if the requirement is to obtain the "sum" of a certain set of cells server-side for reference in an ADO update to a database, the true value will not be accessible and the cell value for the cell containing the formula will read as "0". 32 5.12 Modifying an Existing Spreadsheet You can open and modify an existing spreadsheet, and save it with a new name or stream it to the browser (preserving the original file). This allows you to use a preset format for similar Alternatively, use a spreadsheets, template. To rather than determine recreate which the method is format best for for each. you, see ExcelApp.Open vs. ExcelTemplate, section 5.14. If either saOpenInPlace or saOpenInExcel is used in the Save method and the new spreadsheet is given the same name as the original file that exists on the server, the original file will not be overwritten. The original spreadsheet can include macros, VBA, charts, etc. - they will be preserved in the new spreadsheet. Note: If you open a BIFF7 (Excel 95) format spreadsheet, you cannot apply BIFF8 features to it, and ExcelWriter will save the spreadsheet in BIFF7 format. To modify an existing spreadsheet, 1. Open the spreadsheet, using the ExcelApplication object's Open method: Set objExcelApp = Server.CreateObject("SoftArtisans.ExcelWriter") objExcelApp.Open "c:\folder\file.xls Note: ExcelApplication.Open cannot open a file containing data markers (that is, a template). 2. Create at least one Worksheet, for example, set order = xlw.worksheets(1) 3. Assign cell values, for example, order.cells("A7").value = "Margaret Anderson" order.cells("A8").value = "32 Andover Lane" order.cells("A9").value = "Lawrence, NY" Save the modified file with a new name. 5.13 Using Template Spreadsheets ExcelWriter's ExcelTemplate object generates new files from template spreadsheets. ExcelTemplate imports an ADO recordset (or recordsets) to a template and generates a new spreadsheet. Note: The ExcelTemplate object supports Excel's BIFF8 (Excel 97/2000/XP) format only; ExcelTemplate does not support BIFF7 (Excel 95) format templates, and will not generate BIFF7 format files. The ExcelTemplate property object - object DataSource. model is simple includes Compared and two to methods the compact, - Open ExcelApplication making and Process object, ExcelTemplate a - and one ExcelTemplate's faster means of generating a file from an existing spreadsheet than ExcelApplication.Open. However, while the ExcelApplication object is rich in features, and can modify spreadsheets at run time, ExcelTemplate only imports recordsets. 33 An template is a file created in Microsoft Excel that contains data data marker specifies a database column to import to the spreadsheet ExcelWriter markers. A column containing the marker. The format of a data marker is: %%=Recordset.ColumnName For example, if cell B6 contains the data %%=Recordset.OrderID, marker where Recordset represents the Orders table in the database, ExcelWriter will import the OrderID column to the spreadsheet's column B. This example uses the Northwind database. Template Spreadsheet generated from template To generate a spreadsheet from a template, 1. In Microsoft Excel, create a template spreadsheet. Include data markers indicating database columns to import to the spreadsheet. For example, to insert the Products table's UnitsInStock Column in Excel column C, first row 3, enter %%=Products.UnitsInStock in cell C3. Optionally, include in the template any values, formulas, formatting, charts, pivot tables, etc. 2. In a server-side script, 1. Create an instance of the ExcelTemplate object: Set objTemplate = Server.CreateObject("SoftArtisans.ExcelTemplate") 2. Create an ADO database connection, connect to and query the database, and create a recordset, e.g., Set adoConnect = Server.CreateObject("ADODB.Connection") strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &_ Server.MapPath(Application("vroot") & "northwind.mdb") sqlText = "SELECT top 20 * from Orders" adoConnect.Open strConn Set Recordset = adoConnect.Execute(sqlText) 3. Use the ExcelTemplate object's Open method to open the template: objTemplate.Open "c:\templates\template.xls" 4. Set the template's DataSource(s) to the Recordset(s) returned from the database, using any of the following formats. 34 Format Data Marker Code 1 Generic %%=DataSourceName.FieldName obj.Datasource("DataSourceName") = MyRecordset 2 Implicit Bind %%=FieldName obj.Datasource = MyRecordset %%=#1.FieldName %%=#2.FieldName obj.Datasource = MyRecordset obj.Datasource = MyRecordset1 3 Bind by order %%=DataSourceName.#1 %%=DataSourceName.#2 4 Bind by field position 2 Implicit Bind & with 3 Bind by order 1, 2, 3 & 4 obj.Datasource("DataSourceName") = MyRecordset obj.Datasource = MyRecordset obj.Datasource = MyRecordset1 or %%=FieldName %%=#2.FieldName obj.Datasource ("#1") = MyRecordset obj.Datasource ("#2") = MyRecordset1 Generic, Implicit, Bind by order, and %%=#1 Bind by field %%=#2.#2 position 5. Use the obj.Datasource = MyRecordset obj.Datasource = MyRecordset1 ExcelTemplate object's Process method to generate the spreadsheet: objTemplate.Process "c:\template_result.xls", saOpenInExcel Process takes two parameters: the name and path of the generated spreadsheet, and an optional process method. Assign the process method parameter by name or number: saProcessDefault saProcessOpenInExcel saProcessOpenInPlace saProcessOpenForScripting 0 1 2 3 35 5.14 ExcelApp.Open vs. ExcelTemplate ExcelWriter provides two means of using a preset spreadsheet format to generate a new spreadsheet: • ExcelApplication's Open method (see Modifying an Existing Spreadsheet) • ExcelTemplate (see Using Template Spreadsheets) Note: data An ExcelWriter template is a file created in Microsoft Excel that contains markers ExcelWriter template, and can be opened documentation, not a Microsoft the with term Excel the ExcelTemplate "template" template (.xlt). refers to However, object. an In the ExcelWriter ExcelWriter can open and generate both .xls and .xlt files. Use an .xlt file the same way you would an .xls file. Using ExcelApplication.Open is slower than using ExcelTemplate because the ExcelApplication object is much larger than the ExcelTemplate object. However, the ExcelApplication object is rich in features, and can modify spreadsheets at run time, while ExcelTemplate can only import recordsets. The following table summarizes the differences between the two. To determine which method is right for you, consult the decision tree below. Note: You can use ExcelTemplate and ExcelApplication together, as demonstrated in the sample Using ExcelTemplate with ExcelApplication. ExcelApp.Open ExcelTemplate BIFF7 (Excel 95) and BIFF8 (Excel 97/2000/XP). Supported Excel formats Modifications at run time Can open a file containing data markers Performance Flexibility Data Sources BIFF8 only. ExcelTemplate does not support BIFF7 format Note: If you open a BIFF7 (Excel 95) format templates, and will not generate workbook, you cannot apply BIFF8 features to BIFF7 format files. it. ExcelWriter will save the workbook in BIFF7 format. Yes No No Yes ExcelApplication's large object model makes it Because it is compact, ExcelTemplate is a faster means a slower means of modifying an existing file of modifying an existing file than than ExcelTemplate. ExcelApp.Open. ExcelApplication is rich in features (including ExcelTemplate only imports database import) which can be applied to an database recordsets existing workbook at run time ADO recordset (see GetDataFromRecordset), ADO recordset Excel workbook (see GetDataFromExcelSheet) Requires modification of an existing Excel No workbook before opening Supports Macros and VBA Yes. To use an existing Excel workbook as a template, you must add data markers to it. ExcelApplication preserves existing Macros and VBA but cannot create new Macros and VBA 36 ExcelTemplate preserves existing Macros and VBA but cannot create new Macros and VBA To determine which method of using a preset workbook format is right for you, consider the following, • Do you have an Excel file that you would like to use as a model workbook? If you do, is modifying the file an option? Using ExcelApp.Open does not require modification of the file, while using ExcelTemplate requires adding data markers to the file. • Do you want to ExcelTemplate offers an be only able to allows abundance of modify you to features the generated import at run workbook recordsets, time, while including charting, picture insertion, formatting, and many more. 5.14.1 ExcelApp.Open vs. ExcelTemplate Decision Tree 37 at run time? ExcelApplication formulas, 5.15 Data ExcelWriter offers a “GetDataFromExcelSheet” method that is part of the “Cells” object. This method provides the ability to use a pre-existing Excel file (located on the Web server or on a networked server) as a data source when creating the new Excel file with server side scripting. This functionality allows for the import of cell values and cell formatting (optional) from a range of cells that is specified in the pre-existing workbook. This range can then be pasted into the new spreadsheet in the precise location required for creation of the new file. The “GetDataFromExcelSheet” method takes seven parameters and it returns a range object, as follows: Range = cells.GetDataFromExcelSheet(FileName, [Source], [IncludeFormatting], [FirstRow], [FirstCol], [MaxRows], [MaxCols]) The first “FileName” parameter contains the full path and the name of the source file (as a string) of the spreadsheet from which ExcelWriter is reading. The second “Source” parameter specifies location of the first cell in the source range of cells. “Source” can include both the sheet number and "Sheet2!$B$11"), or the cell name alone (e.g. "B11"). If the Source cell name (e.g. does not include a sheet reference, ExcelWriter will read from the first sheet in the workbook. If you do not assign Source a value, ExcelWriter will start reading at cell “A1” in the first worksheet. The third “IncludeFormatting” parameter is optional (the default is “True”) and dictates whether to values. The “MaxCols” copy formatting following are optional from four and the source parameters: specify how sheet in “FirstRow”, to place the addition to “FirstCol”, imported importing the “MaxRows”, range object cell and in the during the destination spreadsheet. This “GetDataFromExcelSheet” method can be called more than once creation process of the new spreadsheet. Once the range has been imported into the new worksheet, it can be accessed via server side scripting. This allows the ability to set formulas or charts that reference imported cell values, update a database via ADO code that parses out the data, or to add or modify formatting. 5.15.1 Formulas The implementation current of reading from a pre-existing worksheet has one limitation relating to working with formulas that are part of the cell data imported with the “GetDataFromExcelSheet” method. 38 Formulas contained in a cell that is imported as part of the range object can be copied. However, the cell values that are the result of the execution of the formula will not be available, server-side, are not yet accessible. This means, for example, that if the requirement is to obtain the “sum” of a certain set of cells server-side for reference in an ADO update to a database, the true value will not be accessible and the cell value for the cell containing the formula will read as “0”. 5.15.2 Macros, Outlines, Pivot Tables and VBA Open a pre-existing file or template that has been created and designed directly in Excel and uploaded to the Web server. The template can then be loaded into memory on the server and made available for use in creating a new Excel workbook with ExcelWriter. In this manner, all features of the Excel template can be passed into the new Excel file and become part of the new file that can then be saved or streamed. This will include the ability directly to support supported in virtually the all features ExcelWriter and object macros, VBA, pivot tables, etc. 39 functionalities model. This of Excel includes that such are things not as 6 Comparison to Microsoft Excel ExcelWriter offers some very important advantages over the Excel object when used in a traditional client/server application (the Desktop edition) or on a Web server (ExcelWriterLE or Server editions) to generate and stream true native Excel reports. 6.1 Excel on the Web Server ExcelWriter has no dependency on the Excel object when creating native Excel files. This means that it is not necessary to have Excel installed on the server at all. This is a major benefit due to lower licensing costs and ease of deployment as well as for the performance and stability of the server when handling large volumes of concurrent requests for Excel reports. 6.1.1 Licensing ExcelWriter licensing is on a per-CPU or per-server basis (ExcelWriterLE and all developer versions). This means that there are no per-user or run-time royalty costs associated with any version of ExcelWriter. Microsoft Excel licensing requires, not only that the Web server creating Excel reports has a license for Office, but also that each client that is receiving the downloaded Excel reports must have a valid license for Excel on the local machine. Using the Excel object to generate Excel reporting on an intranet would require an enterprise level license for Office. ExcelWriter licensing provides far greater flexibility and reduced overall costs for the generation and streaming of Excel reports via the Web. 6.1.2 Performance ExcelWriter server is a stability multi-threaded when handling server-side multiple DLL that concurrent provides requests. a greater measure Instantiating of multiple copies of the Excel object can be dangerous, as the objects do not always close out when they are no longer in use. This can place a heavy load on the server that could eventually result in a server crash. The ExcelWriter .dll can be set to nothing in the ASP code that kills the current process and releases all resources. Benchmark comparisons show that ExcelWriter is capable of generating native Excel files at speeds up to 100 times faster than the Excel object. See test results at: http://www.softartisans.com/softartisans/excelwriterbenchmarks.html 6.2 Office Web Components Starting with Office 2000, Microsoft is offering a set of Office Web Components (OWC) that enable a scaled-down version of some of Excel’s key features to be integrated into a Web reporting solution. There are four principal Office Web Components: • • • • Spreadsheet Pivot Table Chart Data Source 40 These Office Web Components are COM components. This means that any COM-aware client, such as ASP, Visual Basic, and Visual C++, can use them. They are a collection of ActiveX controls which bring many of Excel’s advanced data-representation features, such as interactive spreadsheets, charts, and pivot tables to Web pages. also integrate seamlessly into many design environments, such The OWC ® as Microsoft FrontPage, Visual InterDev, and Visual Basic. The three display-oriented components (Chart, Pivot Table, and Spreadsheet) each provide powerful functionality for viewing and interacting with data while hosted within Internet Explorer. The OWC offer advanced client-side interaction. They expose several events that can be handled by client-side script. Excel can also manage data binding among the Office Web Components. This means that if you publish a chart, the Spreadsheet component will also be included in the Web page and its data will be bound to the chart so changes made to the data are reflected immediately in the chart. Microsoft, however, has crippled the use of Office Web Components for Web reporting applications with a severe licensing scheme that is not conducive to using this solution for an Internet (or intranet) site. In order to use OWC in a Web application, Microsoft currently requires a license for Office 2000 or later on both the server generating the reports and on the client machine that is used to view the reports, even in cases where the client is viewing static charting images or HTML tables. This makes the generation of reporting rather costly and dangerous, as the Web site administrators have no means for verifying that users receiving output have complied with Microsoft’s licensing requirements. When using OWC for an intranet reporting solution, the corporation must possess an Enterprise license for Office 2000 or later, or must, at least, upgrade all user licenses to Office 2000 (or later) licenses. Again, this can be rather costly. OWC cannot be used at all on the Internet. The Office Web functionality. Components differ greatly from ExcelWriter in their server-side Because they are a collection of four separate controls, they cannot be used to generate a single file with multiple objects. instance, represents a single sheet. The Spreadsheet component, for Multiple sheets cannot be created within the same component and a chart or PivotTable cannot be embedded within that spreadsheet. 41 This becomes a considerable problem when using ASP to create a file and stream it to the client. OWC contains no intrinsic support for ASP. Content cannot be streamed back to the browser, but must be first written to a file on the server’s hard drive, then read and returned to the client. This means that to return a spreadsheet and a chart to the client through ASP, multiple files must first be saved to the Web server’s hard drive, then somehow sent to the client. 1. OWC programming is much This limitation has several implications: more difficult. Unique temporary files must constantly be created and deleted. 2. Security is compromised because IUSR_machinename must have “write” access to the server’s file system. 3. Performance suffers tremendously because data must be written to and read from disk. The Office Web Components bring individual bits of Excel’s functionality to a Web page, but binding them and displaying them programmatically can be exceedingly complex. Also, the end user’s ability to manipulate spreadsheets and charts subset of Excel functionality supported by the Web Components. is limited to the For instance, the user cannot add new series to a chart or add charts to the page to see a different view of the data. In comparison, when ExcelWriter-generated files are streamed to a client machine, they can trigger the opening of an instance of Excel within the browser, offering the full functionality of the Excel application, including saving the workbook as an xls file. means that the user can edit data, reformat cell properties, and rework the This chart representation of the data. ExcelWriter files can be viewed using either Netscape or Internet Explorer browsers. This is not the case with OWC, which, as ActiveX controls, require the use of Internet Explorer 4.0 or later. ExcelWriter generates workbooks that can contain multiple worksheets in true native Excel format (BIFF8, or BIFF7 when required). This is opposed to OWC output that is XML and NOT true native Excel format. In addition, starting with version 3.0, ExcelWriter is able to open and copy complex templates, created directly with Excel, that contain such features as macros, outlines, and VBA. These features can be preserved in the workbooks that it saves or streams. This is not possible when using OWC to generate Web reporting. 42 7 Comparison to Other Alternatives 7.1 CSV Files ExcelWriter generates native Excel files (BIFF8) that contain virtually all of the features and functionality of files created directly with formatting and insertion of charting and images. Excel itself. This includes in-depth ExcelWriter-generated reports can be customized to present a rich and attractive presentation where required. This provides a vast improvement over the generation of simplified CSV files. “Comma Separated Values” files consist of nothing more than pure data that is output with no integral ability to manipulate the presentation of this data in an attractive and approachable format. 7.2 HTML Although generating Web reports as HTML tables certainly allows for a far richer presentation of data than does the generation of CSV files, it still has disadvantages. HTML output is primarily static by nature and requires complex client side scripting in order to provide users with any ability to interact with the data that has been presented to them. If the user wishes to import the data into a client side application such as Excel, itself, they will be forced to cut and paste as required. The data can be saved, but most formatting will be lost. ExcelWriter output is dynamic. The native Excel files (BIFF8) that it outputs can be downloaded and opened directly with Excel. These downloaded files contain all of the requested data along with the rich formatting elements, such as charts, formulas or images, added in the server-side creation of the file. Once the user has the opened Excel file in front of them, they are free to interact with the data and make whatever manipulations they desire. This includes updating data, modifying chart types, adding and deleting rows or columns. 7.3 Crystal Decisions Crystal Decisions allows for the presentation of data in a single proprietary format. It is important to note that with this reporting package, the reports are not output as true, native Excel. Furthermore, exporting capabilities are minimal at best. This reporting package also entails a significant learning curve prior to beginning any development efforts. ASP, C++ and VB developers will find that they are unable to carryover much of their programming knowledge and skills. ExcelWriter, in comparison, provides native Excel files (BIFF8) that are easily exported to Excel and other financial programs capable of working with this format. The object model is highly intuitive and extremely familiar to programmers who have worked with object oriented programming. ASP, C++ and VB developers will have no problem in applying their current skill set to building applications that include ExcelWriter. 43 8 Administration ExcelWriter, which consists of a single server-side DLL, offers ease of administration from the initial configuration installation process, and on the Web extending to server, the through upgrade or the Web application uninstallation process. In addition, for most typical usage scenarios for ExcelWriter, server-side security settings are simple to configure. 8.1 Security Considerations To understand the security of ExcelWriter it is necessary to have background knowledge in IIS and ASP security. In most cases where ExcelWriter is simply being used to stream files to a client machine or to return the resultant spreadsheet to memory, security context is not an issue. This is due to the fact that, in both of these cases, ExcelWriter does not write any intermediate files to the hard disk of the server. Since everything is performed in memory, security considerations are not relevant. The rest of modification generated this to section security spreadsheet deals with settings is special on written the to uses server. the hard of ExcelWriter This disk includes of the that the may case server and involve where the ExcelWriter functionality is used to open that pre-existing spreadsheet in order to extract data or reference image files for inclusion in the newly created spreadsheet in the server’s virtual memory. ASP provides three levels of authentication: • • • Anonymous Basic NT Challenge/Response When a user hits a Web page, the security of the page is verified. If there are no restrictions, such as NTFS permissions, anonymous access is used. When there are NTFS permissions in place, IIS will negotiate with the browser and determine if the user can be authenticated. IIS uses a special NT account, typically called “IUSR_MachineName”, as the default anonymous account. An administrator can change this default account. With IIS3, there was only one anonymous account for the entire server. With IIS 4 or later, it is possible to have different anonymous accounts for each virtual server or Web application on the server. With Basic and NT Challenge/Response, an authentication mechanism is in place that identifies the user who is requesting the page. With either Basic or NT Challenge/Response, IIS/ASP will actually perform an NT login for that specific user. This means that a given page is executing as a specific NT user: either “IUSR_MachineName” or the actual authenticated NT domain user. This technique is known as impersonation and is a standard feature of NT services. 44 This has strong implications for ExcelWriter if you are trying to save the generated spreadsheet on the hard disk of the Web server or to read in data or include images from files stored on the server. When ExcelWriter attempts to create, read or write files, it will be executing in the security context provided by IIS/ASP. If a non-authenticated user is creating a spreadsheet, ExcelWriter will only be able to extract data or include images from files or folders that are accessible to this “IUSR_MachineName” account with, at a minimum, “read” privileges. It will only be able to write the resultant Excel file to a folder on the Web server that has, at a minimum, “write” privileges for this account. If an authenticated user is creating a spreadsheet, ExcelWriter will only be able to write to locations determined by that specific user's NT domain permissions. The same obviously applies to attempts to extract and include data or images as noted above. For more information, see Microsoft KB Article Q207671 (http://support.microsoft.com/directory/article.asp?ID=KB;EN-US;Q207671) 8.2 Configuring IIS ExcelWriter provides, as part of the integral “Save” method, an option to stream its newly generated Excel file to a client machine for viewing or saving locally. This can be in addition to or instead of saving the file to a location on the Web server. When streaming downloaded accomplished file files, ExcelWriter should simply by open using can be further directly in the the configured client “saOpenInPlace” to browser. option in specify This the is that the normally second input parameter of the “Save” method as follows: xlw.Save "report.xls", saOpenInPlace However, due to the diverse types and versions of browsers that are currently in use on prospective recipients’ machines, the browser does not always understand the “ContentType” of the file that it has received. Some browsers, rather than opening the file may, instead, pop up a “File Download” dialog box offering the user the option to launch the file in a new window with Excel. 45 If this behavior is inconvenient for the Web application, then the following method provides a simple “workaround” for browser inconsistencies that should guarantee that the spreadsheet will open directly in the browser window. To apply this workaround, you will need to, 1. Associate Excel's .xls extension with asp.dll when configuring your virtual directory: a. Open the Internet Services Manager. b. Right-click the virtual directory containing your ExcelWriter scripts, and select properties. c. Click Configuration. If the Configuration button is disabled, first click Create. d. Select the App Mappings tab. e. Click Add. f. Browse to select asp.dll, typically in c:\winnt\system32\inetsrv. g. Enter xls in the Extension text box. h. Select "All Verbs." i. j. k. 2. Do not Check "Script Engine." check "Check that file exists." Click Ok. Rename your ExcelWriter scripts with the extension .xls. For example, at the DOS command prompt, enter, "ren xlgen.asp xlgen.xls." do not If you associate the .xls extension with asp.dll within the settings of a virtual directory, save standard Excel spreadsheets in this directory. If you do, ASP will attempt to interpret these Excel spreadsheets as ASP script and will fail. 8.3 Installation / Uninstallation As noted earlier in this document, ExcelWriter can be installed in two ways: by running the automated installation that uses the Microsoft Installer (MSI), or by doing a manual installation. The automated installation is easiest to use and deploy. Simply double-click on the “ExcelWriterVxx.exe” file and follow the InstallShield Wizard instructions. For environments where server administration is strictly controlled, where auto- installers are disallowed, or where the minimal installation is required, the installation of ExcelWriter can be as easy as the simple copying of the ExcelWriter “SAEXCEL.DLL” to a properly secured folder on the server and registering it by means of the ExcelWriter was REGSVR32 utility. The upgrade and the uninstallation procedures are quite simple. If installed with the auto installer, simply use the “Add/Remove Programs” functionality of Windows to documentation unregister and samples. and If remove the ExcelWriter “SAEXCEL.DLL” and was all copied of to its the associated server and manually registered with REGSVR32, simply use this utility to unregister the .dll prior to removing it. Either uninstallation process should always version of ExcelWriter. 46 be employed prior to installing a newer 9 Case Studies 9.1 Manufacturing Company MAJOR MEDICAL MANUFACTURER INCREASES SALES BY IMPROVING CUSTOMER SATISFACTION AND INTERNAL COMMUNICATIONS USING EXCELWRITER OVERVIEW Customer: Major medical equipment manufacturer Hardware and Software: Server: Database: Clients: HP LC2000 NetServer/ Windows NT Server 4.0 Microsoft® Access 2000 150+ Internet Explorer IE 4.0, Windows NT 4.0 Business Situation: This global company needed a cost-effective, scalable, efficient reporting system for tracking and sharing customer information across departments. Solution: The company chose SoftArtisans ExcelWriter to build a dynamic reporting system on the Sales & Marketing intranet site. The server-side solution enabled them to move their system to the Web quickly and easily, and to continue using richly formatted Microsoft Excel spreadsheet and charts. Benefits: • • • • Leverage users' proficiency in Microsoft® Excel. Save months of development time. High performance and scalability. Sales force has critical customer information available 24 hours a day. COMPANY PROFILE The ExcelWriter customer is a worldwide leader in clinical measurement and diagnostic solutions that focuses on high-growth healthcare areas including portable diagnostic and monitoring related equipment, professional out-of-hospital services and support. defibrillators, To meet cardiology their sales products and and marketing objectives, the company required a cost-effective, scalable, efficient reporting system for tracking and sharing customer information across departments. They were effectively collecting hospital equipment inventory and obtaining industry market share information, but needed to improve efficiency in information for use across departments and regions. 47 updating and delivering current SITUATION To bolster a more proactive and targeted approach to their customers, the company realized that if up-to-date inventory and market share data was always available to sales representatives, the sales representatives would gain a better understanding of customers’ present and future needs. By qualifying and improving the sales approach, they could strengthen their leadership position and increase share in the high-growth U.S. market. The company's marketing department sought an affordable, efficient system for delivering current inventory and market share information to their sales force. They intranet track decided site. the The on an project, installed base online named of reporting the their application Competitive own and their for the Information Sales Matrix competitors’ & Marketing (CIM), patient would monitoring, ultrasound, and cardiology equipment at 6,800 U.S. hospitals. The sales tool would encourage more appropriate and useful recommendations to customers. SOLUTION The Best of Both Worlds: Easy for Development and Familiar to End-Users The marketing department’s Web programmer searched for a server-side solution that would provide dynamic reporting and charting functionality. Since the former reports were produced programmer in richly wanted to formatted recreate ® resource-hungry Microsoft Microsoft this Excel standard spreadsheets format on the and Web. charts, the Putting the Excel on the server was not an option; they might have 150 concurrent users and Microsoft Excel was too resource intensive. After considering other Web reporting and charting products, the programmer chose the full version of SoftArtisans ExcelWriter for the CIM project. He cites the following reasons for his decision: • ExcelWriter generates comfortable with native receiving Excel; this the sales information in force Excel was already spreadsheets familiar and and charts so there would be no need for training on new software. • ExcelWriter's high performance and scalability--hundreds of employees could access reports at once. • • ExcelWriter's logic integration for making "smart" spreadsheets. ExcelWriter provided a finished product--the sales force reacts positively to presentation-quality material. • • ExcelWriter was a cost-effective and flexible solution ExcelWriter was simple to use and the help documentation was easy to navigate and well organized. • The company was very pleased with the courteous and responsive service that they received from SoftArtisans sales and technical staff. This manufacturer is known for their dedication to innovative technology. SoftArtisans ExcelWriter was a perfect fit for the business problem at hand. 48 Charting a Course for Success The Web programmer developed the custom, real-time CIM reporting application with SoftArtisans ExcelWriter and some ASP script in a few short months. The inventory information that is collected by customer engineers continues to be entered into the Microsoft Access database. Now the database feeds the server-side application and the information is immediately available to the sales force across the country. The CIM intranet application keeps track of patient monitoring and ultrasound imaging systems and can be researched and understood by several different queries. These include a vendor display, information quantity, is an opportunity organized serial number, at the system display, hospital type, and a market department contact share level: person in display. equipment hospital Customer install date, department, and predominant vendor. The spreadsheets application is and queried charts it are uses the formatted current during data in development. the Access Each database time to the quickly populate the cells. The spreadsheets were designed with conditional formatting—color codes alert the employee to the most promising opportunities and high priorities in their district. Rather than receiving biannual reports, now employees serve themselves current information anytime. The CIM application dynamically presents information to employees function in the ® Microsoft format Excel that they are spreadsheets already and accustomed--richly charts. Sales formatted, representatives can full easily evaluate their local customers to plan an effective strategy. The polished reports do not lose any formatting and function if the user downloads the spreadsheet to the client machine. The sales person can further manipulate the data in Microsoft own machine those hospital for additional purposes--for departments that don't instance, always they have might ® Excel on their provide accessible, a service accurate to inventory records of their own. BENEFITS High Performance and Scalability SoftArtisans ExcelWriter is a scalable, high-performance solution. As the CIM project grows, the company is not limited on the amount of users or the amount of spreadsheets generated. There are no per-user costs with SoftArtisans. The intranet application was designed to strengthen their leadership, enter new areas of the market, and increase market penetration. The application is expected to provide invaluable sales support. It enables representatives to provide superior service, be attentive to customer’s needs and purchasing cycles, and increase business. The CIM application strategy. is The an important system has module been integrated previewed by with the overall marketing and sales was and met marketing with much enthusiasm. The company will measure the success and return on investment by how much the sale force accesses and uses the CIM system. The company anticipates that the improvements in customer service and substantial impact on sales. 49 internal information sharing will have a 9.2 B2B E-commerce Company FAMILIAR EXCEL REPORTS ENABLE PORTUM TO INCREASE B2B WEB APPLICATION ADOPTION RATE AMONG PROCUREMENT MANAGERS SoftArtisans ExcelWriter allows Portum to present data in a format (Excel) that is familiar and easily manipulated by non-technical users of the Portum Auction and Request for Quotes System. OVERVIEW Customer: Portum AG is a neutral B2B intermediary, providing strategic procurement and negotiation solutions for enterprises and marketplaces. Hardware and Software: Server: Database: Clients: Windows 2000 ExcelWriter FileUp SQL Server 2000 Excel 97 Excel 2000 IE4.x+ Netscape 4.0 + Business Situation: Portum needed fast, full function, formatted Excel activity reports generated from the Web without Microsoft Excel installed on the server. The Portum Internet Trading Platform (ITP) combines the Portum Auction Engine and the Portum RfX-Engine with training, a customer care team and integration services. The ITP supports the complete procurement process. It starts with supplier identification, request for information/ quotation, and the online negotiation. In addition, the Portum BidXchange can be used for contract and data transmission. Solution: Portum now uses SoftArtisans ExcelWriter as part of the Portum Internet Trading Platform hosted on their Extranet. This application is one of Portum’s main product offerings. ExcelWriter is used to generate the activity reports for procurement managers who use Portum’s product. Because most procurement managers have been using Excel for years, ExcelWriter’s ability to generate native Excel workbooks is a major benefit of the application. Benefits: • • • • • Complete Excel-generating application development in one month. Enable procurement organizations to interact with suppliers in real time, increase the competition, and reduce product costs. Standardize and automate routine procedures. Reduce time required for negotiations and contract awarding. Enable procurement managers to make targeted and objective purchasing decisions. 50 COMPANY PROFILE Portum is Europe’s leading neutral intermediary and provider for strategic sourcing and negotiation solutions for enterprises and marketplaces. Through a combination of easyto-use while consulting buyers state-of-the-art and and business sellers in Internet-based services, the Portum strategic applications increases sourcing and and the tailor-made performance procurement first-class of process. industrial The product offering includes online auctions and Internet based request-for-quotations (RFQs). SITUATION Portum’s reports product to users usually procurement are managers procurement managers. Portum delivers activity through Web. activity reports include the The complex formulas and formatting—and could be accessed by thousands of concurrent users. Because of the wide use of Microsoft Excel among procurement managers, Portum decided that their Web application should generate activity reports in Microsoft Excel format. Many procurement managers are not familiar with the technical part of Internet business transaction methods, but would be comfortable using Excel. SOLUTION Portum included considered Crystal ExcelWriter. several techniques Reports, ExcelWriter Microsoft was the only of generating Office Web solution that Excel on a Components, provided a Web server. and means These SoftArtisans for fast, full- function dynamic native Excel reports with licensing freedom and high performance for thousands of concurrent users. For the past seven months, Portum has been using SoftArtisans ExcelWriter as part of the Portum Internet Trading Platform (ITP) hosted on the Portum Extranet. ITP is one of the main product offerings of Portum and is critical to their business. SoftArtisans ExcelWriter is used to generate the activity reports for procurement managers who use Portum’s product. Portum believes that the ability to generate activity reports in fullfunction native Excel contributes to the adoption of their Web solution. Most procurement managers have been using Excel for years. Each day, the Portum ITP solution generates an estimate of 200 different reports for more than 5,000 suppliers across the globe in various industries. The reports are streamed to users’ client machines via a browser, into Excel. The activity reports that Portum generates with ExcelWriter are sometimes 50-sheet workbooks. Some of the Excel features that the activity reports use include advanced Excel formatting—font, cell, colors etc. ExcelWriter exposes the most Generation of reports is fast and consumes common Excel objects minimal server and functions. resources. Portum has ExcelWriter running on three servers. Portum is also using SoftArtisans FileUp product in order to upload auction documents. BENEFITS Easy-to-use Web Application Increases Portum Product Adoptions Because of users’ familiarity with Excel, SoftArtisans ExcelWriter contributes to the overall adoption and success of the Portum ITP product. Customers can access activity reports via the Portum extranet any time. 51 There is no need for users of the Portum ITP solution to be trained on new software— they have been using Excel for years and prefer to receive activity reports in this familiar format. Simplified, Accelerated Development With SoftArtisans ExcelWriter, Portum was able to build this functionality into their application within only a month of one developer’s time. SoftArtisans customer service and support have impressed them. “We are very pleased with the close--almost personal--support provided us during the early period of adoption. We are especially grateful for assistance given us when we encountered some difficulties supporting generated Excel files in different languages. Within two days, we were able to obtain a fix from a very helpful Technical Support person from SoftArtisans.” - Arial Sagum, Web Project Manager, Portum AG 52 9.3 Destination Hardware Sales and Manufacturing Company YAKIMA WEB TEAM CUTS REPORTING DEVELOPMENT TIME BY 75% USING SOFTARTISANS EXCELWRITER OVERVIEW Customer: Yakima Products Arcata, CA Hardware and Software: Server: Database: Client: Windows 2000 SQL Server 2000 Excel 97, 2000, XP IE and Netscape Business Situation: Yakima's Fit Team needed a cost-effective, efficient Web reporting system that would allow them to quickly access modify and share reports in the familiar Microsoft Excel format. Solution: Yakima used SoftArtisans ExcelWriter to build a dynamic reporting system for their Intranet. Their new reporting solution enabled the Fit Team to have a self-service reporting application without having Microsoft Excel or space-intensive files sitting on the server. Benefits: • • • • Saved weeks of in-house development time High user satisfaction due to familiar, flexible, easy to use Microsoft Excel format Reporting system is self-service and is available to users 24 hours a day High performance and scalable system COMPANY PROFILE Yakima builds the highest quality products for the enthusiast heading out to their favorite outdoor destination. For years, Yakima has been known as a rack company, but their thirst for new products has helped them grow into a Destination Hardware™ company. All of Yakima's products incorporate characteristics that define the company: security and a playful attitude. 53 SITUATION At Yakima, the Fit Team is charged with assuring there is a Yakima rack product that fits every make and model of vehicle. In order to accomplish this, the team must access a mass of data about vehicles and about their own products. The team originally entered all of their data into Excel manually, which was very time consuming. In an attempt to make the Fit Team's reporting more efficient and manageable, Yakima's Web Development team tried to create a solution in Web format, but viewing the data in HTML did not meet the reporting needs of the Fit Team. The team needed to manipulate the data to make it useful, so they were forced to cut and paste the data from the HTML format into Excel, which is a very messy and time consuming process, during which formatting is lost. Yakima needed a better way to provide a link between the data on their server and a familiar and flexible presentation format for the enduser. SOLUTION Yakima looked at several possible solutions to solve their reporting problem. One option was a large reporting product, which was very expensive and provided many extraneous features that Yakima would never use. Then, the development team tried to make use of macros to pull the data into Excel, but due to the complicated masses of data involved in the Fit Team Reports project, macros were not an optimal solution. After a comprehensive evaluation period, Yakima purchased ExcelWriter. The development team was impressed with the online documentation; ease of application development and by the personal support that backs every SoftArtisans product. They found that it was easy to integrate their existing database with ExcelWriter in order to produce with. the The flexible Fit Excel Team output users that their appreciated end-users the were one-click accustomed to fully to working formatted, easily customized, native Excel spreadsheets. BENEFITS SoftArtisans proved development team to be was a able very to reliable pull large solution from quantities of the very first complicated report. data from The their database and create robust, fully editable Excel reports. The Web Team at Yakima, consisting of one developer/manager and one full-time developer, estimated that the Fit List Reports project would take two developer-weeks to complete. With ExcelWriter, it only took the team two to three development days to complete the project. With the time and development ExcelWriter tool paid resources for itself. that Yakima Yakima saved plans to in use their very first ExcelWriter for project, many the other projects. The high-performance, multi-threaded ExcelWriter dynamic link library (DLL) allowed Yakima to save space and to ensure reliability on their production server. They have found that ExcelWriter serves native Excel reports with charting, formatting and formulas quickly and efficiently. The CodeWizard, included with ExcelWriter, also helped Yakima in their development. It allowed them to take existing Excel spreadsheets and create ASP code needed for their ExcelWriter formatting that application. the Fit Team Not had only did this allow already put into accelerated the development process. 54 them past to Excel capture reports, the but existing it also Now that the Fit Team Reports project is completed and other teams within Yakima have seen how fast and easy the reporting process is, they are asking the development team to create ExcelWriter applications for their departments. For Yakima, SoftArtisans ExcelWriter is the Web reporting solution of choice. Yakima Web Application With and Without ExcelWriter ExcelWriter Time to Complete Without ExcelWriter 2.5 Development Days (Resulting 10 Development Days (Resulting in in dynamic Microsoft Excel reports) static HTML reports) Development Cost (Dev. Days * 2 Developers * Industry Avg. $2,000 Salary) Report Format Flexibility All Microsoft Excel functionality $8,000 Inflexible HTML format "ExcelWriter allows any type of data to be displayed countless ways due to the flexibility of Excel being the output. Finally, database information can be arranged in an exciting and fresh way that doesn't require a lot of development time." —Tyler Thompson, Web Systems Manager, Yakima “ExcelWriter saved a lot of time because it allowed us [Web developers] to create a report quickly that was easily manageable by the end user. No longer did we have to create preformatted static Web-based reports, but instead were able to create dynamic and ever-changing Excel files.” — Brett McKinney, Web Programmer, Yakima 55 10 Performance 10.1 Benchmarks ExcelWriter Object (V2) versus Excel Object Office 2000 CRITERIA: Test variables: • • • Number of files Number of rows Number of columns Process: • • • • • Start time is recorded Iteration starts Files created based on number of files, rows and columns specified At the end of the iteration the time is recorded, equated from start time Created files are kept in folder relational to application Characteristics: • • • Two sheets per file One font per sheet applied Italic, Bold and Horizontal alignment applied to first sheet Two Styles (objects) are used with ExcelWriter. Within the styles, the font and other characteristics are applied. The style is assigned after the value is set to the cell. When creating spreadsheets using the Excel object, the font and characteristics are applied after the value is set to the cell. NOTE: HARDWARE: • • • • Operating system: Windows 2000 Server SP1 Processors: 2 x 700Mhz Memory: 128 Megs Make: Dell PowerEdge 1300 56 TEST RESULTS: Number of Files: 25 Number of Rows: 50 Number of Columns: 50 ExcelWriter: Time elapsed: Excel object: Time elapsed: Results: 9 seconds 16 min 24 seconds ExcelWriter is over 100 times faster than the Excel Object. 10.2 Scalability ExcelWriter consists of a single "SAEXCEL.DLL" installed on the server that is used to generate Excel reports. ExcelWriter is a high-performance, multi-threaded COM object built for serving thousands of concurrent users on a single server. 10.3 Performance Limitations 10.3.1 ExcelWriter LE In ExcelWriterLE, a maximum limit of 200 new workbooks can be generated during the twenty-four hour period that commences with the creation of the first spreadsheet. With subsequent requests for new spreadsheets, ExcelWriter will display a message that advises that the daily usage limit has been reached. The counter will be reset at the conclusion of this period. This limitation does not exist in the Server edition. 10.3.2 ExcelWriter Developer As noted earlier, both the ExcelWriter Developer and the ExcelWriterLE Developer versions offer the full capabilities of the corresponding ExcelWriter Server and ExcelWriterLE versions with one important exception: Developer versions are singlethreaded models and as such cannot process more than a single report request at one time. This is typical of the development environment and should not pose a problem unless stress testing is required. (In this case, it is possible to secure a full-functional multi-threaded evaluation version by contacting sales@softartisans.com) 10.3.3 ASP Threading Although ExcelWriter is capable of handling large numbers of concurrent requests for report generation, the ASP threading model that is part of IIS is still subject to the limitations. If the Web application that includes the ExcelWriter object is running on an IIS 4 server, the default (“AspProcessorThreadMax”) setting for the ASP set to is maximum a default number value of of “10”. available With IIS threads 5, the default setting is “25”. It’s important to understand that this setting can dramatically influence the scalability of Web applications, and the performance of the server in general. Since it defines the maximum number of ASP requests that can execute simultaneously, it can inhibit the performance of ExcelWriter, when used in high volume applications. 57 . If required, the value of “AspProcessorThreadMax” setting can be increased This will allow the server to create more threads to handle more concurrent requests. (Please note: If this metabase property is changed, the Web server instance must be stopped and restarted in order for the change to take effect.) Details on this setting are available at: http://msdn.microsoft.com/library/default.asp?url=/library/enus/iisref/html/psdk/asp/apro0blk.asp. 10.4 Improving Performance There are some important pointers to be aware of when attempting to maximize the performance of ExcelWriter in creating Excel files. 10.4.1 Using Styles Microsoft unique Excel formats includes contains and an styles upper limit available to 4096 of an 16 built-in and six default formats. on individual the total Excel combined File. This This further reduces to number "cap" 4074 of of 4096 the available number of total combined formats and styles available to the developer formatting an Excel file with ExcelWriter. ExcelWriter itself poses no such limitations in the creation process. It allows the creation of Excel files that can contain unlimited numbers of unique formatting. Since ExcelWriter output can be richer than Microsoft Excel is capable of reading, a common error that developers may experience when attempting to open ExcelWriter generated files with Microsoft Excel is as follows: SoftArtisans.ExcelWriter.1 error '80020009' Number of formats has exceeded Excel's limit Because of this Excel limitation, it is imperative that, when using ExcelWriter to format a native Excel understanding file of on the the fly with server-side repercussions of ASP choosing code, to the employ developer has "Cells.Format" a clear versus "Cells.Style". Attempting to format large numbers of cells by applying “Cells.Format” via looping often causes the error above, as the following sample illustrates: <% '--- Convert Recordset output to Spreadsheet input and '--- Import the data in one step, pasting from cell (2,1) with the headers appearing ‘--- in row 2 FirstRow = 2 FirstCol = 1 NumRows = cells.CopyFromRecordset(oRs, True, FirstRow, FirstCol) '--- Format, on a cell by cell basis, all rows in column 1 to "text" and all rows in '--- column 2 to "currency" 58 For r = FirstRow +1 to NumRows +2 ‘--- This value formats a cell as text ws.cells(r, FirstCol).Format.Number = 49 ‘--- This value formats a cell as currency ws.cells(r, FirstCol +1).Format.Number = 7 next %> By employing this formatting method, you will use up the pool of available formats quickly since the application of format to each cell counts as a unique instance of a format. When Excel files are created directly with Excel, the application of formatting is subject to a built-in optimization process. That makes a comparison of included formats and removes identical format objects. ExcelWriter currently does not include this same optimization technique. Currently, to avoid bumping up against this format limit, it is suggested that ".Style" be used in place of ".Format" wherever possible when applying formats to more than a single cell. A single custom style can be created and then applied to an entire row or column instance of cells of by means formatting of looping. when This considered unique style toward will the then total count as available a single pool of formats/styles. Here is a reworking of the previous formatting sample to employ a custom "TextStyle" and "CurrencyStyle" to format multiple cells: <% '--- Convert Recordset output to Spreadsheet input '--- Import the data in one step, pasting from cell (2,1) ‘--- with the headers appearing in row 2 FirstRow = 2 FirstCol = 1 NumRows = cells.CopyFromRecordset(oRs, True, FirstRow, FirstCol) '--- Create a custom Font to be used in formatting the worksheet Set Font1 = XLW.CreateFont Font1.name = "Times New Roman" Font1.size = 10 '--- Create a custom "TextStyle" which will format ‘--- cells as "text" Set TextStyle = XLW.CreateStyle TextStyle.Number = 49 TextStyle.Font = Font1 '--- Create a custom "CurrencyStyle" which will format ‘--- cells as "Currency" Set CurrencyStyle = XLW.CreateStyle CurrencyStyle.Number = 7 CurrencyStyle.Font = Font1 59 '--- Use looping to apply the custom styles ‘--- rows in column 1 and column 2 For r = FirstRow +1 to NumRows +2 ‘--- This value formats a cell ws.cells(r, FirstCol).Style = ‘--- This value formats a cell ws.cells(r, FirstCol +1).Style Next %> Please note: If you change any properties of your to all as text TextStyle as currency = CurrencyStyle custom style after making application of this style, all cells formatted with this style in your worksheet will be changed accordingly. Figure 4: Resulting spreadsheet for Style sample 60 10.4.2 Use CopyFromRecordSet or GetDataFromRecordset With ExcelWriter, ADO can be used to return a recordset from a datasource and the included field values and headers (optional) can then be imported into the Excel file that is being created. In cases where the recordset contains a rectangular block of data that could simply be pasted into the worksheet as it comes from the database, consider the following: ExcelWriter offers two very important one-step methods for copying a block of data held in the recordset object and pasting it to a specific location in the worksheet that is being built up in virtual memory on the server. The first method: worksheet, “CopyFromRecordset” including field headers is used (unless to import otherwise the recordset specified), and into to the return “NumRows”, the total number of rows that were imported. This “NumRows” value is extremely useful for such purposes as moving around the virtual worksheet in order to apply formatting to all data-filled cells in a column or locating the row that follows the end of the recordset so that formulas can be inserted as totals. “CopyFromRecordset” is used as follows: NumRows = cells.CopyFromRecordset(ADO-RecordSet, [ShowHeaders (True/False)][FirstRow], [FirstColumn], [MaxRows], [MaxColumns]) The first parameter contains a pointer to the recordset object that has been returned via ADO. This is the only required parameter. The Recordset’s Field headers will be imported unless “False” is added as a second parameter (the default is “True”). The next four optional parameters are used to specify the exact location to where the imported data will be pasted as well as how may rows and columns of data will be imported. The second method: “GetDataFromRecordset” is almost identical to the above method with one important exception. This method returns a “Range” object instead of a variable that relates the number of records returned. This “Range” object can then be auto-formatted for column width using the “Range.AutoFitWidth” method so that each column will be correctly adjusted to fit the data that is contained in the cells in that column. “GetDataFromRecordset” is used as follows: Range = cells.GetDataFromRecordset(ADO-RecordSet, [ShowFieldNames (True/False)][FirstRow], [FirstColumn], [MaxRows], [MaxColumns]) As with the previous method, the first parameter contains a pointer to the Recordset Object that Recordset’s has Field been returned headers will via be ADO. This imported is the unless only required “False” is parameter. added as a The second parameter (the default is “True”). The next four parameters are “CopyFromRecordset” method. the same as the optional parameters in the They are used to specify the exact location to where the imported data will be pasted as well as how may rows and columns of data will be imported. 61 11 Technical Support SoftArtisans Technical Services team and resources are among the best in the industry. Contact SoftArtisans by e-mail or telephone: • Send e-mail to support@softartisans.com. Each incoming e-mail is assigned a unique tracking number. • By telephone: In the U.S. call toll-free 1-877-SOFTART (763-8278), and press “3” for Technical Support. Outside the U.S., call +1-617-738-0777, and press “3” for Technical Support. We are able to solve your problem more rapidly if you submit the following information with your problem report: • The name of your product (e.g., SoftArtisans ExcelWriter) • The exact version of the DLL (e.g., saexcelwriter.dll) • The exact version of the ASP.DLL • The exact version of the operating system and browser on client machine(s). • The exact version of the operating system and IIS that are running on the server, including any service packs. • The ASP scripts that you are using including both the form and the form processing scripts, if they are in separate files. • The exact error message that is received. • A description of the exact nature of the problem, including when in the process that the problem occurs. • Are you running samples or your own code? • Your order number, if you have one. Free Support Our dedicated and quick responding support team is happy to answer your e-mail and telephone inquiries on an as-available basis. Support is usually able to respond in less than one or two days, however there is paid, guaranteed priority support if you have an urgent issue. 11.1 Pre-sales Support Our sales engineers are eager to provide sales consultations to help you determine which ExcelWriter solution is right for you and get you started on your evaluation of the product. ExcelWriterFree is available for download on the SoftArtisans Web site. If you would like to evaluate a full version of ExcelWriter, please contact sales@softartisans.com and we will be happy to provide the full evaluation for you. 62 11.2 Maintenance Program ExcelWriter ExcelWriter ExcelWriter priority annual maintenance customers. releases support for Annual one incidents program year with is now maintenance a from available includes maintenance guaranteed to our free purchase response existing major date within one and new upgrades and on three business (3) day. ExcelWriter annual maintenance cost is 20% of the product list price. For example: • If you purchased an ExcelWriter 1.0 server license, the cost for annual maintenance would be $999. • If you purchased a 1-CPU ExcelWriter server license, the cost for annual ExcelWriter server license, the cost for annual maintenance would be $500. • If you purchased a 4-CPU maintenance would be $2,000. Please contact SoftArtisans today! By e-mail: sales@softartisans.com or telephone: 877-SOFTART or 617-738-0777. 11.3 Two-hour Priority Support Incident For each within purchased two business two-hour hours of support placing incident, your call SoftArtisans or sending guarantees your e-mail. a response There is no guarantee that we will be able to provide an immediate resolution of your problem, but we will work on it until we can come to a conclusion. We will always provide you an expected date to issue you a patch if necessary. You may purchase a two-hour priority support incident at http://www.softartisans.com/softartisans/tecsup.html 11.4 24-hour Priority Support Incident For each within purchased one business 24-hour day of support placing incident, your call SoftArtisans or sending guarantees your e-mail. a response There is no guarantee that we will be able to provide an immediate resolution of your problem, but we will work on it until we can come to a conclusion. You may purchase a 24-hour priority support incident at http://www.softartisans.com/softartisans/tecsup.html 11.5 Support Hours SoftArtisans Technical Support hours are Monday through Thursday 9:00 a.m. to 5:30 p.m., and Friday 9:00 a.m. to 4:30 p.m. Eastern Time (GMT-5 hours) 63 11.6 Self-help Support Many questions are quickly answered with SoftArtisans comprehensive support http://support.softartisans.com/. There you will find SoftArtisans products site, latest documentation, an extensive knowledge base, and frequently asked questions. 11.7 Peer-supported Discussion List Join the SoftArtisans Peer Supported Discussion List for ExcelWriter! http://discuss.softartisans.com/archives/xlw-l.html SoftArtisans offers product-specific peer support discussion lists as a great resource while you are evaluating software or developing your application. Get help from other developers using SoftArtisans ExcelWriter. This list is monitored, but not edited or reviewed, by SoftArtisans Technical Staff. SoftArtisans Technical Support will help out on an as available basis. The names of the subscribers of this list are kept confidential. 11.8 SoftArtisans Consulting Services Our skilled Web developers can assist you in developing applications that use SoftArtisans components. Our consulting service takes full of advantage of our expertise and can save you valuable time and resources. Technical representatives will provide the following services for licensed or presales customers developing Web applications for the Windows/IIS platform with ASP, ASP.NET and VB. Scope of Consulting Services For an hourly fee, SoftArtisans can provide consulting and development services for Web applications that use SoftArtisans products: • Debug any part of an application. • Write sections of code for use in a Web application. • Write entire Web applications. • Provide in-depth consultation on Windows administration and security. Please contact SoftArtisans Technical Support and Services to discuss your project: By e-mail: consulting@softartisans.com By telephone: In the U.S., call toll-free 1-877-SOFTART (763-8278), and press "3" for technical services. Outside the U.S., call +1-617-738-0777, and press "3" for technical services. 64 12 For More Information 12.1 SoftArtisans Web Sites 12.1.1 Main ExcelWriter Page The main ExcelWriter page can be found at: http://www.softartisans.com/excelwriter.html 12.1.2 News and Announcements SoftArtisans maintains a monthly newsletter detailing new versions, tips, tricks and special promotions. The newsletter can be found at http://discuss.softartisans.com/archives/newsletter.html Subscribe by sending an email message to listserv@discuss.softartisans.com with the following command in the BODY of your email message: SUB NEWSLETTER There is also a separate mailing list specific to ExcelWriter announcements that can be found at: http://discuss.softartisans.com/archives/excelwriter-ann.html 12.1.3 Support Site Self-service technical support, including a searchable knowledge base and Frequently Asked Questions (FAQ) can be found at: http://support.softartisans.com/ 12.1.4 Demo Site SoftArtisans maintains a comprehensive live demo site. It is regularly updated with new and interesting samples. All the source code to the live demos can be downloaded as well: http://demo.softartisans.com/ 12.1.5 Discussion Lists In addition to technical support provided by SoftArtisans, there is a peer-supported discussion list for ExcelWriter technical issues: http://discuss.softartisans.com/archives/xlw-l.html 65 12.2 Excel on the Web 12.2.1 Microsoft Excel Web Site http://www.microsoft.com/office/excel/default.htm 12.2.2 EXCEL-L Discussion List Excel Developer's Mailing List http://eva.dc.lsoft.com/archives/excel-l.html 12.3 ASP Sites 4 Guys from Rolla http://www.4guysfromrolla.com/ Wrox’s ASPToday http://www.asptoday.com/ 66 13 Other Products from SoftArtisans If you are new to SoftArtisans (http://www.softartisans.com/), you may be interested in some of our other Web server controls. SOFTARTISANS ASPSTUDIO Power Pack of Active Server Controls SoftArtisans ASPstudio is the best-selling value pack of powerful server controls designed for rapid Web application development and deployment. This comprehensive Web developers package combines the industry's most popular and powerful controls into a complete solution-at a tremendous saving. The ASP Guild International recognized ASPstudio with the prestigious Top Tool 2000 award. ASPstudio provides the simplest and fastest means to producing robust scalable Web applications. Quick development return on cycles, increased investment. This productivity, suite includes and the lower highest costs provide quality an controls immediate to help you manage all the functionality you need--file transfers, transactional file management, system administration, data validation, and Web-based email. Along with the excellent product documentation and an extensive knowledge base, a dedicated and quick- responding technical team supports ASPstudio products. All SoftArtisans products are backed with a 30-day guarantee and all minor releases are free. ASPstudio includes the following SoftArtisans components: • • • • • • • • SoftArtisans FileUp SoftArtisans JFile SoftArtisans XFile SoftArtisans Check SoftArtisans FileManagerTX , the standard in file upload and secure download. , for Java-based file uploads and downloads. , for ActiveX file uploads and downloads. , for complete form validation. SoftArtisans Admin SoftArtisans Archive SoftArtisans FileManager SoftArtisans SMTPmail SoftArtisans ImgWriter , for transactional file management. for NT system administration. , for creating and extracting ZIP and CAB archives. , providing all of your file management needs in a single, easy-to-use component. • • to send e-mail from any client. for image processing, creation, management and caching. SOFTARTISANS FILETRANSFER BUNDLE • SoftArtisans FileUp • SoftArtisans JFile • SoftArtisans XFile SOFTARTISANS .NET INITIATIVE SoftArtisans POP3 for .NET SoftArtisans TreeView for .NET includes the following components: , the standard in file upload and secure download. , for Java-based file uploads and downloads. , for ActiveX file uploads and downloads. : • • to retrieve e-mail from any POP3 server to easily navigate your .NET Web site For more information about SoftArtisans ExcelWriter, ASPstudio, or .NET products, visit the SoftArtisans Web site at http://www.softartisans.com/. 67 www.softartisans.com 1330 Beacon Street, Suite 400 Brookline, MA 02446 Toll Free (US only): 1(877)SOFTART - International: 1(617)738-0777 - Fax: 1(617)738-6278