Microsoft Excel

Important Things To Note

Numbers stored in Excel are always returned in double format, even whole numbers (integers) or numbers displayed/stored as text (string). So, what appears as “1″ in a cell regardless of the cell’s format is always returned as “1.0″ regardless of the number or text format. To circumvent this, use the trim or replace characters subroutines.

Getting Data From A Column

This code shows how to read a column of cells and get their values into a list.

set theFile to "Path:To:File.xls" as string
set rangeStart to "A1" as string
set rangeEnd to "A10" as string

tell application "Microsoft Excel"
		activate
		open workbook workbook file name TheFile
		
		set theRange to rangeStart & ":" & rangeEnd		
		set AppleScript's text item delimiters to {return}
		set theList to (get value of range theRange as list)
		set AppleScript's text item delimiters to {""}
end tell

Getting Data From A Single Cell

Same as above, only duplicate the cell for the startRange to endRange as well.

tell application "Microsoft Excel"
	set theRange to "A1:A1"
	set theValue to (get value of range theRange)
	-- OR
	set theCellValue to value of (cell ("A1")) as string
end tell

Getting the number of rows dynamically

on GetItemCount()
	set RowNumber to 1
	set theText to "-1"
	tell application "Microsoft Excel"
		repeat until theText is ""
			set RowNumber to RowNumber + 1
			set theRange to RequestIDColumn & RowNumber & ":" & RequestIDColumn & RowNumber
			set dataRange to range theRange of sheet 1
			set theText to (get value of range theRange)
		end repeat
	end tell
	set rowCount to RowNumber - 1
	return rowCount
end GetItemCount

Set the background color of an individual cell

This one is non-obvious. We have to get the interior object of the cell, and the color is specified by it’s index in the current color palette. There are no color constants and there is no way to set the color by RBG values.

tell application "Microsoft Excel"
	set theRange to range "A3:E3"
	set interiorObject to interior object of theRange
	set color index of interiorObject to 5
end tell