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

如何使用Apache POI锁定指定行?

南宫奇思
2023-03-14

我正在使用ApachePOI将数据写入Excel文件,我希望第一行为只读,其他行可以随时编辑。但我没有找到有效的解决方法。

下面是我的代码:

public static void createExcel(){
    HSSFWorkbook workbook=new HSSFWorkbook();
    HSSFSheet sheet=workbook.createSheet("Variable");
    
    CellStyle lockStyle=workbook.createCellStyle();
    lockStyle.setLocked(true);
    
    CellStyle unlockStyle=workbook.createCellStyle();
    unlockStyle.setLocked(false);

    sheet.protectSheet("www.hirain.com");
    
    for(int i=0;i<=20;i++){
        Row row=sheet.createRow(i);
        if(i==0){
            row.setRowStyle(lockStyle);
        }else{
            row.setRowStyle(unlockStyle);
        }
        Cell c1=row.createCell(0);
        Cell c2=row.createCell(1);
        c1.setCellValue((char)i);
        c2.setCellValue(String.valueOf((char)(65+i)));
    }
    
    try {
        OutputStream out=new FileOutputStream(new File("D:\\test.xls"));
        workbook.write(out);
        out.flush();
        out.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println("=========export excel success=========");
}

看起来这个java代码块应该可以工作,但实际上它不仅会锁定第一行,还会锁定其他行的空单元格。

所以我想知道,有没有一种有效的方法可以使用apachepoi只锁定excel文件的第一行?

共有1个答案

蒋弘致
2023-03-14

这是我的工作

                if(y==0) {
                    unlockedCellStyle.setLocked(true);
                    sheet.lockFormatCells(true);
                    sheet.enableLocking();
                }else {
                    unlockedCellStyle.setLocked(false);
                    sheet.lockFormatCells(false);
                    sheet.enableLocking();
                }
                cell.setCellStyle(unlockedCellStyle);
 类似资料:
  • 问题内容: 我正在使用Criteria API检索hibernate中的对象列表。但是,我需要锁定那些对象,因为同时执行的另一个线程将获得确切的对象,并且在没有悲观锁定的情况下,只有一个线程会成功。 我尝试如下,但它不起作用。 更新 :我正在执行此语句之后的更新,以便我希望两个线程都读取不同的行,或者至少第二个线程应该等到第一个线程完成事务并离开锁。 hibernate生成的查询如下。 更新 :这

  • 问题内容: 我希望以下测试仅打印“已被锁定”一次。但是它因此会打印行。 据我了解,将在可能的情况下将其锁定(即,如果尚未锁定)。但是显然不是这样。 如何设置这样的锁线程安全? 问题答案: 名称为,表示您已经拥有锁了。 如果希望使用线程块,则可以使用例如具有1(或更多)许可的a。

  • 嗨,我想在第一行搜索一个字符串,如果找到了,我想移动那一列。

  • 问题内容: 我有一张带桌子的桌子。 我需要访问并递增。 在访问期间,我需要锁定特定的用户行(而不是整个表)。 我该怎么做呢? 表格类型为。 问题答案: MySQL仅使用MyISAM表中的表级锁定。如果可以,请切换到InnoDB进行行级锁定。 这是指向MySQL网站的链接,该链接描述了由SQL语句为InnoDB表设置的锁。 http://dev.mysql.com/doc/refman/5.0/en

  • 问题内容: UNIX文件锁定非常简单:操作系统假定您知道自己在做什么,然后就可以按照自己的意愿进行操作: 例如,如果您尝试删除另一个进程已打开的文件,则操作系统通常会允许您执行此操作。原始进程仍将保留其文件句柄,直到它终止-这时文件系统将安静地回收磁盘资源。不用大惊小怪,这就是我喜欢的方式。 Windows上的不同之处:如果我尝试删除另一个进程正在使用的文件,则会出现操作系统错误。在原始进程释放它

  • 问题内容: 我有一个C#/ Selenium / Specflow测试套件,正在使用xunit.console.exe使用Jenkins运行。我需要将这些测试指向不同的环境(Test / QA / Prod等),并想使用命令行参数。 我正在调用的批处理命令是: 并希望包含一个额外的参数,例如: “ -env = PROD”, 以将该作业指向特定的环境。 我愿意采取更好的方法。 问题答案: 对于此解