Search in sources :

Example 6 with WritableSheet

use of jxl.write.WritableSheet in project cubrid-manager by CUBRID.

the class ExportToXlsHandler method exportFromCache.

public void exportFromCache(String tableName) throws IOException {
    if (StringUtil.isEmpty(tableName)) {
        // FIXME move this logic to core module
        return;
    }
    WritableWorkbook workbook = null;
    int workbookNum = 0;
    int cellCharacterLimit = ImportFileConstants.XLSX_CELL_CHAR_LIMIT;
    // 65536: limit xls row number.
    int rowLimit = ImportFileConstants.XLS_ROW_LIMIT;
    boolean isInitedColumnTitles = false;
    List<String> columnTitles = new ArrayList<String>();
    try {
        int sheetNum = 0;
        int xlsRecordNum = 0;
        workbook = createWorkbook(exportConfig.getDataFilePath(tableName), workbookNum++);
        WritableSheet sheet = workbook.createSheet("Sheet " + sheetNum, sheetNum);
        sheetNum++;
        int exportedCount = 0;
        try {
            ResultSetDataCache resultSetDataCache = exportConfig.getResultSetDataCache();
            List<ArrayList<Object>> datas = resultSetDataCache.getDatas();
            List<ColumnInfo> columnInfos = resultSetDataCache.getColumnInfos();
            int colCount = columnInfos.size();
            if (!isInitedColumnTitles) {
                isInitedColumnTitles = true;
                for (ColumnInfo column : columnInfos) {
                    columnTitles.add(column.getName());
                }
                if (isExit) {
                    return;
                }
                // first line add column name
                if (exportConfig.isFirstRowAsColumnName()) {
                    writeHeader(sheet, columnTitles);
                    xlsRecordNum++;
                }
            }
            for (ArrayList<Object> rowData : datas) {
                //Check memory
                if (!CommonUITool.isAvailableMemory(REMAINING_MEMORY_SIZE)) {
                    closeWorkbook(workbook);
                    workbook = null;
                    System.gc();
                    workbook = createWorkbook(exportConfig.getDataFilePath(tableName), workbookNum++);
                    sheetNum = 0;
                    sheet = workbook.createSheet("Sheet " + sheetNum, sheetNum);
                    sheetNum++;
                    xlsRecordNum = 0;
                    // first line add column name
                    if (exportConfig.isFirstRowAsColumnName()) {
                        writeHeader(sheet, columnTitles);
                        xlsRecordNum++;
                    }
                }
                for (int j = 1; j <= colCount; j++) {
                    String colType = columnInfos.get(j - 1).getType();
                    int precision = columnInfos.get(j - 1).getPrecision();
                    setIsHasBigValue(colType, precision);
                    Object cellValue = rowData.get(j - 1);
                    // We need judge the CLOB/BLOD data by column type
                    if (DataType.DATATYPE_BLOB.equals(colType) || DataType.DATATYPE_CLOB.equals(colType)) {
                        if (DataType.DATATYPE_BLOB.equals(colType)) {
                            String fileName = exportBlobData(tableName, (Blob) cellValue);
                            String dataCellValue = DataType.NULL_EXPORT_FORMAT;
                            if (StringUtil.isNotEmpty(fileName)) {
                                dataCellValue = DBAttrTypeFormatter.FILE_URL_PREFIX + tableName + BLOB_FOLDER_POSTFIX + File.separator + fileName;
                            }
                            sheet.addCell(new Label(j - 1, xlsRecordNum, dataCellValue));
                        } else {
                            String fileName = exportClobData(tableName, (Clob) cellValue);
                            String dataCellValue = DataType.NULL_EXPORT_FORMAT;
                            if (StringUtil.isNotEmpty(fileName)) {
                                dataCellValue = DBAttrTypeFormatter.FILE_URL_PREFIX + tableName + CLOB_FOLDER_POSTFIX + File.separator + fileName;
                            }
                            sheet.addCell(new Label(j - 1, xlsRecordNum, dataCellValue));
                        }
                    } else if (cellValue instanceof Long) {
                        sheet.addCell(new Number(j - 1, xlsRecordNum, (Long) cellValue));
                    } else if (cellValue instanceof Double) {
                        sheet.addCell(new Number(j - 1, xlsRecordNum, (Double) cellValue));
                    } else if (cellValue instanceof Timestamp) {
                        String dataCellValue = FieldHandlerUtils.formatDateTime((Timestamp) cellValue);
                        sheet.addCell(new Label(j - 1, xlsRecordNum, dataCellValue));
                    } else if (cellValue instanceof java.sql.Time) {
                        String dataCellValue = DateUtil.getDatetimeString(((java.sql.Time) cellValue).getTime(), FieldHandlerUtils.FORMAT_TIME);
                        sheet.addCell(new Label(j - 1, xlsRecordNum, dataCellValue));
                    } else if (cellValue instanceof java.sql.Date) {
                        String dataCellValue = DateUtil.getDatetimeString(((java.sql.Date) cellValue).getTime(), FieldHandlerUtils.FORMAT_DATE);
                        sheet.addCell(new Label(j - 1, xlsRecordNum, dataCellValue));
                    } else {
                        sheet.addCell(new Label(j - 1, xlsRecordNum, cellValue.toString().length() > cellCharacterLimit ? cellValue.toString().substring(0, cellCharacterLimit) : cellValue.toString()));
                    }
                }
                xlsRecordNum++;
                if ((xlsRecordNum + 1) % rowLimit == 0) {
                    xlsRecordNum = 0;
                    sheet = workbook.createSheet("Sheet " + sheetNum, sheetNum);
                    sheetNum++;
                    // first line add column name
                    if (exportConfig.isFirstRowAsColumnName()) {
                        writeHeader(sheet, columnTitles);
                        xlsRecordNum++;
                    }
                }
                exportedCount++;
                if (exportedCount >= COMMIT_LINES) {
                    exportDataEventHandler.handleEvent(new ExportDataSuccessEvent(tableName, exportedCount));
                    exportedCount = 0;
                }
                if (stop) {
                    break;
                }
            }
            exportDataEventHandler.handleEvent(new ExportDataSuccessEvent(tableName, exportedCount));
            exportedCount = 0;
        } catch (Exception e) {
            LOGGER.error("", e);
            exportDataEventHandler.handleEvent(new ExportDataFailedOneTableEvent(tableName));
        }
        System.gc();
    } catch (Exception e) {
        LOGGER.error("", e);
    } finally {
        closeWorkbook(workbook);
    }
}
Also used : ArrayList(java.util.ArrayList) Label(jxl.write.Label) ColumnInfo(com.cubrid.common.ui.query.control.ColumnInfo) Timestamp(java.sql.Timestamp) ExportDataFailedOneTableEvent(com.cubrid.common.ui.cubrid.table.event.ExportDataFailedOneTableEvent) Number(jxl.write.Number) ResultSetDataCache(com.cubrid.common.ui.cubrid.table.export.ResultSetDataCache) WritableSheet(jxl.write.WritableSheet) WriteException(jxl.write.WriteException) SQLException(java.sql.SQLException) IOException(java.io.IOException) RowsExceededException(jxl.write.biff.RowsExceededException) WritableWorkbook(jxl.write.WritableWorkbook) ExportDataSuccessEvent(com.cubrid.common.ui.cubrid.table.event.ExportDataSuccessEvent)

