applescript basics
9 september 2005 - 02:49   
geplaatst door: jeanette
Ik hoop dat ik me tot het juiste forum wend.

Ik wil vanuit Filemaker Pro een Excel file scannen op een specifiek data-veld. Hiervoor gebruik ik Applescripting in Filemaker Pro. Tot voor kort had ik nog nooit van Applescript gehoord en ik ben dus een absolute beginner.
De Excel file bestaat uit twee kolommen: kolom A bevat keywords en kolom B bevat de waardes. Ik krijg het voor elkaar om vanuit Filemaker de applicatie Excel te openen en deze het juiste workbook te laten openen. Vervolgens lukt het me om een keyword te vinden in kolom A (in dit geval "Exif Image Width"). Dit is bijvoorbeeld "$A$29". De waarde die ik in Filemaker Pro wil laden zit in dit geval dus in "$B$29".

Vraag:
Hoe kan ik als ik "$A$29" heb gevonden het veld "$B$29" automatisch lezen?

Dit moet ontzettend eenvoudig op te lossen zijn. Maar ik kan niet vinden hoe ik met Applescript strings kan manipuleren (zodat ik de letter A kan vervangen door B), of hoe ik in Excel de row index van een range kan opvragen. Ik worstel nu al zo'n 8 uur achter elkaar met dit probleem. Zo midden in de nacht ben ik misschien niet erg duidelijk met mijn formuleringen   :sad:  

Dit is een deel van mijn script:


tell application "Microsoft Excel"
activate
 set fc to (find (range "A:A" of worksheet "Sheet1") what "Exif Image Width")
 display dialog get address of fc
end tell

Hopelijk kan iemand mij helpen. Alvast bedankt.

applescript basics
9 september 2005 - 09:54    reactie #1
geplaatst door: tibss
In je vraag zit besloten dat je beslist de route filemaker applescript excel wilt gebruiken. Daarmee kan ik je niet helpen.
Maar,
Kun je niet de excel file imorteren in filemaker. Ieder regel wordt een record.

tibss

applescript basics
9 september 2005 - 11:33    reactie #2
geplaatst door: Pugnax
Je kunt de functie vert.zoeken van Excel gebruiken.

vert.zoeken(zoekwaarde,tabel,resultaatkolom)

zoekwaarde: "Exif Image Width"
tabel:a1:b29
kolom: 2 (tweede kolom van de tabel)

Hoop dat je er zo uit komt...

applescript basics
9 september 2005 - 11:56    reactie #3
geplaatst door: Pugnax
Nog even een update:

Omdat de tabel waarin je zoekt zeer waarschijnlijk niet alfabetisch gesorteerd is, moet de optie range_lookup (heb hier een engelse versie) op ONWAAR (of FALSE) worden gezet. Dan zoekt de functie door tot een exacte match. Bij WAAR (TRUE, of geen waarde) tot de eerste die de functie tegen komt.

vert.zoeken("zoekwaarde";tabel;resultaatkolom;ONWAAR)

Afhankelijk van de instellingen kunnen de puntkomma's ook komma's zijn. In de engelse versie heet de functie VLOOKUP.

Laat maar weten als het gelukt is, of wanneer je meer hulp nodig hebt.

applescript basics
9 september 2005 - 13:00    reactie #4
geplaatst door: jeanette
Hoi,
Ik weet zeker dat het met VLOOKUP gaat werken. Ik werd 's ochtends wakker en dacht ook aan die oplossing. Tja...

Ik heb het nog niet geprobeerd, maar ik ga het als volgt proberen op te lossen:
1. ik kies een veld uit dat zeker niet gebruikt wordt in de file, bijv. $C$1 en ken daar de VLOOKUP formule aan toe
2. ik kopieer de waarde van $C$1 naar het clipboard
3. paste het in Filemaker

Ik moet alleen nog bestuderen hoe het zit als de waarde niet wordt gevonden, hoewel dat in dit geval een theoretisch probleem is.
De reden dat ik de file niet rechtstreeks in Filemaker importeer komt omdat ik honderden van dit soort filetjes moet parsen en ik niet weet hoe dit met Filemaker scripts kan. Het lijkt erop alsof je met Filemaker scripts alleen files kan importeren waarvan de filenaam van tevoren al bekend is.

Is het trouwens echt niet eenvoudig mogelijk om de string $A$29 om te zetten in $B$29 (of een string met een andere rij index natuurlijk)?

