Экспорт Jtable в Excelsheet с использованием HSSFWorkbook
Здравствуйте, я пытаюсь экспортировать данные Jtable в лист Excel с помощью HSSFWorkbook. и я получаю весь контент, который есть в таблице, но я не получаю заголовки таблиц, пожалуйста, кто-нибудь может помочь в этом.
Здесь команда используется для получения содержимого 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
как получить заголовок таблицы вместе с этим??
5 ответов
Примерно так, чтобы добавить имена столбцов в первую строку вашего листа:
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 из ответов в этой теме.
Я создал класс 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 HSSFCell cell = fRow.createCell((короткий) j); cell.setCellValue (tcm.getColumn (J).getHeaderValue() ToString ().); } for(int j = 0; j HSSFCell cell = fRow.createCell((короткий) j); cell.setCellValue (tcm.getColumn (J).getHeaderValue() ToString ().); }
Я создал этот код:
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);
}
}
}