Why DriveApp alone won't do it
DriveApp is the default Drive service in Apps Script and it handles most file operations well. Copying a file, renaming it, moving it between folders — all fine. What it cannot do is change a file's MIME type during a copy. If you call DriveApp.getFileById(id).makeCopy(), you get an exact byte-copy of the .xlsx, still an Excel file, still wearing the green Sheets icon as a lie.
The conversion happens at the Drive API layer, specifically the Files.copy method in Drive API v2, which accepts a resource object where you can set mimeType to application/vnd.google-apps.spreadsheet. That signals to Drive's server-side conversion pipeline to parse the Excel binary and produce a real Sheets file. The advanced Drive service exposes this directly; the built-in DriveApp wrapper does not.