使用Java将数据动态插入Excel

使用Java将数据动态插入Excel,java,excel,apache-poi,Java,Excel,Apache Poi,我是Java新手,在将动态数据插入Excel文件时遇到问题。这是下面的代码。如果我删除我的excel文件并重新运行我的程序。然后,它将创建一个新文件并插入以下数据。(hello,再见,true,date)。在第一次运行期间,程序仍然可以插入以下数据,但当我执行下一次运行时,数据无法存储到下一行。以下代码用于检查文件是否存在。我希望我能找人来帮助我,因为我在这段代码中挣扎了几天 if (file.exists()) { try{

我是Java新手,在将动态数据插入Excel文件时遇到问题。这是下面的代码。如果我删除我的excel文件并重新运行我的程序。然后,它将创建一个新文件并插入以下数据。(hello,再见,true,date)。在第一次运行期间,程序仍然可以插入以下数据,但当我执行下一次运行时,数据无法存储到下一行。以下代码用于检查文件是否存在。我希望我能找人来帮助我,因为我在这段代码中挣扎了几天

    if (file.exists()) {
                        try{
                            fout = new FileOutputStream(fileName, true);
                            fin = new FileInputStream(fileName);
                            lPOIfs = new POIFSFileSystem(fin);
                            workbook = new HSSFWorkbook(lPOIfs);
                            worksheet = workbook.getSheet("POI Worksheet");
                            for (int i=0; i<workbook.getNumberOfSheets(); i++) {
                                System.out.println( workbook.getSheetName(i) );                                    
                            }
                            HSSFSheet sheet = workbook.getSheetAt(0);
                            last = sheet.getLastRowNum();
                        }catch (IOException e) {  
                            e.printStackTrace();  
                        }catch (NullPointerException e){
                            e.printStackTrace(); 
                        }
                    } else {
                        //create new file
                        try{
                        fout = new FileOutputStream(file);                            
                        }catch (IOException e) {  
                            e.printStackTrace();  
                        }
                        workbook = new HSSFWorkbook();                       
                        worksheet = workbook.createSheet("POI Worksheet");  
                    }
这是写入函数的完整代码:

    public void writeExcel(){
    String fileName = "C:\\Users\\blslyeoh\\Documents\\NetBeansProjects\\JavaApplication1\\poi-test.xls";       
    try {
                    int last=0;
                    File file = new File(fileName);
                    FileInputStream fin = null;  
                    HSSFWorkbook workbook = null;  
                    HSSFSheet worksheet = null;  
                    FileOutputStream fout = null;
                    POIFSFileSystem lPOIfs = null;
                    if (file.exists()) {
                        try{
                            fout = new FileOutputStream(fileName, true);
                            fin = new FileInputStream(fileName);
                            lPOIfs = new POIFSFileSystem(fin);
                            workbook = new HSSFWorkbook(lPOIfs);
                            worksheet = workbook.getSheet("POI Worksheet");
                            for (int i=0; i<workbook.getNumberOfSheets(); i++) {
                                System.out.println( workbook.getSheetName(i) );                                    
                            }
                            HSSFSheet sheet = workbook.getSheetAt(0);
                            last = sheet.getLastRowNum();
                        }catch (IOException e) {  
                            e.printStackTrace();  
                        }catch (NullPointerException e){
                            e.printStackTrace(); 
                        }
                    } else {
                        //create new file
                        try{
                        fout = new FileOutputStream(file);                            
                        }catch (IOException e) {  
                            e.printStackTrace();  
                        }
                        workbook = new HSSFWorkbook();                       
                        worksheet = workbook.createSheet("POI Worksheet");  
                    }
        // index from 0,0... cell A1 is cell(0,0)
                    if(last != 0){
                        last = worksheet.getLastRowNum()+1;
                    }else{
                        last = worksheet.getLastRowNum();
                    }
                    HSSFRow row = worksheet.createRow(last);                        
        HSSFCell cellA1 = row.createCell((short)0);
        cellA1.setCellValue("hello");   
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        //cellStyle.setFillForegroundColor(HSSFColor.GOLD.index);
        //cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        //cellA1.setCellStyle(cellStyle);
        HSSFCell cellB1 = row.createCell((short) 1);
        cellB1.setCellValue("goodbye");
        //cellStyle = workbook.createCellStyle();
        //cellStyle.setFillForegroundColor(HSSFColor.LIGHT_CORNFLOWER_BLUE.index);
        //cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        //cellB1.setCellStyle(cellStyle);
        HSSFCell cellC1 = row.createCell((short) 2);
        cellC1.setCellValue(true);

        HSSFCell cellD1 = row.createCell((short) 3);
        cellD1.setCellValue(new Date());
        cellStyle = workbook.createCellStyle();
        cellStyle.setDataFormat(HSSFDataFormat
                .getBuiltinFormat("m/d/yy h:mm"));
        cellD1.setCellStyle(cellStyle);
        workbook.write(fout);
        fout.flush();

        fout.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
public void writeExcel(){
String fileName=“C:\\Users\\blslyeoh\\Documents\\NetBeansProjects\\JavaApplication1\\poi test.xls”;
试一试{
int last=0;
文件=新文件(文件名);
FileInputStream fin=null;
HSSF工作簿=空;
HSSF工作表=空;
FileOutputStream fout=null;
POIFSFS文件系统lPOIfs=null;
if(file.exists()){
试一试{
fout=新文件输出流(文件名,true);
fin=新文件输入流(文件名);
lPOIfs=新的POIFSFS文件系统(fin);
工作簿=新的HSSF工作手册(lPOIfs);
工作表=工作簿.getSheet(“POI工作表”);
对于(int i=0;i
  • 首先阅读excel文件
  • 如果您通过
    工作表=工作簿.getSheet(“POI工作表”);
    然后关闭文件输入流
  • 如果无法获取工作表,请通过
    工作簿=新的HSSFWorkbook();
    工作表=工作簿.createSheet(“POI工作表”);
  • 您已获得现有或新的wooksheet。
    追加行并将其写入文件,然后通过
    fout=新文件输出流(文件);
    工作簿。书写(fout);
    fout.close();

  • 我希望这能帮助你。祝你愉快:-)

    你有没有收到任何stacktrace?有没有抛出错误?发布这些错误会很有帮助。我知道了,谢谢你对这个URL的帮助。希望这能帮助你。顺便说一下,fout=new FileOutputStream(fileName,true);应该改为fout=new FileOutputStream(fileName);顺便说一句,谢谢@jcd的关注。你能把你的代码编辑成工作代码吗?我需要这个代码。第四条建议有帮助~非常感谢:D
        public void writeExcel(){
        String fileName = "C:\\Users\\blslyeoh\\Documents\\NetBeansProjects\\JavaApplication1\\poi-test.xls";       
        try {
                        int last=0;
                        File file = new File(fileName);
                        FileInputStream fin = null;  
                        HSSFWorkbook workbook = null;  
                        HSSFSheet worksheet = null;  
                        FileOutputStream fout = null;
                        POIFSFileSystem lPOIfs = null;
                        if (file.exists()) {
                            try{
                                fout = new FileOutputStream(fileName, true);
                                fin = new FileInputStream(fileName);
                                lPOIfs = new POIFSFileSystem(fin);
                                workbook = new HSSFWorkbook(lPOIfs);
                                worksheet = workbook.getSheet("POI Worksheet");
                                for (int i=0; i<workbook.getNumberOfSheets(); i++) {
                                    System.out.println( workbook.getSheetName(i) );                                    
                                }
                                HSSFSheet sheet = workbook.getSheetAt(0);
                                last = sheet.getLastRowNum();
                            }catch (IOException e) {  
                                e.printStackTrace();  
                            }catch (NullPointerException e){
                                e.printStackTrace(); 
                            }
                        } else {
                            //create new file
                            try{
                            fout = new FileOutputStream(file);                            
                            }catch (IOException e) {  
                                e.printStackTrace();  
                            }
                            workbook = new HSSFWorkbook();                       
                            worksheet = workbook.createSheet("POI Worksheet");  
                        }
            // index from 0,0... cell A1 is cell(0,0)
                        if(last != 0){
                            last = worksheet.getLastRowNum()+1;
                        }else{
                            last = worksheet.getLastRowNum();
                        }
                        HSSFRow row = worksheet.createRow(last);                        
            HSSFCell cellA1 = row.createCell((short)0);
            cellA1.setCellValue("hello");   
            HSSFCellStyle cellStyle = workbook.createCellStyle();
            //cellStyle.setFillForegroundColor(HSSFColor.GOLD.index);
            //cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            //cellA1.setCellStyle(cellStyle);
            HSSFCell cellB1 = row.createCell((short) 1);
            cellB1.setCellValue("goodbye");
            //cellStyle = workbook.createCellStyle();
            //cellStyle.setFillForegroundColor(HSSFColor.LIGHT_CORNFLOWER_BLUE.index);
            //cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            //cellB1.setCellStyle(cellStyle);
            HSSFCell cellC1 = row.createCell((short) 2);
            cellC1.setCellValue(true);
    
            HSSFCell cellD1 = row.createCell((short) 3);
            cellD1.setCellValue(new Date());
            cellStyle = workbook.createCellStyle();
            cellStyle.setDataFormat(HSSFDataFormat
                    .getBuiltinFormat("m/d/yy h:mm"));
            cellD1.setCellStyle(cellStyle);
            workbook.write(fout);
            fout.flush();
    
            fout.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }