Java 如何使用ApachePOI增加excel中的行

Java 如何使用ApachePOI增加excel中的行,java,excel,apache,Java,Excel,Apache,我正在编写一个程序,使用java和ApachePOI将员工座位记录写入excel工作表。该程序将提示用户输入办公桌号码、员工姓名以及坐在办公桌旁的员工人数。我的问题是,程序只写入用户输入的最后一个信息,删除了先前在该行中输入的信息。如何保留excel工作表第一行中输入的内容?我将它设置在一个循环中,在用户进入退出之前,用户将一直被提示输入座位信息。我希望它在每次输入新信息时向下递增一行 这就是我到目前为止所做的: import java.util.*; import org.apache.poi

我正在编写一个程序,使用java和ApachePOI将员工座位记录写入excel工作表。该程序将提示用户输入办公桌号码、员工姓名以及坐在办公桌旁的员工人数。我的问题是,程序只写入用户输入的最后一个信息,删除了先前在该行中输入的信息。如何保留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 EmployeeSeatingRep {

public static void main(String[] args){

    String deskNumber = "";
    String employeeName = "";
    int empsAtDesk = 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("Desk:");
        rowHeading.createCell(1).setCellValue("Employee(s)Name:");
        rowHeading.createCell(2).setCellValue("Number At Desk:");

//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);
            stylerowHeading.setVerticalAlignment(CellStyle.ALIGN_CENTER);
            rowHeading.getCell(i).setCellStyle(stylerowHeading);
        }
    while(keepRunning){
        Scanner scnr = new Scanner(System.in);

        System.out.print("Enter desk number: ");
        deskNumber = scnr.nextLine();
        if(deskNumber.equals("EXIT"))
        {
            System.out.print("You have ended the program");
            System.exit(0);
        }
        else
        {
            System.out.print("Enter employee name: ");
            employeeName = scnr.nextLine();
            System.out.print("Enter amount of employees at desk: ");
            empsAtDesk = scnr.nextInt();







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

//Iterate over data and write to sheet
        Set<String> keyset = data.keySet();
        int rownum = 1;
        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(!(deskNumber.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("Employee Seating Report.xls"));
        workbook.write(out);
        out.flush();
        out.close();
        System.out.println("Excel Written 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
import java.util.*;
导入org.apache.poi.hssf.usermodel.*;
导入org.apache.poi.hssf.util.*;
导入org.apache.poi.ss.usermodel.*;
导入org.apache.poi.ss.util.*;
导入java.io.*;
公共类员工会议代表{
公共静态void main(字符串[]args){
字符串deskNumber=“”;
字符串employeeName=“”;
int empsAtDesk=0;
布尔保持修剪=真;
//空白工作簿
HSSFWorkbook=新的HSSFWorkbook();
//空白页
HSSFSheet sheet=工作簿.createSheet(“座位详情”);
//创建标题
行标题=sheet.createRow(0);
rowHeading.createCell(0.setCellValue(“桌面”);
行标题.createCell(1).setCellValue(“员工姓名:”);
行标题.createCell(2).setCellValue(“桌上的号码:”);
//标题的字体大小和样式循环
对于(int i=0;i<3;i++)
{
CellStyleRowHeading=工作簿.createCellStyle();
Font=workbook.createFont();
font.setBold(true);
font.setFontName(hssfont.font_ARIAL);
字体设置字体高度输入点((短)11);
stylerowHeading.setFont(字体);
stylerowHeading.setVerticalAlignment(CellStyle.ALIGN_CENTER);
rowHeading.getCell(i).setCellStyle(stylerowHeading);
}
同时(继续修剪){
扫描仪scnr=新扫描仪(System.in);
系统输出打印(“输入办公桌号码:”);
deskNumber=scnr.nextLine();
if(deskNumber.equals(“退出”))
{
System.out.print(“您已结束程序”);
系统出口(0);
}
其他的
{
系统输出打印(“输入员工姓名:”);
employeeName=scnr.nextLine();
系统输出打印(“在办公桌上输入员工数量:”);
empsAtDesk=scnr.nextInt();
//需要写入此数据(对象[])
映射数据=新树映射();
data.put(“2”,新对象[]{deskNumber,employeeName,empsAtDesk});
//迭代数据并写入工作表
Set keyset=data.keyset();
int rownum=1;
用于(字符串键:键集)
{
Row-Row=sheet.createRow(rownum++);
Object[]objArr=data.get(Key);
int-cellnum=0;
用于(对象对象对象:对象对象对象)
{
Cell Cell=row.createCell(cellnum++);
if(字符串的obj实例)
{
cell.setCellValue((字符串)obj);
}
else if(obj instanceof Integer)
{
cell.setCellValue((整数)obj);
}
}
如果(!(deskNumber.equals(“退出”))
{
rownum++;
}
//自动调整将用用户输入信息填写的我的列的大小。
对于(int i=0;i<3;i++)
{
表1.autoSizeColumn(i);
}
}
试一试{
//保存到excel文件
FileOutputStream out=新的FileOutputStream(新文件(“Employee seathing Report.xls”);
练习册。写(出);
out.flush();
out.close();
System.out.println(“Excel编写成功…”);
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}捕获(例外e){
System.out.println(e.getMessage());
}
} 
}       
}//pub静态空心端撑杆
}//pub级端撑

用户输入的每个信息都应添加到excel中的新行中,因此您需要在for循环之外创建行,并且只在for循环中为输入的数据创建单元格。大概是这样的:

    Scanner scnr = new Scanner(System.in);

    System.out.print("Enter desk number: ");
    deskNumber = scnr.nextLine();
    if(deskNumber.equals("EXIT"))
    {
        System.out.print("You have ended the program");
        System.exit(0);
    }
    else
    {
        System.out.print("Enter employee name: ");
        employeeName = scnr.nextLine();
        System.out.print("Enter amount of employees at desk: ");
        empsAtDesk = scnr.nextInt(); scnr.next();
        Row row = sheet.createRow(rownum++);
        Object [] objArr = new Object[] {deskNumber, employeeName, empsAtDesk};
        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);
            }
        }
  }

希望这有帮助。

用户输入的每个信息都应该添加到excel中的新行中,因此您需要在for循环外创建行,并且只在for循环中为输入的数据创建单元格。大概是这样的:

    Scanner scnr = new Scanner(System.in);

    System.out.print("Enter desk number: ");
    deskNumber = scnr.nextLine();
    if(deskNumber.equals("EXIT"))
    {
        System.out.print("You have ended the program");
        System.exit(0);
    }
    else
    {
        System.out.print("Enter employee name: ");
        employeeName = scnr.nextLine();
        System.out.print("Enter amount of employees at desk: ");
        empsAtDesk = scnr.nextInt(); scnr.next();
        Row row = sheet.createRow(rownum++);
        Object [] objArr = new Object[] {deskNumber, employeeName, empsAtDesk};
        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);
            }
        }
  }

希望这有帮助。

您描述的问题是由以下原因引起的:

int rownum = 1; <--
for(String Key : keyset)
{
    Row row = sheet.createRow(rownum++);

intrownum=1 您描述的问题是由以下原因引起的:

int rownum = 1; <--
for(String Key : keyset)
{
    Row row = sheet.createRow(rownum++);

intrownum=1;非常感谢你!我不敢相信这一直都是我的问题!非常感谢你!我不敢相信这一直都是我的问题!