从JTable读取数据并将其保存到excel(java)

从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

我正在和其他人一起做一个项目,我的工作之一是思考如何从image2本科详细表格中读取数据并将其保存到excel文件中。。。 到目前为止,这是我的代码,但我不知道如何继续

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