TweetFollow Us on Twitter

Introduction to Scripting Microsoft Excel

Volume Number: 23 (2007)
Issue Number: 02
Column Tag: AppleScript Essentials

Introduction to Scripting Microsoft Excel

by Benjamin S. Waldie

With Office 2008 on the horizon, Microsoft has recently begun to push AppleScript as an alternative automation technology to Visual Basic macros in the Office applications. Moving forward, Visual Basic macros will not be supported in the release of Office 2008. Current AppleScript users are ahead of the curve. The Office applications have been AppleScriptable for quite some time, and AppleScript actually provides several advantages over Visual Basic. For one, AppleScripts can interact with multiple applications, including non-Microsoft applications, allowing even complex multi-application workflows to be automated.

Last month, we began discussing how to get started with scripting Microsoft Word. We explored various techniques for interacting with Word documents, as well as the content within those documents, all using AppleScript. This month, we're going to begin discussing another Office application, Microsoft Excel. Like Word, Excel contains a quite extensive AppleScript dictionary, allowing almost any task that can be performed manually to be automated using AppleScript.

Please note, all example code within this month's column was written and tested with Excel 2004 (version 11.x). If you are using another version of Excel, please be aware that the terminology may need to be adjusted in order to function properly. Let's get started.

Working with Workbooks

In Excel, the top-level class (beneath the application class) with which you will probably want to interact is a workbook. A workbook will contain one or more sheets, and those sheets will typically contain ranges of data. This data can be text, numbers, dates, and so forth. We will discuss each of these primary classes of Excel objects in this month's column, but we will begin with the workbook class.

Making a Workbook

Creating a workbook in Excel is similar to the process of creating a document in Word, or in many scriptable applications, for that matter. To do so, use the make command, as demonstrated below.

tell application "Microsoft Excel"
   make new workbook
end tell
--> workbook "Sheet1" of application "Microsoft Excel"

The make command's result will be a reference to the newly created workbook, which may be placed into an AppleScript variable, if desired, for future reference in your script.

Closing a Workbook

Closing a workbook is also very similar to closing a document in other scriptable applications. Use the close command, referencing the workbook you wish to close. Optionally, you may choose to specify whether the workbook should be saved during the close process, using the optional saving parameter. For example:

tell application "Microsoft Excel"
   close workbook 1 saving no
end tell

Opening a Workbook

To open a workbook, use the open command, followed by a reference to the workbook file you want to open. For example:

set theWorkbookFile to choose file with prompt "Please select an Excel workbook file:"
tell application "Microsoft Excel"
   open theWorkbookFile
end tell

One issue with the open command is that, unfortunately, it does not return a result. Therefore, if you want to perform further processing on the newly opened document, you will need to build a reference to it in another manner. One way to do this is to retrieve the workbook file's name, and then construct a reference to the workbook using that name, once it has been opened. This is demonstrated in the example code below.

set theWorkbookFile to choose file with prompt "Please select an Excel workbook file:"
set theWorkbookName to name of (info for theWorkbookFile)
tell application "Microsoft Excel"
   open theWorkbookFile
   set theWorkbook to workbook theWorkbookName
end tell
--> workbook "My Workbook.xls" of application "Microsoft Excel"

Another way that this can be achieved is by referencing the active workbook property of Excel's application class, once the workbook has been opened. This property references the currently active workbook, which should be the newly opened document.

set theWorkbookFile to choose file with prompt "Please select an Excel workbook file:"
set theWorkbookName to name of (info for theWorkbookFile)
tell application "Microsoft Excel"
   open theWorkbookFile
   set theWorkbook to active workbook
end tell
--> active workbook of application "Microsoft Excel"

When referencing the active workbook property, one thing to keep in mind is that, if another workbook is brought to the front, then your script may reference the incorrect workbook. Because of this, it is recommended to reference workbooks by name.

Saving a Workbook

To save an opened workbook to its existing path, use the save command, referencing the workbook to be saved. For example, the following code will save the currently active workbook to its current path.

tell application "Microsoft Excel"
   save active workbook
end tell