Example 7 with WritableSheet

use of jxl.write.WritableSheet in project cubrid-manager by CUBRID.

the class ExportHostStatusDialog method saveTableData.

private void saveTableData(String columnName, String content, String sheetName, int sheetIndex) throws RowsExceededException, WriteException {
    WritableCellFormat normalCellStyle = getNormalCell();
    WritableSheet ws = wwb.createSheet(sheetName, sheetIndex);
    ws.addCell(new jxl.write.Label(0, 0, columnName, normalCellStyle));
    ws.setColumnView(0, 30);
    ws.addCell(new jxl.write.Label(0, 1, content, normalCellStyle));
}
Also used : WritableSheet(jxl.write.WritableSheet) WritableCellFormat(jxl.write.WritableCellFormat)

Example 8 with WritableSheet

use of jxl.write.WritableSheet in project cubrid-manager by CUBRID.

the class ExportHostStatusDialog method saveTableData.

private void saveTableData(Table table, String sheetName, int sheetIndex) throws RowsExceededException, WriteException {
    WritableCellFormat normalCellStyle = getNormalCell();
    WritableSheet ws = wwb.createSheet(sheetName, sheetIndex);
    int rowIndex = 0;
    //title
    for (int j = 0; j < table.getColumnCount(); j++) {
        String cellString = table.getColumn(j).getText();
        ws.addCell(new jxl.write.Label(j, rowIndex, cellString, normalCellStyle));
        ws.setColumnView(j, 30);
    }
    rowIndex++;
    //row
    for (int j = 0; j < table.getItemCount(); j++) {
        TableItem tableItem = table.getItem(j);
        for (int k = 0; k < table.getColumnCount(); k++) {
            String cellString = tableItem.getText(k);
            ws.addCell(new jxl.write.Label(k, rowIndex, cellString, normalCellStyle));
        }
        rowIndex++;
    }
}
Also used : TableItem(org.eclipse.swt.widgets.TableItem) WritableSheet(jxl.write.WritableSheet) WritableCellFormat(jxl.write.WritableCellFormat)