Bedankt voor alle tips!

applescript basics
9 september 2005 - 13:19    reactie #5
geplaatst door: Pugnax
Ik denk dat we elkaar nu niet goed begrijpen. De functie VLOOKUP krijgt van Applescript de waarde (of woord) waarop in de eerste kolom (van de tabel) gezocht moet worden. Als die waarde gevonden is, dan kijkt het in de aangegeven kolom (van de tabel) naar de waarde en geeft die terug.

Tabel:
   A      B
1  aap   dier
2  noot  voedsel
3  mies  mens

vlookup("mies";a1:b3;2;onwaar) geeft als resultaat "mens"

De "mies" in de formule kun je vervangen door een variabele.

Ik begrijp dus jouw laatste vraag niet....

applescript basics
9 september 2005 - 14:01    reactie #6
geplaatst door: jeanette
Dat laatste  is eigenlijk alleen maar een uiting van verbazing over hoe moeilijk het voor mij is om basisoperaties van applescript te doorgronden. In manuals lees ik alleen maar over wat een bepaalde applicatie voor functies aanbied. Maar er moet toch ook een manual zijn dat de taal beschrijft? Bijvoorbeeld, de operaties die mogelijk zijn op strings, getallen of data(datums). Zoiets als een string replace is toch standaard in de meeste programeertalen?

Maar goed, ik moet even dit scriptje afmaken. Daarna heb ik misschien nooit meer iets te maken met applescript...

applescript basics
9 september 2005 - 14:55    reactie #7
geplaatst door: Pugnax
OK, voor de duidelijkheid, zo zou het er uit moeten zien:

tell application "Microsoft Excel"
activate
set fc to (vlookup(keyword;tabel;2;onwaar))
display dialog get address of fc
end tell

-keyword kan dus een variabele zijn of de vaste tekst "Exif Image Width" als je daar altijd op zoekt.
-tabel is het bereik waarin je zoekt, beginnend met de kolom waar het keyword in staat.

Dan hoef je verder geen stringen meer te vervangen. Ik heb hier geen mac, dus ik kan zo snel niet even testen of het werkt.

Hoop dat je de voordelen van Applescript nog gaat ontdekken, want er kan heel veel mee!

applescript basics
9 september 2005 - 15:25    reactie #8
geplaatst door: MarcOSX
Ik heb me kort geleden voor het eerst verdiept in AppleScript en vond die string replace functie wel leuk om eens te proberen. Via google wat gevonden en aangepast. Het volgende script werkt bij mij, ik vind het echter wel wat omslachtig...

set OldDelims to AppleScript's text item delimiters
set AppleScript's text item delimiters to "$"
set theText to "$A$29"
set splitText to text items of theText
set item 2 of splitText to "B"
set finalText to text items of splitText as text
set AppleScript's text item delimiters to OldDelims
finalText

Als ik dit in ScriptEditor draai is het resultaat (finalText dus) $B$29 en ik begon met $A$29 (theText).

Misschien heb je er wat aan.

applescript basics
10 september 2005 - 13:22    reactie #9
geplaatst door: Pugnax
Ik heb het net geprobeerd, maar het scriptje werkt niet. Sterker nog: ik kan ook de macro recorder niet meer gebruiken (met 10.3.9 en Office 2004). Blijkbaar is er hier iets anders niet goed.

In document 175425 (http://support.microsoft.com/default.aspx?scid=kb;en-us;175425) van Microsoft staat wel beschreven hoe een Excel macro vanuit Applescript kan worden aangeroepen. Ook staat er hoe een waarde kan worden meegegeven en weer kan worden teruggegeven aan de macro.

Hoop dat je hiermee beter bent geholpen.

applescript basics
10 september 2005 - 15:45    reactie #10
geplaatst door: TFC
Dit zou het moeten doen voor jouw denk ik. Het script leest de ID van de gevonden cell, splitst deze op, en vervangt row A door row B en zoekt dan de inhoud van de opnieuw samengestelde cell ID op.

tell application "Microsoft Excel"
   activate
   set fc to (find (range "A:A" of worksheet "Sheet1") what "Exif Image Width")
   set fnc to get address of fc
   set FirstPart to characters 1 through 1 of fnc
   set LastPart to characters 3 through 4 of fnc
   set nc to FirstPart & "B" & LastPart as text
   set CellValue to value of cell nc of worksheet "Sheet1"
   display dialog CellValue
end tell