Completed the new code, runs much faster than before without switching to XML options. This is almost instantaneous creation even with large files.

public static string Export(string excelFileName, 
                            string[] excelWorksheetName, 
                            string tableStyle, 
                            params System.Data.DataTable[] dt)
{
    Application excel = new Application();
    excel.DisplayAlerts = false;
    excel.Visible = false;
    excel.ScreenUpdating = false;

    Workbooks workbooks = excel.Workbooks;
    Workbook workbook = workbooks.Add(Type.Missing);

    // Count of data tables provided.
    int iterator = dt.Length;
    for (int i = 0; i &lt; iterator; i++)
    {
        Sheets worksheets = workbook.Sheets;
        Worksheet worksheet = (Worksheet)worksheets[i + 1];
        worksheet.Name = excelWorksheetName[i];

        int rows = dt[i].Rows.Count;
        int columns = dt[i].Columns.Count;
        // Add the +1 to allow room for column headers.
        var data = new object[rows + 1, columns];

        // Insert column headers.
        for (var column = 0; column &lt; columns; column++)
        {
            data[0, column] = dt[i].Columns[column].ColumnName;
        }

        // Insert the provided records.
        for (var row = 0; row &lt; rows; row++)
        {
            for (var column = 0; column &lt; columns; column++)
            {
                data[row + 1, column] = dt[i].Rows[row][column];
            }
        }

        // Write this data to the excel worksheet.
        Range beginWrite = (Range)worksheet.Cells[1, 1];
        Range endWrite = (Range)worksheet.Cells[rows + 1, columns];
        Range sheetData = worksheet.Range[beginWrite, endWrite];
        sheetData.Value2 = data;

        // Additional row, column and table formatting.
        worksheet.Select();
        sheetData.Worksheet.ListObjects.Add(XlListObjectSourceType.xlSrcRange,
                                           sheetData,
                                           System.Type.Missing,
                                           XlYesNoGuess.xlYes,
                                           System.Type.Missing).Name = excelWorksheetName[i];
        sheetData.Select();
        sheetData.Worksheet.ListObjects[excelWorksheetName[i]].TableStyle = tableStyle;
        excel.Application.Range["2:2"].Select();
        excel.ActiveWindow.FreezePanes = true;
        excel.ActiveWindow.DisplayGridlines = false;
        excel.Application.Cells.EntireColumn.AutoFit();
        excel.Application.Cells.EntireRow.AutoFit();

        // Select the first cell in the worksheet.
        excel.Application.Range["$A$2"].Select();
    }

    // Turn off alerts to prevent asking for 'overwrite existing' and 'save changes' messages.
    excel.DisplayAlerts = false;

    // Save our workbook and close excel.
    string SaveFilePath = string.Format(@"{0}.xls", excelFileName);
    workbook.SaveAs(SaveFilePath, XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    workbook.Close(false, Type.Missing, Type.Missing);
    excel.Quit();

    // Release our resources.
    Marshal.ReleaseComObject(workbook);
    Marshal.ReleaseComObject(workbooks);
    Marshal.ReleaseComObject(excel);
    Marshal.FinalReleaseComObject(excel);

    return SaveFilePath;
}


Creating Excel document is very slow
I just failed these review audits in First Post, I read the question and thought it seemed reasonable but the user was deleted so to be on the safe side I clicked add comment and I failed the audit.

I'm not sure why adding a comment would be considered a negative action, is the correct option to click No Action Needed or edit?

What was I supposed to do in this situation?  Adding a comment should not be a review audit fail.
