PageOffice 开发者中心 PageOffice 开发者中心
首页
文档
  • 后端Java手册 (opens new window)
  • 后端.netcore手册 (opens new window)
  • 前端JavaScript手册 (opens new window)
下载
购买 (opens new window)
首页
文档
  • 后端Java手册 (opens new window)
  • 后端.netcore手册 (opens new window)
  • 前端JavaScript手册 (opens new window)
下载
购买 (opens new window)
  • 开始

  • 通用控制

  • Word

  • Excel

    • 常用控制

      • 编辑模式打开
      • 只读打开文档
      • 只读模式下调整行列
      • 禁止Excel中鼠标右键、双击、选择
      • 控制Excel编辑区域(局部编辑)
        • 实现用户自定义Excel模板
      • 动态填充

      • 用户输入提交

    • PDF

    • FileMaker

    • PPT

    • 更多

    目录

    控制Excel编辑区域(局部编辑)

    # 控制Excel编辑区域(局部编辑)

    • 查看本示例演示效果
    • 本示例关键代码的编写位置,请参考“开始 - 快速上手”里您所使用的开发语言框架的最简集成代码

    注意

    本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。

    在实际项目开发中,以下场景可能会用到Excel局部编辑功能:

    • 财务报表:会计人员可能需要更新特定的会计科目,而审计人员则可能需要访问所有区域进行审核。
    • 课程规划:不同教师可能负责编辑各自课程的详细信息,而教务管理部门则负责整体课程安排的审核和调整。
    • 质量控制:质量检查员可能只能编辑产品质量检查的结果,而质量管理部门则可以访问所有质量控制相关的数据。
    • 广告投放:广告策划人员可能需要编辑广告内容和投放策略部分,而财务人员则可能需要编辑广告预算和成本部分。
    • 资源分配:资源管理人员可能需要编辑资源分配和利用部分,而项目团队成员则可以更新自己的工作进度和资源消耗。
    • 市场销售:不同部门的管理人员负责各自部门的产品销售数据。
    • 其他场景...

    控制编辑区域实现局部编辑的功能,通常用在以下两个方面:

    • 数据输入:实际项目中Excel文档的表格结构往往是很复杂的,而且Excel文件的编辑制作过程也很费时费力,如果用户在填写表格数据时,不经意间改动了表格的样式、公式或结构,轻则影响文档的打印效果,重则就可能会造成严重的数据错误。如果不控制Excel文件的编辑区域,那么用户在Excel中录入数据时就只能低效率地、谨小慎微地进行编辑,所以控制了用户的编辑区域,不但可以规范用户的操作,防止用户录入数据时有意无意对文件造成“破坏”,而且可以让用户更高效地进行数据录入。
    • 数据保护:在需要对工作表进行部分保护,防止无关人员修改重要数据时,可以使用局部编辑功能限制编辑区域。

    以下我们就以市场销售场景来举例说明,PageOffice是如何使用局部编辑功能实现“不同部门经理只能编辑各自部门销售数据”需求的。需求概述:A部门经理负责A产品的销售,所以打开Excel文件之后只能编辑A产品的销售计划和实际完成数据,文件的其他单元格全部处于只读状态;B部门经理负责B产品的销售,打开Excel文件后只能填写B产品的销售计划和实际完成数据,其他单元格只读。

    在实际项目中,Excel文件会填写大量的单元格数据,本文为了简明扼要,所以仅以有限的几个单元格来举例说明。

    首先,制作一个产品销售表,比如:D:\test.xlsx,里面包含了产品名称、计划完成、实际完成等数据项,如下图所示:

    然后,通过代码控制,A部门经理登录之后只能编辑"C4:D6"区域的单元格,其他部分只读;B部门经理登录之后只能编辑"C7:D9"区域的单元格,其他部分只读。

    # 后端代码

    在后端编写代码创建WorkbookWriter对象,根据登录用户的不同,实现控制Excel文件的可编辑区域。

      String userName = request.getParameter("userName");
      
      WorkbookWriter wb = new WorkbookWriter();
      SheetWriter sheet = wb.openSheet("Sheet1");
      ExcelTableWriter tableA = sheet.openTable("C4:D6");
      ExcelTableWriter tableB = sheet.openTable("C7:D9");
      tableA.setSubmitName("tableA");
      tableB.setSubmitName("tableB");
      
      //A部门经理登录后,只能编辑tableA的产品数据
      if (userName.equals("zhangsan")) {
          tableA.setReadOnly(false);
          tableB.setReadOnly(true);
      }
      //B部门经理登录后,只能编辑tableB的产品数据
      else {
          tableA.setReadOnly(true);
          tableB.setReadOnly(false);
      }
      
      PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
      poCtrl.setWriter(wb);
      poCtrl.setSaveFilePage("SaveFile.jsp");
      poCtrl.webOpen("D:\\test.xlsx", OpenModeType.xlsSubmitForm, userName);
      
      string userName = Request.Query["userName"];
      
      PageOfficeNetCore.Excel.WorkbookWriter wb = new PageOfficeNetCore.Excel.WorkbookWriter();
      PageOfficeNetCore.Excel.SheetWriter sheet = wb.OpenSheet("Sheet1");
      PageOfficeNetCore.Excel.ExcelTableWriter tableA = sheet.OpenTable("C4:D6");
      PageOfficeNetCore.Excel.ExcelTableWriter tableB = sheet.OpenTable("C7:D9");
      tableA.SubmitName = "tableA";
      tableB.SubmitName = "tableB";
      
      //A部门经理登录后,只能编辑tableA的产品数据
      if (userName.Equals("zhangsan")){
          tableA.ReadOnly = false;
          tableB.ReadOnly = true;
      }
      //B部门经理登录后,只能编辑tableB的产品数据
      else{
          tableA.ReadOnly = true;
          tableB.ReadOnly = false;
      }
      
      PageOfficeNetCore.PageOfficeCtrl poCtrl = new PageOfficeNetCore.PageOfficeCtrl(Request);
      poCtrl.SetWriter(wb);
      poCtrl.SaveFilePage = "SaveDoc";
      poCtrl.WebOpen("doc/test.xls", PageOfficeNetCore.OpenModeType.xlsSubmitForm, userName);
      
      // Make sure to add code blocks to your code group

      # 前端代码

      本示例无前端关键代码。

      上次更新: 2025/07/21, 15:21:36
      PageOffice | Copyright © 2013-2026 卓正软件 京ICP备12010902号-2 京公网安备 11010502019270号
      • 跟随系统
      • 浅色模式
      • 深色模式
      • 阅读模式