exporting groups from addressbook


I have an addressbook with over 7,000 contacts and am planning to convert these contacts to a cvs format for a database.

I have tons of groups which these 7,000 are sorted under, and am wondering what is the best way to export each of these groups into a vcard format and then store them in a folder with the group’s name?

thanks in advance.



you knew that you can export vCards from Addressbook groupvise by holding down the option key and then dragging the group to a finder Window?

ok - but of course it can also be done with a script. I recently wrote an export script so it just needed some minor modification to to your job. Only limitation of my script: you need an existing vCard file (won’t be overwritten):

set destFolder to choose folder with prompt "Please choose a destination folder for the VCard export:"
set dummyVcard to choose file with prompt "Please select an existing vCard file"
tell application "Finder"
	set dummyVcard to (duplicate dummyVcard to destFolder)
	set name of dummyVcard to "dummyVCard.tmp"
	set dummyVcard to file "dummyVCard.tmp" of destFolder
end tell

tell application "Address Book"
	repeat with gp in groups
		set gp_name to my fixColonsInName(name of gp)
		set gp_name to my handleDuplicates(gp_name, "", destFolder)
		tell application "Finder"
			set groupFolder to (make new folder at destFolder with properties {name:gp_name})
		end tell
		repeat with pe in (every person of gp)
			set vcfName to my fixColonsInName(name of pe)
			set vcfName to my handleDuplicates(vcfName, ".vcf", groupFolder)
			tell application "Finder"
				set newVCard to (duplicate dummyVcard to groupFolder)
			end tell
				set wFile to open for access (newVCard as string) with write permission
				write (vcard of pe as Unicode text) to wFile starting at 0
				close access wFile
			on error errMsg
				display dialog "An error occured during vCard Export: " & errMsg
			end try
			tell application "Finder" to set name of newVCard to vcfName
		end repeat
	end repeat
	tell application "Finder" to delete dummyVcard
end tell

on fixColonsInName(theName)
	set {olddelims, text item delimiters} to {text item delimiters, ":"}
	set nameItems to text items of theName
	set text item delimiters to "/"
	set retVal to (nameItems) as string
	set text item delimiters to olddelims
	return retVal
end fixColonsInName

on handleDuplicates(itemName, itemExtension, destFolder)
	tell application "Finder"
		set strLen to length of itemName
		set n to 1
		repeat while (exists (item (itemName & itemExtension) of destFolder))
			set itemName to ((characters 1 thru strLen of itemName) as string) & (n as string)
			set n to n + 1
		end repeat
	end tell
	return (itemName & itemExtension)
end handleDuplicates


thank you so much, this saves the day!