I'm making a Automator to jump from citation in Word to the reference software(Zotero). But I can't find a AppleScript to extract text of selected field code (the first step).
The field code in Word is
ADDIN ZOTERO_ITEM CSL_CITATION {"citationID":"AFUiwuqi","properties":{"formattedCitation":"[1]","plainCitation":"[1]","noteIndex":0},"citationItems":[{"id":9752,"uris":["http://zotero.org/users/6410528/items/YYTRWPHH"],"itemData":{"id":9752,"type":"article-journal","container-title":"Nature","DOI":"10.1038/s41586-019-1737-7","ISSN":"0028-0836, 1476-4687","issue":"7782","page":"324-329","title":"Controlled flight of a microrobot powered by soft artificial muscles","volume":"575","author":[{"family":"Chen","given":"Yufeng"},{"family":"Zhao","given":"Huichan"},{"family":"Mao","given":"Jie"},{"family":"Chirarattananon","given":"Pakpong"},{"family":"Helbling","given":"E. Farrell"},{"family":"Hyun","given":"Nak-seung Patrick"},{"family":"Clarke","given":"David R."},{"family":"Wood","given":"Robert J."}],"issued":{"date-parts":[["2019",11,14]]}}}],"schema":"https://github.com/citation-style-language/schema/raw/master/csl-citation.json"}
Here is the script process:
- Extract text from selected field code in Word (This is the question)
- Get the
uris
text(http://zotero.org/users/6410528/items/YYTRWPHH
) - Get the item-codes (
YYTRWPHH
). - Open url (
zotero://select/library/items?itemKey=YYTRWPHH
)
Now I use VBA to extract field code text, see below. But in this way, the file will be changed. So I want to do this via AppleScript.
Sub GetFiledsCodes()
Dim myRange As Range, myCodes As String
Set myRange = Selection.Range
With myRange
If .Fields.Count = 0 Then
MsgBox "No Code!", vbInformation
Exit Sub
Else
.Fields.Update
.TextRetrievalMode.IncludeFieldCodes = True
.TextRetrievalMode.IncludeHiddenText = True
myCodes = .Text
myCodes = VBA.Replace(myCodes, Chr(19), "{")
myCodes = VBA.Replace(myCodes, Chr(21), "}")
.SetRange .End, .End
.InsertAfter myCodes
.Font.Name = "Times New Roman"
.Font.Size = 12
.Cut
End If
End With
End Sub
PS:
Here is my process in Automator(it can work but using VBA):
- Run AppleScript
on run {input, parameters} tell application "Microsoft Word" to activate tell application "Microsoft Word" run VB macro macro name "GetFiledsCodes" delay 0.5 end tell return input end run
- Get contents from clipboard
- Extract URLs from Text
- Filter Paragraphs begin with
http://zotero.org/users/
- Copy to Clipboard
- Run AppleScript
set myStr to do shell script "pbpaste" tell application "Zotero" to activate set AppleScript's text item delimiters to " " set myList to every text item of myStr set zoterocode to "" set codes to "" repeat with j from 1 to the length of myList set itemValue to item j of myList set zoterocode to (do shell script "sed -E 's#http://zotero.org/users/[0-9]+/items/##g' <<< " & itemValue) if j = 1 then set codes to zoterocode else set codes to codes & "," & zoterocode end if end repeat tell application "System Events" key code 18 using {command down, control down, option down} delay 0.5 set collectionKey to do shell script "pbpaste" if collectionKey = myStr then set theurl to "zotero://select/library/items?itemKey=" & codes else set theurl to collectionKey & "/items?itemKey=" & codes end if open location theurl end tell