Pregunta

Hello I am trying to Export Jtable Data into the Excel Sheet using HSSFWorkbook. and i am getting all the content what Table have but i am not getting Table Headers please can anyone help for the same.

Here the Command used for Taking content of the Jtable.

        try {
                    HSSFWorkbook fWorkbook = new HSSFWorkbook();
                    HSSFSheet fSheet = fWorkbook.createSheet("new Sheet");
                    HSSFFont sheetTitleFont = fWorkbook.createFont();
                    File file = new File("/home/kishan/NetBeansProjects/JavaChecking/src/com/verve/SwingChecking/book.xls");
                    HSSFCellStyle cellStyle = fWorkbook.createCellStyle();

                    sheetTitleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
                    //sheetTitleFont.setColor();
                    TableModel model = jTable1.getModel();


                    for (int i = 0; i < model.getRowCount(); i++) {
                        HSSFRow fRow = fSheet.createRow((short) i);
                        for (int j = 0; j < model.getColumnCount(); j++) {
                            HSSFCell cell = fRow.createCell((short) j);
                            cell.setCellValue(model.getValueAt(i, j).toString());
                            cell.setCellStyle(cellStyle);

                        }

                    }
    FileOutputStream fileOutputStream;
                fileOutputStream = new FileOutputStream(file);
                BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);
                fWorkbook.write(bos);
                bos.close();
                fileOutputStream.close();
    }catch(Exception e){

        }



for (int i = 0; i < model.getColumnCount(); i++) {
                HSSFRow fRow = fSheet.createRow((short) i);
                for(int j = 0; j < model.getColumnCount(); j++) {
                    HSSFCell cell = fRow.createCell((short) j);
                    cell.setCellValue(model.getValueAt(i, j).toString());

                    System.out.println(model.getColumnName(j));
                }
            }

last for loop is not addind data of table header.enter image description here

and i am getting this excel file

enter image description here how to get Table header along with that??

¿Fue útil?

Solución 2

Something like this to add Column Names in the first row of your sheet:

TableColumnModel tcm = jTable1.getColumnModel();
HSSFRow fRow = fSheet.createRow((short) 0);

for(int j = 0; j < tcm.getColumnCount(); j++) {

   HSSFCell cell = fRow.createCell((short) j);
   cell.setCellValue(tcm.getColumn(j).getHeaderValue().toString());           

}

You could run this first and then add the table data starting from the second row.

Otros consejos

Here's my implementation of the HSSF Workbook from the answers in this thread.

I created a class ExcelWriter then a Method Writer which takes two parameters; the JTable and the FileLocation to be used.

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.JTable;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author oluwajayi
 */
public class ExcelWriter {

    public static void Writer (JTable jTable1, String Location) throws FileNotFoundException, IOException {

                HSSFWorkbook fWorkbook = new HSSFWorkbook();
                HSSFSheet fSheet = fWorkbook.createSheet("new Sheet");
                HSSFFont sheetTitleFont = fWorkbook.createFont();
                HSSFCellStyle cellStyle = fWorkbook.createCellStyle();
                sheetTitleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
                //sheetTitleFont.setColor();
                TableModel model = jTable1.getModel();

                //Get Header
                TableColumnModel tcm = jTable1.getColumnModel();
                HSSFRow hRow = fSheet.createRow((short) 0);
                for(int j = 0; j < tcm.getColumnCount(); j++) {                       
                   HSSFCell cell = hRow.createCell((short) j);
            cell.setCellValue(tcm.getColumn(j).getHeaderValue().toString());
                   cell.setCellStyle(cellStyle);
                }

                //Get Other details
                for (int i = 0; i < model.getRowCount(); i++) {
                    HSSFRow fRow = fSheet.createRow((short) i+1);
                    for (int j = 0; j < model.getColumnCount(); j++) {
                        HSSFCell cell = fRow.createCell((short) j);
                        cell.setCellValue(model.getValueAt(i, j).toString());
                        cell.setCellStyle(cellStyle);
                    }
                }
            FileOutputStream fileOutputStream;
            fileOutputStream = new FileOutputStream(Location);
    try (BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream)) {
        fWorkbook.write(bos);
    }
            fileOutputStream.close();
}
}

you are only writing the data in the TableModel to the workbook. This model does not contain the table header. Take a look at JTable.getTableHeader()

for example:

public class JTableExport {

public static void main(String[] args) {
    Object[] columnNames = new Object[] {"column1", "column2"};
    JTable table = new JTable(new Object[0][0], columnNames);
    TableColumnModel model = table.getTableHeader().getColumnModel();

    for (int i = 0; i < model.getColumnCount(); i++) {
        System.out.println(model.getColumn(i).getHeaderValue());
    }
}
}

this code prints

column1
column2

for(int j = 0; j < tcm.getColumnCount(); j++) {

HSSFCell cell = fRow.createCell((short) j); cell.setCellValue(tcm.getColumn(j).getHeaderValue().toString());

}

for(int j = 0; j < tcm.getRowCount(); j++) {

HSSFCell cell = fRow.createCell((short) j); cell.setCellValue(tcm.getColumn(j).getHeaderValue().toString());

}

I created this code:

public void Export() {

    JFileChooser save = new JFileChooser();
    save.setDialogTitle("Save as...");
    save.setFileFilter(new FileNameExtensionFilter("xls", "xlsx", "xlsm"));
    int choose = save.showSaveDialog(null);

    if(choose == JFileChooser.APPROVE_OPTION) {
        XSSFWorkbook export = new XSSFWorkbook();
        XSSFSheet sheet1 = export.createSheet("new file");
        try{
            TableModel tableModel = showQuery.getModel();

            for(int i=0; i<tableModel.getRowCount(); i++) {
                XSSFRow newRow = sheet1.createRow(i);
                for(int j=0; j<tableModel.getColumnCount(); j++) {
                    XSSFCell newCell = newRow.createCell((short) j);
                    if(i==0){
                        XSSFCellStyle style = export.createCellStyle();
                        style.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex());
                        style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
                        style.setBorderBottom(BorderStyle.THIN);
                        style.setBorderTop(BorderStyle.THIN);
                        style.setBorderLeft(BorderStyle.THIN);
                        style.setBorderRight(BorderStyle.THIN);
                        newCell.setCellStyle(style);
                        newCell.setCellValue(tableModel.getColumnName(j));
                    } else {
                        XSSFCellStyle style = export.createCellStyle();
                        style.setBorderBottom(BorderStyle.THIN);
                        style.setBorderTop(BorderStyle.THIN);
                        style.setBorderLeft(BorderStyle.THIN);
                        style.setBorderRight(BorderStyle.THIN);
                        newCell.setCellStyle(style);
                    newCell.setCellValue(tableModel.getValueAt(i, j).toString());
                    }
                }
            }

            FileOutputStream otp = new FileOutputStream(save.getSelectedFile()+".xlsx");
            BufferedOutputStream bos = new BufferedOutputStream(otp);
            export.write(bos);
            bos.close();
            otp.close();

            JOptionPane.showMessageDialog(null, "Arquivo exprtado com sucesso!");
        }catch(Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top