2012-12-21 239 views
3

我在我的View上有一個SWT表格,其中有五列。將SWT表格數據導出到Excel電子表格

我想要做的是將該表中的數據導出爲Excel電子表格。我想要跟隨發生。

  1. 表中的列標題應出現在電子表格中。

  2. 所有數據應該有我選擇的字體。

  3. 所有電子表格單元格應該有我選擇的寬度。

  4. 所有的單元格格式應該是'文本'。

有人能指點我朝着正確的方向嗎?謝謝。

回答

1

我使用的Apache POI到TableViewer的內容轉儲到Excel工作簿中有良好的效果。

下面是一個示例方法,用於創建包含給定TableViewer內容的XSSFWorkbook。它包含樣式單元和自動調整列寬的示例。

請注意,我在名爲tableColumnNames的字符串數組中使用了列名,因爲它們在我的代碼中用於其他地方,並且使用該數組很方便,但您也可以從TableViewer中將它們進行種植。

private XSSFWorkbook createWorkbookFromTable(TableViewer table) { 
    // create a workbook 
    XSSFWorkbook wb = new XSSFWorkbook(); 

    // add a worksheet 
    XSSFSheet sheet = wb.createSheet("My Table Data"); 

    // shade the background of the header row 
    XSSFCellStyle headerStyle = wb.createCellStyle(); 
    headerStyle.setFillForegroundColor(IndexedColors.LEMON_CHIFFON.getIndex()); 
    headerStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); 
    headerStyle.setBorderTop(CellStyle.BORDER_THIN); 
    headerStyle.setBorderBottom(CellStyle.BORDER_THIN); 
    headerStyle.setBorderLeft(CellStyle.BORDER_THIN); 
    headerStyle.setBorderRight(CellStyle.BORDER_THIN); 
    headerStyle.setAlignment(HorizontalAlignment.CENTER); 

    // add header row 
    Table table = table.getTable(); 
    TableColumn[] columns = table.getColumns(); 
    int rowIndex = 0; 
    int cellIndex = 0; 
    XSSFRow header = sheet.createRow((short) rowIndex++); 
    for (TableColumn column : columns) { 
     String columnName = column.getText(); 
     XSSFCell cell = header.createCell(cellIndex++); 
     cell.setCellValue(column.getText()); 
     cell.setCellStyle(headerStyle); 
    } 

    // add data rows 
    TableItem[] items = table.getTable().getItems(); 
    for (TableItem item : items) { 
     // create a new row 
     XSSFRow row = sheet.createRow((short) rowIndex++); 
     cellIndex = 0; 

     for (int i = 0; i < columns.length; i++) { 
      // create a new cell 
      String columnName = tableColumnNames[i]; 
      XSSFCell cell = row.createCell(cellIndex++); 

      // set the horizontal alignment (default to RIGHT) 
      XSSFCellStyle cellStyle = wb.createCellStyle(); 
      ha = HorizontalAlignment.RIGHT; 
      cellStyle.setAlignment(ha); 
      cell.setCellStyle(cellStyle); 

      // set the cell's value 
      String text = item.getText(i); 
      cell.setCellValue(text); 
     } 
    } 

    // autofit the columns 
    for (int i = 0; i < columns.length; i++) { 
     sheet.autoSizeColumn((short) i); 
    } 

    return wb; 
} 

一旦你得到了XSSFWorkbook,您可以將其轉儲到像這樣的文件:

public void dumpWorkbookToAFile(XSSFWorkbook wb, String filename) { 
    try { 
     FileOutputStream fos = new FileOutputStream(filename); 
     wb.write(fos); 
     fos.close(); 
     MessageDialog.openInformation(shell, 
      "Save Workbook Successful", 
      "Workbook saved to the file:\n\n" + filename); 
    } catch (IOException ioe) { 
     ioe.printStackTrace(); 
     String msg = ioe.getMessage(); 
     MessageDialog.openError(shell, 
      "Save Workbook Failed", 
      "Could not save workbook to the file:\n\n" + msg); 
    } 
} 
0

我會使用OpenOffice SDK以編程方式創建電子表格。但是,必須安裝它,並且該服務必須在用戶使用該視圖時運行。我不知道你的情況是否可以接受。

相關問題