从JTable读取数据并将其保存到excel(java)
我正在和其他人一起做一个项目,我的工作之一是思考如何从image2本科详细表格中读取数据并将其保存到excel文件中。。。 到目前为止,这是我的代码,但我不知道如何继续从JTable读取数据并将其保存到excel(java),java,excel,jtable,Java,Excel,Jtable,我正在和其他人一起做一个项目,我的工作之一是思考如何从image2本科详细表格中读取数据并将其保存到excel文件中。。。 到目前为止,这是我的代码,但我不知道如何继续 package nbu.university.excel; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWri
package nbu.university.excel;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import nbu.university.scheduler.gui.SchedulerGui;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class SaveToExcel extends SchedulerGui
{
int bachelorsTabCount = getBachelorClassesSchedulesHolder().getTabCount();
int mastersTabCount = getMasterClassesSchedulesHolder().getTabCount();
int bachelorsIndex = getBachelorClassesSchedulesHolder().getSelectedIndex();
int mastersIndext = getMasterClassesSchedulesHolder().getSelectedIndex();
public void ReadDataFromTable(JTable table, File file)
{
String[] colNames = {"Signature", "gr.N", "Class", "for Semester", "Horarium", "max ppl in grp",
"Lecturer", "Day", "Hour", "Hall type", "requirements",};
String[][] dataToBeWritten;
for(int i = 0;i<=bachelorsTabCount; i++)
{
if (bachelorsIndex==1)
{
}
}
}
}
包nbu.university.excel;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.util.ArrayList;
导入javax.swing.JFileChooser;
导入javax.swing.JOptionPane;
导入javax.swing.filechooser.FileFilter;
导入javax.swing.filechooser.FileNameExtensionFilter;
导入javax.swing.JTable;
导入javax.swing.table.DefaultTableModel;
导入javax.swing.table.TableModel;
导入nbu.university.scheduler.gui.SchedulerGui;
导入org.apache.poi.hssf.usermodel.HSSFCell;
导入org.apache.poi.hssf.usermodel.HSSFRichTextString;
导入org.apache.poi.hssf.usermodel.HSSFRow;
导入org.apache.poi.hssf.usermodel.HSSFSheet;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
公共类SaveToExcel扩展SchedulerGui
{
int bachelorsTabCount=GetBachelorcAssesscheduleSholder().getTabCount();
int mastersTabCount=getMasterClassesSchedulesHolder().getTabCount();
int bachelorsIndex=GetBachelorcAssesscheduleSholder().getSelectedIndex();
int mastersIndext=getMasterClassesSchedulesHolder().getSelectedIndex();
public void ReadDataFromTable(JTable表、文件)
{
字符串[]colNames={“签名”、“gr.N”、“班级”、“学期”、“小时数”、“grp中的最大ppl”,
“讲师”、“日”、“时”、“厅式”、“要求”、};
字符串[][]要写入的数据;
对于(int i=0;i)设置
对于(int i=0;i<4;i++)
{
JTabbedPane classTab=新的JTabbedPane();
ShortClassScheduleTable ShortClassScheduleTable=新的ShortClassScheduleTable(clasess.get(0),
在同一时间,有几个讲座,
这),;
shortClassScheduleTable.setClassType(0);
shortClassScheduleTable.setClassNumber(i);
classTab.add(internationalization.getLabel(“classLabel”)+“”+(i+学士学位\班级\开始学年)
+“周表”,shortClassScheduleTable);
ClassScheduleTable ClassScheduleTable=新的ClassScheduleTable(clasess.get(0));
ClassScheduleTable.setClassType(0);
classSchedulerTable.setClassNumber(i);
classTab.add(internationalization.getLabel(“classLabel”)+“”+(i+学士学位\班级\开始学年)
+“明细表”,类别可调度);
GetBacheLorCachedleSholder().addTab(internationalization.getLabel(“classLabel”)+“”
+(i+学士学位、班级、开始学年)、班级选项卡);
}
//将主类计划添加到ClasseScheduleSholder
对于(int i=0;i<4;i++)
{
JTabbedPane classTab=新的JTabbedPane();
ShortClassScheduleTable ShortClassScheduleTable=新的ShortClassScheduleTable(clasess.get(0),
在同一时间,有几个讲座,
这),;
shortClassScheduleTable.setClassType(1);
shortClassScheduleTable.setClassNumber(i);
//待办事项
classTab.add(internationalization.getLabel(“masterClassLabel”)+“”
+(i+硕士班开始年)+“周表”,shortClassScheduleTable);
classTab.add(internationalization.getLabel(“masterClassLabel”)+“”
+(一级+硕士班+起始年)+“明细表”,
新的类调度表(clases.get(0));
GetMasterClasseScheduleSholder().addTab(internationalization.getLabel(“masterClassLabel”)+“”
+(i+硕士班、起始年)、课程表);
classTab.getComponent(1);
}
}
第一个图像
第二个图像
好的,我已经完成了阅读部分。但是现在我不明白我在将它导出到excel文件时哪里做错了。我总是得到一个空文件,并抛出很多异常
package nbu.university.excel;
import java.awt.Component;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
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;
import org.apache.poi.ss.usermodel.Workbook;
import nbu.university.scheduler.exception.SchedulerException;
import nbu.university.scheduler.gui.ClassScheduleTable;
public class SaveToExcel {
private JTabbedPane schedulesHolder;
private String techersFilePathStr;
public SaveToExcel(JTabbedPane schedulesHolder, String techersFilePathStr) {
if (schedulesHolder == null) {
throw new SchedulerException("schedulesHolder cannot be null");
}
if(techersFilePathStr == null){
throw new SchedulerException("techersFilePathStr cannot be null");
}
this.schedulesHolder = schedulesHolder;
this.techersFilePathStr = techersFilePathStr;
}
public void save() throws IOException {
JTabbedPane bachelorClassesSchedulesHolder = (JTabbedPane) schedulesHolder
.getComponent(0);
JTabbedPane masterClassesSchedulesHolder = (JTabbedPane) schedulesHolder
.getComponent(1);
List<DefaultTableModel> listDefaultTableModel = new ArrayList<DefaultTableModel>();
for (Component component1 : schedulesHolder.getComponents()) {
JTabbedPane classesSchedulesHolder = ((JTabbedPane) component1);
for (Component component2 : classesSchedulesHolder.getComponents()) {
JTabbedPane inerJtabbedPane = (JTabbedPane) component2;
if (inerJtabbedPane.getComponentCount() > 1) {
Component tableComponent = ((JTabbedPane) component2)
.getComponentAt(1);
ClassScheduleTable panel = ((ClassScheduleTable) tableComponent);
DefaultTableModel model = panel.getDm();
listDefaultTableModel.add(model);
}
}
}
saveSheet(listDefaultTableModel);
}
private void saveSheet(List<DefaultTableModel> listDefaultTableModel) throws IOException {
// save
for (DefaultTableModel model : listDefaultTableModel) {
FileWriter saveFile = new FileWriter(techersFilePathStr);
for(int i=0; i<model.getColumnCount();i++)
{
saveFile.write(model.getColumnName(i)+"\t");
}
saveFile.write("\n");
for(int i=0;i<model.getColumnCount();i++)
{
for(int j=0;j<model.getRowCount();j++){
saveFile.write(model.getValueAt(i, j).toString()+"\t");
}
saveFile.write("\n");
}
saveFile.close();
System.out.println("In saveSheetLoop");
}
}
}
包nbu.university.excel;
导入java.awt.Component;
导入java.io.BufferedWriter;
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.io.Writer;
导入java.util.ArrayList;
导入java.util.Iterator;
导入java.util.List;
导入java.util.Vector;
导入javax.swing.JTabbedPane;
导入javax.swing.JTable;
导入javax.swing.table.DefaultTableModel;
导入javax.swing.table.TableModel;
导入org.apache.poi.hssf.usermodel.HSSFCell;
导入org.apache.poi.hssf.usermodel.HSSFCellStyle;
导入org.apache.poi.hssf.usermodel.hssfont;
导入org.apache.poi.hssf.usermodel.HSSFRow;
导入org.apache.poi.hssf.usermodel.HSSFSheet;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.poi.ss.usermodel.工作簿;
导入nbu.university.scheduler.exception.SchedulerException;
导入nbu.university.scheduler.gui.ClassScheduleTable;
公共类SaveToExcel{
专用JTabbedPane调度文件夹;
私有字符串techersFilePathStr;
public SaveToExcel(JTabbedPane schedulesHolder,字符串techersFilePathStr){
if(schedulesHolder==null){
抛出新ScheduleException(“schedulesHolder不能为null”);
}
if(techersFilePathStr==null){
抛出新时间表
package nbu.university.excel;
import java.awt.Component;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
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;
import org.apache.poi.ss.usermodel.Workbook;
import nbu.university.scheduler.exception.SchedulerException;
import nbu.university.scheduler.gui.ClassScheduleTable;
public class SaveToExcel {
private JTabbedPane schedulesHolder;
private String techersFilePathStr;
public SaveToExcel(JTabbedPane schedulesHolder, String techersFilePathStr) {
if (schedulesHolder == null) {
throw new SchedulerException("schedulesHolder cannot be null");
}
if(techersFilePathStr == null){
throw new SchedulerException("techersFilePathStr cannot be null");
}
this.schedulesHolder = schedulesHolder;
this.techersFilePathStr = techersFilePathStr;
}
public void save() throws IOException {
JTabbedPane bachelorClassesSchedulesHolder = (JTabbedPane) schedulesHolder
.getComponent(0);
JTabbedPane masterClassesSchedulesHolder = (JTabbedPane) schedulesHolder
.getComponent(1);
List<DefaultTableModel> listDefaultTableModel = new ArrayList<DefaultTableModel>();
for (Component component1 : schedulesHolder.getComponents()) {
JTabbedPane classesSchedulesHolder = ((JTabbedPane) component1);
for (Component component2 : classesSchedulesHolder.getComponents()) {
JTabbedPane inerJtabbedPane = (JTabbedPane) component2;
if (inerJtabbedPane.getComponentCount() > 1) {
Component tableComponent = ((JTabbedPane) component2)
.getComponentAt(1);
ClassScheduleTable panel = ((ClassScheduleTable) tableComponent);
DefaultTableModel model = panel.getDm();
listDefaultTableModel.add(model);
}
}
}
saveSheet(listDefaultTableModel);
}
private void saveSheet(List<DefaultTableModel> listDefaultTableModel) throws IOException {
// save
for (DefaultTableModel model : listDefaultTableModel) {
FileWriter saveFile = new FileWriter(techersFilePathStr);
for(int i=0; i<model.getColumnCount();i++)
{
saveFile.write(model.getColumnName(i)+"\t");
}
saveFile.write("\n");
for(int i=0;i<model.getColumnCount();i++)
{
for(int j=0;j<model.getRowCount();j++){
saveFile.write(model.getValueAt(i, j).toString()+"\t");
}
saveFile.write("\n");
}
saveFile.close();
System.out.println("In saveSheetLoop");
}
}
}
TableToExcel tte = new TableToExcel(myTable, null, "My Table");
//optional -> tte.setCustomTitles(colTitles);
tte.generate(myFile);
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Timestamp;
import java.util.List;
import javax.swing.JTable;
import javax.swing.table.TableModel;
import org.apache.commons.lang.exception.NestableException;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.usermodel.contrib.HSSFCellUtil;
import org.apache.poi.ss.usermodel.contrib.CellUtil;
/**
*
* @author Guy Bashan, modified by Khosiawan
*/
public class TableToExcel {
private HSSFWorkbook workbook;
private HSSFSheet sheet;
private HSSFFont boldFont;
private HSSFDataFormat format;
private ResultSet resultSet;
private FormatType[] formatTypes;
private List<String> colTitles;
private JTable tbl;
private TableModel tm;
/**
* Prepare an excel writer with a ResultSet data-source.
*
* @param rs
* @param formatTypes - to autodetect the formatTypes, set it to null
* @param sheetName
*/
public TableToExcel(ResultSet rs, FormatType[] formatTypes, String sheetName) {
initPart();
this.resultSet = rs;
this.formatTypes = formatTypes;
sheet = workbook.createSheet(sheetName);
}
/**
* Prepare an excel writer with a JTable data-source.
*
* @param tbl
* @param formatTypes - to autodetect the formatTypes, set it to null
* @param sheetName
*/
public TableToExcel(JTable tbl, FormatType[] formatTypes, String sheetName) {
initPart();
this.tbl = tbl;
this.formatTypes = formatTypes;
sheet = workbook.createSheet(sheetName);
}
/**
* Prepare an excel writer with a TableModel data-source.
*
* @param tm
* @param formatTypes - to autodetect the formatTypes, set it to null
* @param sheetName
*/
public TableToExcel(TableModel tm, FormatType[] formatTypes, String sheetName) {
initPart();
this.tm = tm;
this.formatTypes = formatTypes;
sheet = workbook.createSheet(sheetName);
}
private void initPart() {
workbook = new HSSFWorkbook();
boldFont = workbook.createFont();
boldFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
format = workbook.createDataFormat();
}
/**
* Defining custom column titles (headers), rather than using the default
* column name from the database.
*
* @param headers
*/
public void setCustomTitles(List<String> headers) {
this.colTitles = headers;
}
private FormatType getFormatType(Class _class) {
if (_class == Integer.class || _class == Long.class) {
return FormatType.INTEGER;
} else if (_class == Float.class || _class == Double.class) {
return FormatType.FLOAT;
} else if (_class == Timestamp.class || _class == java.sql.Date.class) {
return FormatType.DATE;
} else {
return FormatType.TEXT;
}
}
private void generateFromResultSet(OutputStream outputStream) throws Exception {
try {
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
if (formatTypes != null && formatTypes.length != resultSetMetaData.getColumnCount()) {
throw new IllegalStateException("Number of types is not identical to number of resultset columns. "
+ "Number of types: " + formatTypes.length + ". Number of columns: " + resultSetMetaData.getColumnCount());
}
int currentRow = 0;
HSSFRow row = sheet.createRow(currentRow);
int numCols = resultSetMetaData.getColumnCount();
boolean isAutoDecideFormatTypes;
if (isAutoDecideFormatTypes = (formatTypes == null)) {
formatTypes = new FormatType[numCols];
}
for (int i = 0; i < numCols; i++) {
String title;
if (colTitles != null && i < colTitles.size()) {
title = colTitles.get(i);
} else {
title = tbl != null ? tbl.getColumnName(i) : tm.getColumnName(i);
}
writeCell(row, i, title, FormatType.TEXT, boldFont);
if (isAutoDecideFormatTypes) {
Class _class = Class.forName(resultSetMetaData.getColumnClassName(i + 1));
formatTypes[i] = getFormatType(_class);
}
}
currentRow++;
// Write report rows
while (resultSet.next()) {
row = sheet.createRow(currentRow++);
for (int i = 0; i < numCols; i++) {
Object value = resultSet.getObject(i + 1);
writeCell(row, i, value, formatTypes[i]);
}
}
// Autosize columns
for (int i = 0; i < numCols; i++) {
sheet.autoSizeColumn((short) i);
}
workbook.write(outputStream);
} finally {
outputStream.close();
}
}
private void generateFromTable(OutputStream outputStream) throws Exception {
try {
int numCols = tbl != null ? tbl.getColumnCount() : tm.getColumnCount();
if (formatTypes != null && formatTypes.length != numCols) {
throw new IllegalStateException("Number of types is not identical to number of resultset columns. "
+ "Number of types: " + formatTypes.length + ". Number of columns: " + numCols);
}
int currentRow = 0;
HSSFRow row = sheet.createRow(currentRow);
boolean isAutoDecideFormatTypes;
if (isAutoDecideFormatTypes = (formatTypes == null)) {
formatTypes = new FormatType[numCols];
}
for (int i = 0; i < numCols; i++) {
String title;
if (colTitles != null && i < colTitles.size()) {
title = colTitles.get(i);
} else {
title = tbl != null ? tbl.getColumnName(i) : tm.getColumnName(i);
}
writeCell(row, i, title, FormatType.TEXT, boldFont);
if (isAutoDecideFormatTypes) {
Class _class = tbl != null ? tbl.getColumnClass(i) : tm.getColumnClass(i);
formatTypes[i] = getFormatType(_class);
}
}
currentRow++;
// Write report rows
int len = tbl != null ? tbl.getRowCount() : tm.getRowCount();
for (int j = 0; j < len; j++) {
row = sheet.createRow(currentRow++);
for (int i = 0; i < numCols; i++) {
Object value = tbl != null ? tbl.getValueAt(j, i) : tm.getValueAt(j, i);
writeCell(row, i, value, formatTypes[i]);
}
}
// Autosize columns
for (int i = 0; i < numCols; i++) {
sheet.autoSizeColumn((short) i);
}
workbook.write(outputStream);
} finally {
outputStream.close();
}
}
/**
* Generate file excel from the data-source.
*
* @param file - output file
* @throws Exception
*/
public void generate(File file) throws Exception {
if (resultSet != null) {
generateFromResultSet(new FileOutputStream(file));
} else if (tbl != null || tm != null) {
generateFromTable(new FileOutputStream(file));
} else {
HMOptionPane.showMsgDialog(null, "Data source is null!");
}
}
private void writeCell(HSSFRow row, int col, Object value, FormatType formatType) throws NestableException {
writeCell(row, col, value, formatType, null, null);
}
private void writeCell(HSSFRow row, int col, Object value, FormatType formatType, HSSFFont font) throws NestableException {
writeCell(row, col, value, formatType, null, font);
}
private void writeCell(HSSFRow row, int col, Object value, FormatType formatType,
Short bgColor, HSSFFont font) throws NestableException {
HSSFCell cell = HSSFCellUtil.createCell(row, col, null);
if (value == null) {
return;
}
if (font != null) {
HSSFCellStyle style = workbook.createCellStyle();
style.setFont(font);
cell.setCellStyle(style);
}
switch (formatType) {
case TEXT:
cell.setCellValue(value.toString());
break;
case INTEGER:
cell.setCellValue(((Number) value).intValue());
HSSFCellUtil.setCellStyleProperty(cell, workbook, CellUtil.DATA_FORMAT,
HSSFDataFormat.getBuiltinFormat(("#,##0")));
break;
case FLOAT:
cell.setCellValue(((Number) value).doubleValue());
HSSFCellUtil.setCellStyleProperty(cell, workbook, CellUtil.DATA_FORMAT,
HSSFDataFormat.getBuiltinFormat(("#,##0.00")));
break;
case DATE:
cell.setCellValue((Timestamp) value);
HSSFCellUtil.setCellStyleProperty(cell, workbook, CellUtil.DATA_FORMAT,
HSSFDataFormat.getBuiltinFormat(("m/d/yy")));
break;
case MONEY:
cell.setCellValue(((Number) value).intValue());
HSSFCellUtil.setCellStyleProperty(cell, workbook,
CellUtil.DATA_FORMAT, format.getFormat("($#,##0.00);($#,##0.00)"));
break;
case PERCENTAGE:
cell.setCellValue(((Number) value).doubleValue());
HSSFCellUtil.setCellStyleProperty(cell, workbook,
CellUtil.DATA_FORMAT, HSSFDataFormat.getBuiltinFormat("0.00%"));
}
if (bgColor != null) {
HSSFCellUtil.setCellStyleProperty(cell, workbook, CellUtil.FILL_FOREGROUND_COLOR, bgColor);
HSSFCellUtil.setCellStyleProperty(cell, workbook, CellUtil.FILL_PATTERN, HSSFCellStyle.SOLID_FOREGROUND);
}
}
public enum FormatType {
TEXT,
INTEGER,
FLOAT,
DATE,
MONEY,
PERCENTAGE
}
}