当前位置: 首页 > 知识库问答 >
问题:

用Java在Excel中动态插入数据

章绪
2023-03-14

我是Java新手,在将动态数据插入Excel文件时遇到问题。下面是下面的代码。如果我删除我的excel文件并重新运行我的程序。然后它会创建一个新的文件,也会插入下面的数据。(hello,goodbye,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");  
                    }

这是用于检查行中最后一个数字的代码:

    if(last != 0){
          last = worksheet.getLastRowNum()+1;
    }else{
          last = worksheet.getLastRowNum();
    }

这是写函数的完整代码:

    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();
    }

共有1个答案

富昕
2023-03-14
  1. 首先读取excel文件!
  2. 如果通过
    worksheet=workbook.getsheet(“POI worksheet”)成功获取工作表;
    然后关闭文件输入流。
  3. 如果无法获取工作表,则通过
    workbook=new HSSFWorkbook();
    worksheet=workbook.createSheet(“POI工作表”);
  4. 创建工作表
  5. 您有现有或新的wooksheet。
    通过
    fout=new FileOutputStream(file);
    Workbook.write(fout);
    fout.close();
  6. 追加行并将其写入文件,然后关闭文件输出流

希望这能帮到你。祝你有美好的一天:-)

 类似资料:
  • 我正在开发一个与Excel表相关的桌面应用程序。我在两行之间插入行时遇到一些问题。在使用ApachePOI的Java中是否有可能这样做?

  • 我有一个从外部数据库获取数据的功能,我可以获得特定的电影信息,如id、名称、类型等。现在,如果电影类型是例如动画,我只希望将这一种类型添加到db中。现在我可以使用isset来解决这个问题,但接下来我会为tyresnull设置db条目,我想避免这种情况。解决这个问题的最佳方法是什么?使用foreach循环?

  • 下面是代码:d:/poi.png中的图片(“d:/poi.png”) 我不认为处理图像的源代码有问题,但我不知道我错过了什么

  • 怎么用代码实现向Excel中插入一列的操作? 比如说往A列和B列中间插入一列,要怎么办?最好是Java

  • 问题内容: 当有人点击图片时,我们使用jQuery厚盒来动态显示iframe。在此iframe中,我们使用Galleria一个JavaScript库来显示多张图片。 问题似乎是,在iframe中似乎触发得太早了,并且iframe内容还没有加载,因此Galleria代码未正确应用于DOM元素。似乎使用iframe父就绪状态来确定iframe是否已就绪。 如果我们将准备好的文档调用的函数提取到单独的函

  • 我试图在excel(xlsx)表中找到一个空白值,并使用我的程序和Apache POI库替换为一些字符串,如“Enter value”,如下所示 我能够读取和识别excel表中的空白/空值,但不能在这些单元格中插入任何值 } 下面是一段代码,我通过它标识空白/空值,并试图插入字符串,但它不写到那个单元格