Example 9 with WritableSheet

use of jxl.write.WritableSheet in project cubrid-manager by CUBRID.

the class ExportTableDataTask method exportXls.

/**
	 * Export data as XLS file format
	 *
	 * @param rs CUBRIDResultSetProxy
	 * @param monitor IProgressMonitor
	 */
private void exportXls(CUBRIDResultSetProxy rs, final IProgressMonitor monitor) {
    // FIXME move this logic to core module
    WritableWorkbook workbook = null;
    try {
        int sheetNum = 0;
        workbook = Workbook.createWorkbook(file);
        if (fileCharset == null || fileCharset.trim().length() == 0) {
            workbook = Workbook.createWorkbook(file);
        } else {
            WorkbookSettings workbookSettings = new WorkbookSettings();
            workbookSettings.setEncoding(fileCharset);
            workbook = Workbook.createWorkbook(file, workbookSettings);
        }
        WritableSheet sheet = workbook.createSheet("Sheet " + sheetNum, sheetNum);
        // 65536: limit xls row number.
        int rowLimit = ImportFileConstants.XLS_ROW_LIMIT;
        // it set 257. Because Tbl's first column is oid value that doesn't export
        // 256: limit xls column number.
        int columnLimit = ImportFileConstants.XLS_COLUMN_LIMIT + 1;
        int cellCharacterLimit = ImportFileConstants.XLSX_CELL_CHAR_LIMIT;
        CUBRIDResultSetMetaDataProxy rsmt = (CUBRIDResultSetMetaDataProxy) rs.getMetaData();
        int colCount = rsmt.getColumnCount() + 1;
        isExit = false;
        for (int j = 1; j < colCount; j++) {
            String columnName = rsmt.getColumnName(j);
            String columnType = rsmt.getColumnTypeName(j);
            int precision = rsmt.getPrecision(j);
            columnType = columnType == null ? "" : columnType;
            setIsHasBigValue(columnType, precision);
            //the data length > XLS column character limit
            if (precision > cellCharacterLimit) {
                final String confirmMSG = Messages.bind(Messages.exportCharacterCountExceedWarnInfo, columnName);
                Display.getDefault().syncExec(new Runnable() {

                    public void run() {
                        if (!CommonUITool.openConfirmBox(confirmMSG)) {
                            isExit = true;
                        }
                    }
                });
                if (isExit) {
                    return;
                }
            }
            // first line add column name
            if (isFirstRowAsColumnName) {
                WritableFont wf = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, false);
                WritableCellFormat wcf = new WritableCellFormat(wf);
                if (columnName.length() > cellCharacterLimit) {
                    Label label = new Label(j - 1, 0, columnName.substring(0, cellCharacterLimit));
                    sheet.addCell(label);
                    label = null;
                } else {
                    Label label = new Label(j - 1, 0, columnName.toString(), wcf);
                    sheet.addCell(label);
                    label = null;
                }
                wcf = null;
                wf = null;
            }
        }
        if (colCount > columnLimit) {
            Display.getDefault().syncExec(new Runnable() {

                public void run() {
                    if (!CommonUITool.openConfirmBox(Messages.exportColumnCountOverWarnInfo)) {
                        isExit = true;
                    }
                }
            });
            if (isExit) {
                return;
            }
            colCount = columnLimit;
        }
        int xlsRecordNum = 0;
        if (isFirstRowAsColumnName) {
            xlsRecordNum = 1;
        }
        while (rs.next()) {
            if (!CommonUITool.isAvailableMemory(REMAINING_MEMORY_SIZE)) {
                throw new OutOfMemoryError();
            }
            for (int j = 1; j < colCount; j++) {
                String colType = rsmt.getColumnTypeName(j);
                colType = FieldHandlerUtils.amendDataTypeByResult(rs, j, colType);
                int precision = rsmt.getPrecision(j);
                setIsHasBigValue(colType, precision);
                Object cellValue = FieldHandlerUtils.getRsValueForExport(colType, rs, j, nullValue);
                if (cellValue instanceof Long) {
                    sheet.addCell(new Number(j - 1, xlsRecordNum, (Long) cellValue));
                } else if (cellValue instanceof Double) {
                    sheet.addCell(new Number(j - 1, xlsRecordNum, (Double) cellValue));
                } else if (cellValue instanceof Timestamp) {
                    String dataCellValue = FieldHandlerUtils.formatDateTime((Timestamp) cellValue);
                    sheet.addCell(new Label(j - 1, xlsRecordNum, dataCellValue));
                } else if (cellValue instanceof java.sql.Time) {
                    String dataCellValue = DateUtil.getDatetimeString(((java.sql.Time) cellValue).getTime(), FieldHandlerUtils.FORMAT_TIME);
                    sheet.addCell(new Label(j - 1, xlsRecordNum, dataCellValue));
                } else if (cellValue instanceof java.sql.Date) {
                    String dataCellValue = DateUtil.getDatetimeString(((java.sql.Date) cellValue).getTime(), FieldHandlerUtils.FORMAT_DATE);
                    sheet.addCell(new Label(j - 1, xlsRecordNum, dataCellValue));
                } else {
                    sheet.addCell(new Label(j - 1, xlsRecordNum, cellValue.toString().length() > cellCharacterLimit ? cellValue.toString().substring(0, cellCharacterLimit) : cellValue.toString()));
                }
            }
            xlsRecordNum++;
            if (((exportedCount + 1) % rowLimit) == 0) {
                sheetNum++;
                xlsRecordNum -= rowLimit;
                sheet = workbook.createSheet("Sheet " + sheetNum, sheetNum);
            }
            exportedCount++;
            monitor.worked(10);
            monitor.subTask(Messages.bind(Messages.msgExportDataRow, exportedCount));
        }
    } catch (Exception e) {
        throw new RuntimeException(e);
    } finally {
        try {
            if (workbook != null) {
                workbook.write();
            }
        } catch (Exception ignored) {
        }
        try {
            if (workbook != null) {
                workbook.close();
            }
        } catch (Exception ignored) {
        }
    }
}
Also used : WritableFont(jxl.write.WritableFont) Label(jxl.write.Label) WorkbookSettings(jxl.WorkbookSettings) WritableSheet(jxl.write.WritableSheet) WritableCellFormat(jxl.write.WritableCellFormat) Timestamp(java.sql.Timestamp) Date(java.util.Date) ParseException(java.text.ParseException) FileNotFoundException(java.io.FileNotFoundException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) SQLException(java.sql.SQLException) IOException(java.io.IOException) WritableWorkbook(jxl.write.WritableWorkbook) CUBRIDResultSetMetaDataProxy(com.cubrid.jdbc.proxy.driver.CUBRIDResultSetMetaDataProxy) Number(jxl.write.Number)

