You can do it with a Workflow SDK Script
You can use CSV or Excel as your source, but for my example, I pushed it into a SQL table.

Then I created a simple Workflow

My Custom Query is:
SELECT [id]
,[UserName]
,[UserPassword]
,[LFGroup]
,[IsReadOnly]
FROM [LFExternalTables].[dbo].[LFUsers];
And my SDK Script looks like this:
Protected Overrides Sub Execute()
'Write your code here. The BoundEntryInfo property will access the entry, RASession will get the Repository Access session
Try
Dim ui As UserInfo = New UserInfo()
ui.Session = RASession
ui.IsDisabled = False
ui.CanUsePassword = True
ui.CanChangePassword = False
ui.Name = GetTokenValue("ForEachRow_UserName")
ui.Password = GetTokenValue("ForEachRow_UserPassword")
Dim sGroupName As String = GetTokenValue("ForEachRow_LFGroup")
If Not String.IsNullOrEmpty(sGroupName) Then
ui.JoinGroup(sGroupName)
End If
Dim sIsReadOnly As String = GetTokenValue("ForEachRow_IsReadOnly")
If sIsReadOnly.ToLower() = "true" Then
ui.ReadonlyAccess = True
Else
ui.ReadonlyAccess = False
End If
ui.Save()
Catch ex As Exception
WorkflowApi .TrackError(ex.Message)
End Try
End Sub
You may want to add code to the SDK Script to check if the user name already exists, but this is the basics.