Excel also has a save workbook as command, which may be used to save a workbook into a new location, or in a different file format. The following example code makes use of this command, as well as some of its optional parameters, in order to save the currently active workbook to the desktop in comma separated format.

set theOutputPath to (path to desktop folder as string) & "My Saved Workbook.csv"
tell application "Microsoft Excel"
   tell active workbook
      save workbook as filename theOutputPath file format CSV file format
   end tell
end tell

Take some time to explore some of the other optional parameters for the save workbook as command, as well as some of the other available file formats, which can be found in Excel's AppleScript dictionary.

Working with Sheets

As previously mentioned, a workbook itself does not contain data in Excel. Rather, a workbook contains sheets, which contain the data. Most often, you will find yourself writing a script that will interact with a worksheet, a specific type of sheet in Excel. That's what we will be discussing here. Another type of sheet, which we will not discuss at this time, is a chart sheet.

Making a Worksheet

Like a workbook, a worksheet is created by using the make command. When using this command, be sure to specify a location for the new worksheet to be created, such as beginning, end, before worksheet 1, and so forth. For example, this code will create a new worksheet at the end of the existing worksheets within the currently active workbook.

tell application "Microsoft Excel"
   tell active workbook
      make new worksheet at end
   end tell
end tell
--> sheet "Sheet2" of active workbook of application "Microsoft Excel"

Selecting a Worksheet

At times, you may want to navigate to a specific worksheet in an Excel workbook. To do this, use the activate object command, and target the worksheet that you want to be displayed. For example:

tell application "Microsoft Excel"
   tell active workbook
      activate object worksheet "Sheet1"
   end tell
end tell

Working with Data

In an Excel worksheet, data is contained within cells, which are organized into rows and columns. Cells can be accessed by referencing the cell, row, column, or range class.

The Cell Class

To access a specific cell, use the cell class. For example, the following code references the first cell of a worksheet, found in column A, row 1.

tell application "Microsoft Excel"
   tell worksheet "Sheet1" of active workbook
      cell "A1"
   end tell
end tell
--> cell "A1" of worksheet "Sheet1" of active workbook of application "Microsoft Excel" 

The Row Class

To access an entire row of cells, use the row class. For example, the following code references the first row of cells in a worksheet.

tell application "Microsoft Excel"
   tell worksheet "Sheet1" of active workbook
      row 1
   end tell
end tell
--> row "$1:$1" of worksheet "Sheet1" of active workbook of application "Microsoft Excel"

The Column Class

To access an entire column of cells, use the column class. For example, the following code references the first column of cells in a worksheet.

tell application "Microsoft Excel"
   tell worksheet "Sheet1" of active workbook
      column 1
   end tell
end tell
--> column "$A:$A" of worksheet "Sheet1" of active workbook of application "Microsoft Excel"

The Range Class

Regardless of how you reference cells within a worksheet, you are really referencing what is known as a range. A range refers to either a single cell, or multiple cells within a worksheet, and the cell, row, and column classes all inherit the properties of the range class. There are numerous ways to directly reference a range. The following are some examples.

This code demonstrates how to reference a range that represents a single cell in a worksheet, in this case, the first cell in the first row, i.e. the intersection of column 1 and row 1.

tell application "Microsoft Excel"
   tell worksheet "Sheet1" of active workbook
      range "A1"
   end tell
end tell
--> cell "A1" of worksheet "Sheet1" of active workbook of application "Microsoft Excel"

This next example demonstrates how to reference a range that represents multiple cells within a worksheet, in this case, cells 2 through 5 of the first two rows.

tell application "Microsoft Excel"
   tell worksheet "Sheet1" of active workbook
       range "B1:F2"
   end tell
end tell
--> range "B1:F2" of worksheet "Sheet1" of active workbook of application "Microsoft Excel"

Again, there are numerous ways to reference a range of cells, and Excel is pretty flexible. For a chart that outlines different methods, take a look at the AppleScript Reference Guide for Excel, mentioned later in this column.

The Used Range

In some cases, you may not know specifically which range you want to reference. For example, you may just want to reference all of the data contained within a specified worksheet. To do this, you can reference the used range property of the worksheet.