Example 10 with WritableSheet

use of jxl.write.WritableSheet in project cubrid-manager by CUBRID.

the class ImportResultDialog method writeExcel.

/**
	 * wirte error message to exlce
	 * @param file
	 */
public void writeExcel(File file) {
    // FIXME move this logic to core module
    WritableWorkbook wwb = null;
    try {
        wwb = Workbook.createWorkbook(file);
        WritableSheet ws = wwb.createSheet("error", 0);
        ws.setColumnView(0, 100);
        jxl.write.Label label = null;
        for (int i = 0; i < errorList.size(); i++) {
            label = new jxl.write.Label(0, i, errorList.get(i), getNormolCell());
            ws.addCell(label);
        }
        wwb.write();
        CommonUITool.openInformationBox(Messages.infoSuccess, Messages.importResultDialogWriteExcelSucessInfo);
    } catch (Exception e) {
        LOGGER.error("write excel error", e);
    } finally {
        if (wwb != null) {
            try {
                wwb.close();
            } catch (Exception ex) {
                LOGGER.error("close excel stream error", ex);
            }
        }
    }
}
Also used : WritableWorkbook(jxl.write.WritableWorkbook) WritableSheet(jxl.write.WritableSheet) WriteException(jxl.write.WriteException)

Aggregations

WritableSheet (jxl.write.WritableSheet)21 WritableCellFormat (jxl.write.WritableCellFormat)10 WritableWorkbook (jxl.write.WritableWorkbook)10 WriteException (jxl.write.WriteException)9 WorkbookSettings (jxl.WorkbookSettings)8 IOException (java.io.IOException)6 Constraint (com.cubrid.common.core.common.model.Constraint)5 Label (jxl.write.Label)5 SchemaComment (com.cubrid.common.core.schemacomment.model.SchemaComment)4 SQLException (java.sql.SQLException)4 Number (jxl.write.Number)4 File (java.io.File)3 InvocationTargetException (java.lang.reflect.InvocationTargetException)3 Timestamp (java.sql.Timestamp)3 ArrayList (java.util.ArrayList)3 WritableFont (jxl.write.WritableFont)3 TableItem (org.eclipse.swt.widgets.TableItem)3 DBAttribute (com.cubrid.common.core.common.model.DBAttribute)2 SchemaInfo (com.cubrid.common.core.common.model.SchemaInfo)2 ExportDataFailedOneTableEvent (com.cubrid.common.ui.cubrid.table.event.ExportDataFailedOneTableEvent)2