org.intermine.web.LogMe.log("i", e);
    public ActionForward excel(ActionMapping mapping,                               ActionForm form,                               HttpServletRequest request,                               HttpServletResponse response)        throws Exception {        HttpSession session = request.getSession();        response.setContentType("Application/vnd.ms-excel");        response.setHeader("Content-Disposition ", "inline; filename=results-table.xsl");        PagedTable pt = (PagedTable) session.getAttribute(Constants.RESULTS_TABLE);        HSSFWorkbook wb = new HSSFWorkbook();        HSSFSheet sheet = wb.createSheet("results");        try {            List columns = pt.getColumns();            List rowList = pt.getAllRows();            for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) {                List row;                try {                    row = (List) rowList.get(rowIndex);                } catch (RuntimeException e) {                    // re-throw as a more specific exception                    if (e.getCause() instanceof ObjectStoreException) {                        throw (ObjectStoreException) e.getCause();                    } else {                        throw e;                    }                }                HSSFRow excelRow = sheet.createRow((short) rowIndex);                // a count of the columns that we have seen so far are invisble - used to get the                // correct columnIndex for the call to createCell()                int invisibleColumns = 0;                for (int columnIndex = 0; columnIndex < row.size(); columnIndex++) {                    Column thisColumn = (Column) columns.get(columnIndex);                    // the column order from PagedTable.getList() isn't necessarily the order that                    // the user has chosen for the columns                    int realColumnIndex = thisColumn.getIndex();                    if (!thisColumn.isVisible()) {                        invisibleColumns++;                        continue;                    }                    Object thisObject = row.get(realColumnIndex);                    // see comment on invisibleColumns                    short outputColumnIndex = (short) (columnIndex - invisibleColumns);                    if (thisObject instanceof Number) {                        float objectAsFloat = ((Number) thisObject).floatValue();                        excelRow.createCell(outputColumnIndex).setCellValue(objectAsFloat);                    } else {                        if (thisObject instanceof Date) {                            Date objectAsDate = (Date) thisObject;                            excelRow.createCell(outputColumnIndex).setCellValue(objectAsDate);                        } else {                            excelRow.createCell(outputColumnIndex).setCellValue("" + thisObject);                        }                    }                }            }            wb.write(response.getOutputStream());        } catch (ObjectStoreException e) {            org.intermine.web.LogMe.log("i", e);            ActionMessages actionMessages = new ActionMessages();            actionMessages.add(ActionMessages.GLOBAL_MESSAGE,                               new ActionError("errors.query.objectstoreerror"));            saveMessages(request, actionMessages);        }        return null;    }