tell application "Microsoft Excel"
   tell worksheet "Sheet1" of active workbook
      used range
   end tell
end tell
--> used range of active sheet of active workbook ¬
of application "Microsoft Excel"

Properties of Ranges

We have discussed numerous ways to reference ranges of cells in Excel. However, what can you do with a range once you have constructed a reference to it? Well, one thing you can do is access its properties. Ranges have numerous properties, but perhaps the two that you may find most useful are the value and formula properties.

By referencing the value property of a range, you can retrieve the value of a specified set of cells in a worksheet. For example, the following code retrieves the values of the used range in a specified worksheet. Notice that the value is returned as a list of lists. Each list represents a row, and each list item represents a cell.

tell application "Microsoft Excel"
   tell worksheet "Sheet1" of active workbook
      value of used range
   end tell
end tell
--> {{1.0, 2.0, 3.0}, {4.0, 5.0, 6.0}}

The formula property of a range returns a similar result. For example:

tell application "Microsoft Excel"
   tell worksheet "Sheet1" of active workbook
      formula of used range
   end tell
end tell
--> {{"1", "2", "3"}, {"4", "5", "6"}}

Of course, these properties are not read-only properties. So, it is also possible to modify them, if desired. For example, the following code demonstrates how to set the value of a single cell.

tell application "Microsoft Excel"
   tell worksheet "Sheet1" of active workbook
      set value of cell "A1" to "A"
   end tell
end tell
Likewise, the following code will set the value of a range of cells.
tell application "Microsoft Excel"
   tell worksheet "Sheet1" of active workbook
      set value of range "A1:C2" to {{"a", "b", "c"}, {"d", "e", "f"}}
   end tell
end tell

Pulling Things Together

Now, let's take a brief look at some sample code that makes use of several of the topics that we have discussed throughout this month's column. The following example code will retrieve the names of any visible items on the desktop. It will then create a workbook, and insert the list of item names into the active worksheet.

— Retrieve a list of items on the desktop
set theFileNames to list folder (path to desktop) without invisibles
— Convert the list of items to a list of lists
repeat with a from 1 to length of theFileNames
   set item a of theFileNames to {item a of theFileNames}
end repeat
— Build a new workbook in Excel, and add the data to the current worksheet
tell application "Microsoft Excel"
   set theWorkbook to make new workbook
   tell active sheet of theWorkbook
      set value of range ("A1:A" & (length of theFileNames)) to theFileNames
   end tell
end tell

In Closing

It may seem like we've only scratched the surface of scripting Excel, and we have. As mentioned at the beginning of this month's column, Excel contains quite an extensive AppleScript dictionary, and there is a lot that you can do with it from a scripting perspective. However, using the techniques we have discussed in this month's column, you should be able to piece together a script that can construct a workbook, create a worksheet, retrieve data from a range of cells in a worksheet, and more.

For more information about scripting Excel, be sure to download the Excel AppleScript Reference Guide that I mentioned earlier. This can be found on the Mactopia website at http://www.microsoft.com/mac/. It is located in the Resources > Developer Center > AppleScript Resources for Office 2004 section.

Until next time, keep scripting!


Ben Waldie is the author of the best selling books "AppleScripting the Finder" and the "Mac OS X Technology Guide to Automator", available from http://www.spiderworks.com, as well as an AppleScript Training CD, available from http://www.vtc.com. Ben is also president of Automated Workflows, LLC, a company specializing in AppleScript and workflow automation consulting. For years, Ben has developed professional AppleScript-based solutions for businesses including Adobe, Apple, NASA, PC World, and TV Guide. For more information about Ben, please visit http://www.automatedworkflows.com, or email Ben at ben@automatedworkflows.com.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

