I need to move some Applescript code to the Scripting Bridge to take advantage of some Cocoa hooks without the need for Applescript-ObjC.
Using Excel 2008 with Applescript, it is easy to get a range value:
set myList to GetValuesFromColumnRange("A", 1, 100)
on GetValuesFromColumnRange(ColumnLetter, FirstRow, LastRow)
set theList to {}
tell application "Microsoft Excel"
set theRange to ColumnLetter & FirstRow & ":" & ColumnLetter & LastRow
set AppleScript text item delimiters to {return}
set theList to (get value of range theRange as list)
set AppleScript text item delimiters to {""}
end tell
set theList to ConvertItemizedListToValueList(theList) of me
return theList
end GetValuesFromColumnRange
But in Scripting Bridge I have a problem with getting range worksheet cells. The following is what I still have.
Excel2008Application *excelApp = [SBApplication applicationWithBundleIdentifier:@"com.microsoft.Excel"];
Excel2008Workbook *workbook = excelApp.activeWorkbook;
SBElementArray *sheets = [workbook sheets];
Excel2008Sheet *targetSheet;
int thisSheet = 0;
int lastSheet = [sheets count];
for (thisSheet = 0; thisSheet < lastSheet; thisSheet++) {
Excel2008Sheet *currentSheet = [sheets objectAtIndex:thisSheet];
NSString *currentSheetName = currentSheet.name;
if ([currentSheetName isEqualToString:@"Metadata"]) {
targetSheet = currentSheet;
[targetSheet retain];
}
}
Excel2008Range *range = [[[excelApp classForScriptingClass:@"range"] alloc] initWithProperties:[NSDictionary dictionaryWithObjectsAndKeys:@"A1:A10", @"formulaR1c1", nil]];
[[targetSheet ranges] addObject:range];
range = [[targetSheet ranges] lastObject];
Excel2008Sheet *valueSheet = range.worksheetObject;
[valueSheet retain];
SBElementArray *valueCells = [valueSheet cells];
[valueCells retain];
The problem is with the last row when I actually get the cells from valueSheet, since the return is SBElementArraynot null, but it also does not contain any objects. The same goes for getting cells in targetSheet.
, , , , , .