java - 使用 Java 将数据动态插入 Excel 中

标签 java excel apache-poi

我是 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. 先阅读Excel文件!
  2. 如果您通过
    成功获取工作表 worksheet = workbook.getSheet("POI 工作表");
    然后关闭文件输入流。
  3. 如果您无法获取工作表,请通过
    创建一个 workbook = new HSSFWorkbook();
    worksheet = workbook.createSheet("POI Worksheet");
  4. 您有现有的或新的 Wooksheet。
    追加行并将其写入文件并通过
    关闭文件输出流 fout = new FileOutputStream(file);
    workbook.write(fout);
    fout.close();

我希望这可以帮助你。祝你有美好的一天:-)

关于java - 使用 Java 将数据动态插入 Excel 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27955370/

相关文章:

java - 在 Ubuntu WSL 中运行 bash 脚本时出现不一致的 S3 参数验证错误

java - 我如何在 android 中从我自己的应用程序打开一个 splashtop 应用程序

Excel 公式检查单元格内容

java - Apache POI 折线图颜色

java - 使用 apache poi 在 excel 文件中设置页面 View 模式

java - 如何从 .csv 文件向 JTable 中的列添加标题

java - Titan 关于图创建的 IllegalArgumentException

vba - 如何在不关闭其他所有内容的情况下卸载用户表单?

excel - 在单元格更改不更新时执行 excel VBA 宏

java - 在java中生成excel