使用HSSFWorkbook将Jtable导出到Excelsheet中

您好,我正在尝试使用HSSFWorkbook将Jtable数据导出到Excel工作表。 我得到所有表格的内容,但我没有得到表头,请任何人都可以帮助相同。

这里用于获取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)); } } 

最后一个for循环不是表头的addind数据。 在这里输入图像描述

我得到这个excel文件

在这里输入图像说明 如何获得表头和那个?

像这样的东西,在你的工作表的第一行添加列名称:

 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()); } 

你可以先运行这个,然后从第二行开始添加表格数据。

这里是我在这个线程中的答案的HSSF工作簿的实现。

我创build了一个类ExcelWriter然后是一个方法编写器,它需要两个参数; JTable和要使用的FileLocation

 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(); } } 

您只是将TableModel的数据写入工作簿。 此模型不包含表头。 看看JTable.getTableHeader()

例如:

 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()); } } } 

这个代码打印

 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());

}

我创build了这个代码:

 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); } } }