Ich habe einige Applescript Code zu Scripting Bridge verschieben, um einige Cocoa Hooks ohne die Notwendigkeit für Applescript-ObjC zu nutzen.Portierung Applescript zu Scripting Bridge: kann Wert des Bereichs in Excel 2008 nicht erhalten
Mit Excel 2008 mit Applescript, um den Wert einer Reihe bekommen ist einfach:
set myList to GetValuesFromColumnRange("A", 1, 100)
on GetValuesFromColumnRange(ColumnLetter, FirstRow, LastRow) -- (string, integer, integer) as list
set theList to {}
tell application "Microsoft Excel"
set theRange to ColumnLetter & FirstRow & ":" & ColumnLetter & LastRow
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
set theList to ConvertItemizedListToValueList(theList) of me -- Note this dependency due to how MSE2008 returns the data
return theList
end GetValuesFromColumnRange
Aber in Scripting-Brücke, ich bin die Zellen von einem Arbeitsblatt ein Problem, das auf einem Bereich basierend bekommen. Das Folgende habe ich bisher.
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]; // not null; stated class in log: MicrosoftExcelRange
Excel2008Sheet *valueSheet = range.worksheetObject; // supposed to be new worksheet based upon values within the range; not null; stated class in log: MicrosoftExcelSheet
[valueSheet retain];
SBElementArray *valueCells = [valueSheet cells]; // not null, but count is 0
[valueCells retain];
Das Problem kommt mit der letzten Zeile, wenn ich tatsächlich die Zellen aus valueSheet
, dass die zurück SBElementArray
nicht null ist, aber es enthält auch keine Gegenstände. Das gleiche gilt für die Zellen in targetSheet
auch.
Dokumentation, um dies zu tun, in der Nähe, wie ich aus all meinen Recherchen sagen kann, existiert nicht und ich habe dies so weit wie möglich gemacht.