решаемая.
NSString *rangeName = @"A1:A10";
Excel2008Range *range = [[[excelApp classForScriptingClass:@"range"] alloc] initWithProperties:[NSDictionary dictionaryWithObjectsAndKeys:rangeName, @"name", nil]];
[[targetSheet ranges] addObject:range];
Excel2008Range *currentRange;
if ([[[targetSheet ranges] objectWithName:rangeName] exists]) {
currentRange = [[targetSheet ranges] objectWithName:rangeName];
}
NSLog(@"[currentRange.value get] = %@", [currentRange.value get]);
// result: ((key),(1),(2),(3),(4),(5),(6),(7),(8),(9)) = NSArray
Кажется, уловка состоит в том, чтобы установить строку диапазона в свойство name
Excel2008Range
. Единственный подводный камень, который я обнаружил, работая над этим, никогда не заполнял formulaR1c1
диапазона - как в [NSDictionary dictionaryWithObjectsAndKeys:rangeName, @"formulaR1c1", nil]
- потому что он будет заполнять диапазон значением строки диапазона.
Оглядываясь назад, это действительно имеет смысл при чтении синтаксиса одной и той же команды в обоих Applescript ...
tell application "Microsoft Excel"
set theValues to get value of range "A1:A10"
end tell
... и objc-appscript ...
NSString *rangeString = @"A1:A10"
MEApplication *microsoftExcel = [MEApplication applicationWithName: @"Microsoft Excel"];
MEReference *cells = [[[microsoftExcel ranges] byName:rangeString] value];
NSArray *cellValues = [cells getItem];
В обоих случаях значение диапазона получается путем получения диапазона значений с его именем. Но с помощью Scripting Bridge, насколько я могу судить, имя имеет , которое должно применяться явно при создании объекта диапазона.
Я уверен, что есть лучший способ сделать это (как правило, есть), но по крайней мере это работает.