OmniGraffle 6.3 - Create diagrams, flow...
OmniGraffle helps you draw beautiful diagrams, family trees, flow charts, org charts, layouts, and (mathematically speaking) any other directed or non-directed graphs. We've had people use Graffle to... Read more
PDFKey Pro 4.3.2 - Edit and print passwo...
PDFKey Pro can unlock PDF documents protected for printing and copying when you've forgotten your password. It can now also protect your PDF files with a password to prevent unauthorized access and/... Read more
Ableton Live 9.2.2 - Record music using...
Ableton Live lets you create and record music on your Mac. Use digital instruments, pre-recorded sounds, and sampled loops to arrange, produce, and perform your music like never before. Ableton Live... Read more
Macs Fan Control 1.3.1.0 - Monitor and c...
Macs Fan Control allows you to monitor and control almost any aspect of your computer's fans, with support for controlling fan speed, temperature sensors pane, menu-bar icon, and autostart with... Read more
NetShade 6.3.1 - Browse privately using...
NetShade is an anonymous proxy and VPN app+service for Mac. Unblock your Internet through NetShade's high-speed proxy and VPN servers spanning seven countries. NetShade masks your IP address as you... Read more
Dragon Dictate 4.0.7 - Premium voice-rec...
With Dragon Dictate speech recognition software, you can use your voice to create and edit text or interact with your favorite Mac applications. Far more than just speech-to-text, Dragon Dictate lets... Read more
Persecond 1.0.2 - Timelapse video made e...
Persecond is the easy, fun way to create a beautiful timelapse video. Import an image sequence from any camera, trim the length of your video, adjust the speed and playback direction, and you’re done... Read more
GIMP 2.8.14p2 - Powerful, free image edi...
GIMP is a multi-platform photo manipulation tool. GIMP is an acronym for GNU Image Manipulation Program. The GIMP is suitable for a variety of image manipulation tasks, including photo retouching,... Read more
Sandvox 2.10.2 - Easily build eye-catchi...
Sandvox is for Mac users who want to create a professional looking website quickly and easily. With Sandvox, you don't need to be a Web genius to build a stylish, feature-rich, standards-compliant... Read more
LibreOffice 5.0.1.2 - Free, open-source...
LibreOffice is an office suite (word processor, spreadsheet, presentations, drawing tool) compatible with other major office suites. The Document Foundation is coordinating development and... Read more

