You are lucky to get anything.
(read-line [file-desc]) is NOT ment/suited/capable for reading Excel files. (.XLS or XLSX)
Besides that, it only takes 1 argument, not 2. (setq a (read-line c b)) ??? what's that "b" for? it only takes an open file for argument ...)
As the name suggests, it reads a line from a (text) file, until the EOL character. ([Enter]=EOL, End Of Line)
Which has nothing to do with cells.
Either you should use a ODBC connection to read the file, or save it as a .CSV file (like @devitg already suggested). You can easily do it like that, just keep in mind that a LINE will have ALL columns in it. (so you still need to parse it into cell values...)
Here's an example of a function to read a CSV file into a list of lists:
(defun readCSV ( / file_r record values csvLst)
; Read settings from csv file
; Returns list of lists with values (records with values)
(setq file_r (open csvfile "r")
csvLst nil
)
(while (setq record (read-line file_r))
(setq values nil)
(while (> (setq pos (vl-string-position (ascii "\t") record)) 0)
(setq values (append values (list (substr record 1 pos)))
record (substr record (+ 2 pos))
)
)
(if (> (strlen record) 0)
(setq values (append values (list record)))
)
(if values (setq csvLst (append csvLst (list values))))
)
csvLst
)
This will turn your 4 columns into a list of 'records' with each 4 'values'.
same as:
(list
(list 1 2 3 4)
(list 1 2 3 4)
)