在java中使用excel表

时间:2017-06-12 21:34:38

标签: java excel prompt

我是二年级学生。我必须完成我的java项目,但如果你们中的任何人都可以提供帮助,我将面临一些问题。我的项目是使用java输入excel工作表中的学生标记并计算标记的平均值。我写了下面的代码,但效果不好......

这是我的代码......

import java.util.*;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.*; 
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.*;
import java.io.*;

public class exceluser {

    public static void main(String[] args){

        String St_Id = "";
        String Name = "";
        int Marks = 0;
        boolean keepRunning = true;


        //Blank workbook
        HSSFWorkbook workbook = new HSSFWorkbook();
        //Blank sheet
        HSSFSheet sheet = workbook.createSheet("Seating Details");

        //create heading

        Row rowHeading = sheet.createRow(0);
        rowHeading.createCell(0).setCellValue("Student ID");
        rowHeading.createCell(1).setCellValue("Student(s) Name");
        rowHeading.createCell(2).setCellValue("Marks");

        //Font size and style loop for my headers


        for(int i = 0; i < 3; i++)
        {
            CellStyle stylerowHeading = workbook.createCellStyle();
            Font font = workbook.createFont();
            font.setBold(true);
            font.setFontName(HSSFFont.FONT_ARIAL);
            font.setFontHeightInPoints((short) 11);
            stylerowHeading.setFont(font);
            rowHeading.getCell(i).setCellStyle(stylerowHeading);
        }
        int rownum=1;

        while(keepRunning){
            Scanner scnr = new Scanner(System.in);

            System.out.print("Enter student ID : ");
            St_Id = scnr.nextLine();
            if(St_Id.equals("EXIT"))
            {
                System.out.print("You have ended the program");
                System.exit(0);
            }

            else
            {
                System.out.print("Enter the student name : ");
                Name = scnr.nextLine();
                System.out.print("Enter the marks of the student :  ");
                Marks = scnr.nextInt();

                //This data needs to be written (Object[])
                Map <String, Object[]> data = new TreeMap<String, Object[]>();
                data.put("2", new Object[] {St_Id, Name, Marks});

                //Iterate over data and write to sheet
                Set<String> keyset = data.keySet();

                for(String Key : keyset)
                {
                    Row row = sheet.createRow(rownum++);
                    Object [] objArr = data.get(Key);
                    int cellnum = 0;
                    for(Object obj : objArr)
                    {
                        Cell cell = row.createCell(cellnum++);
                        if(obj instanceof String)
                        {
                            cell.setCellValue((String)obj);
                        }
                        else if(obj instanceof Integer)

                            cell.setCellValue((Integer)obj);
                    }
                }
                if(!(St_Id.equals("EXIT")))
                {
                    rownum++;
                }

                //Auto size my columns that will be filled out with user input info.            
                for (int i = 0; i < 3; i++)
                {
                    sheet.autoSizeColumn(i);
                }
            }
            try{

                //save to excel file
                FileOutputStream out = new FileOutputStream(new File("Student Grading Report.xls"));
                workbook.write(out);
                out.flush();
                out.close();
                System.out.println("Record added Succesfully...");
            } catch (FileNotFoundException e) {

                e.printStackTrace();

            } catch (IOException e){

                e.printStackTrace();

            } catch (Exception e) {

                System.out.println(e.getMessage());
            }
        } 

    }//pub static void end brace    
}//pub class end brace

如果有人可以在这段代码中帮助我...这段代码在执行时在输入一个学生数据后在excel中留下一行而m面临发现学生平均分数的问题.. ???

1 个答案:

答案 0 :(得分:1)

这是一项任务,所以我不会给你代码,但会给你一些要考虑的要点。

  • 你真的应该为不同的任务使用不同的方法 - 这将使你的代码更容易理解,也更容易编写和调试。

  • 您目前只能为学生输入一个标记。您可能希望将地图放在循环之外,并将密钥作为学生ID,并为学生标记使用ArrayList整数。更好的方法是创建一个Student类来保存这些数据。

  • 要计算平均值,您只需计算该学生列表中的平均值

  • 不要使用System.exit(0)退出程序,而是使用它将keepRunning布尔值设置为false以从循环中断开。

  • 在更改上述内容后,请考虑将代码写入循环外的文件中。