ReBoard: Revolutionary Keyboard (Utilit...
ReBoard: Revolutionary Keyboard 1.0 Device: iOS Universal Category: Utilities Price: $1.99, Version: 1.0 (iTunes) Description: Do everything within the keyboard without switching apps! If you are in WhatsApp, how do you schedule a... | Read more »
Tiny Empire (Games)
Tiny Empire 1.1.3 Device: iOS Universal Category: Games Price: $2.99, Version: 1.1.3 (iTunes) Description: Launch cannonballs and blow tiny orcs into thousands of pieces in this intuitive fantasy-themed puzzle shooter! Embark on an... | Read more »
Astropad Mini (Productivity)
Astropad Mini 1.0 Device: iOS iPhone Category: Productivity Price: $4.99, Version: 1.0 (iTunes) Description: *** 50% off introductory price! ​*** Get the high-end experience of a Wacom tablet at a fraction of the price with Astropad... | Read more »
Emo Chorus (Music)
Emo Chorus 1.0.0 Device: iOS Universal Category: Music Price: $1.99, Version: 1.0.0 (iTunes) Description: Realistic Choir simulator ranging from simple Chorus emulation to full ensemble Choir with 128 members. ### introductory offer... | Read more »
Forest Spirit (Games)
Forest Spirit 1.0.5 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0.5 (iTunes) Description: | Read more »
Ski Safari 2 (Games)
Ski Safari 2 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: The world's most fantastical, fun, family-friendly skiing game is back and better than ever! Play as Sven's sister Evana, share... | Read more »
Lara Croft GO (Games)
Lara Croft GO 1.0.47768 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.47768 (iTunes) Description: Lara Croft GO is a turn based puzzle-adventure set in a long-forgotten world. Explore the ruins of an ancient... | Read more »
Whispering Willows (Games)
Whispering Willows 1.23 Device: iOS Universal Category: Games Price: $4.99, Version: 1.23 (iTunes) Description: **LAUNCH SALE 50% OFF** - Whispering Willows is on sale for 50% off ($4.99) until September 9th. | Read more »
Calvino Noir (Games)
Calvino Noir 1.1 Device: iOS iPhone Category: Games Price: $3.99, Version: 1.1 (iTunes) Description: The film noir stealth game. Calvino Noir is the exploratory, sneaking adventure through the 1930s European criminal underworld.... | Read more »
Angel Sword (Games)
Angel Sword 1.0 Device: iOS Universal Category: Games Price: $6.99, Version: 1.0 (iTunes) Description: Prepare to adventure in the most epic full scale multiplayer 3D RPG for mobile! Experience amazing detailed graphics in full HD.... | Read more »

Price Scanner via MacPrices.net

Apple offering refurbished 2015 13-inch Retin...
The Apple Store is offering Apple Certified Refurbished 2015 13″ Retina MacBook Pros for up to $270 (15%) off the cost of new models. An Apple one-year warranty is included with each model, and... Read more
Apple refurbished 2015 MacBook Airs available...
The Apple Store has Apple Certified Refurbished 2015 11″ and 13″ MacBook Airs (the latest models), available for up to $180 off the cost of new models. An Apple one-year warranty is included with... Read more
21-inch iMacs on sale for up to $120 off MSRP
B&H Photo has 21″ iMacs on sale for up to $120 off MSRP including free shipping plus NY sales tax only: - 21″ 1.4GHz iMac: $999.99 $100 off - 21″ 2.7GHz iMac: $1199.99 $100 off - 21″ 2.9GHz iMac... Read more
5K iMacs on sale for up to $150 off MSRP, fre...
B&H Photo has the 27″ 3.3GHz 5K iMac on sale for $1899.99 including free shipping plus NY tax only. Their price is $100 off MSRP. They have the 27″ 3.5GHz 5K iMac on sale for $2149.99 $2199.99, $... Read more
1.4GHz Mac mini, refurbished, available for $...
The Apple Store has Apple Certified Refurbished 1.4GHz Mac minis available for $419. Apple’s one-year warranty is included, and shipping is free. Their price is $80 off MSRP, and it’s the lowest... Read more
iPad Air 2 on sale for up to $100 off MSRP
Best Buy has iPad Air 2s on sale for up to $100 off MSRP on their online store for a limited time. Choose free shipping or free local store pickup (if available). Sale prices available for online... Read more
MacBook Airs on sale for $100 off MSRP
Best Buy has MacBook Airs on sale for $100 off MSRP on their online store. Choose free shipping or free local store pickup (if available). Sale prices for online orders only, in-store prices may vary... Read more
Big Grips Lift Handle For iPad Air and iPad A...
KEM Ventures, Inc. which pioneered the extra-large, super-protective iPad case market with the introduction of Big Grips Frame and Stand in 2011, is launching Big Grips Lift featuring a new super-... Read more
Samsung Launches Galaxy Tab S2, Its Most Powe...
Samsung Electronics America, Inc. has announced the U.S. release of the Galaxy Tab S2, its thinnest, lightest, ultra-fast tablet. Blending form and function, elegant design and multitasking power,... Read more
Tablet Screen Sizes Expanding as iPad Pro App...
Larger screen sizes are gaining favor as the tablet transforms into a productivity device, with shipments growing 185 percent year-over-year in 2015. According to a new Strategy Analytics’ Tablet... Read more

Jobs Board

*Apple* Retail - Multiple Positions (US) - A...
Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
*Apple* Desktop Analyst - KDS Staffing (Unit...
…field and consistent professional recruiting achievement. Job Description: Title: Apple Desktop AnalystPosition Type: Full-time PermanentLocation: White Plains, NYHot Read more
*Apple* Systems Engineer (Mclean, VA and NYC...
Title: Apple Systems Engineer (Mclean, VA and NYC) Location: United States-New York-New York-200 Park Ave (22005) Other Locations: United States-Virginia-Vienna-Towers Read more
*Apple* Systems Engineer (Mclean, VA and NYC...
…Assist in providing strategic direction and technical leadership within the Apple portfolio, including desktops, laptops, and printing environment. This person will Read more
*Apple* Subject Matter Expert - Experis (Uni...
We are seeking an Apple Subject Matter Expert to assist in developing the architecture, support and services for integration of Apple devices into the company's Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.