`
shuai1234
  • 浏览: 971824 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

java中做excel表

    博客分类:
  • java
阅读更多
用到第三方架包:
poi-2.5-final-20040302.jar;
poi-contrib-2.5-final-20040302.jar
poi-scratchpad-2.5-final-20040302.jar


//处理类
public class CountExcel {

/**
  * 数据库操作类,自己写吧。。。
  */
private OperData jdbc /*自己写*/;

/**
  * 创建excel,返回excel的存放地址
  *
  * @param title
  *            标题
  * @param sql
  *            查询语句
  * @param path
  *            excel的存放路径(物理地址)
  * @param titlename
  *            报表的名字
  * @return 路径
  */
public String createExcelForAssess(String[] title, String sql, String path,
   String titlename) throws Exception {
  GregorianCalendar c = new GregorianCalendar();
  StringBuffer excelUrl = new StringBuffer();
  java.util.Date now = c.getTime();
  SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-HH-mm");
  String strNow = format.format(now);
  excelUrl.append(path).append(File.separator).append("te_").append(
    strNow).append(".xls");
  // excel的表头
  Vector vcCol = new Vector();
  if (title == null || title.length < 1)
   return "";
  for (int i = 0; i < title.length; i++) {
   vcCol.add(title[i]);
  }
  int[] align = new int[vcCol.size()];
  int[] num = new int[vcCol.size()];
  for (int i = 0; i < vcCol.size(); i++) {
   align[i] = 2;
   num[i] = 0;
  }
  Vector vc = getqueryrest(sql);
  ExcelReport excel = new ExcelReport();
  excel.setExcelFile(excelUrl.toString());
  excel.setCols(vcCol.size());
  excel.createCaption(titlename);
  excel.createColumnCaption(vcCol);
  excel.createBody(vc, align, num);
  excel.createPage(5);
  excel.createFile();
  return excelUrl.toString();
}

/**
  * 查询结果集
  *
  * @param sql传入查询的sql语句
  * @return Vector
  * @throws SQLException
  */
public Vector getqueryrest(String sql) throws SQLException {
  Vector vc = new Vector();
                 //数据库查询,返回的list里面存的是数据的pojo对象
  //List list = jdbc.getQueryResult(sql);
  if (list != null && list.size() > 0) {
   for (int i = 0; i < list.size(); i++) {
    String[] info = (String[]) list.get(i);
    for (int j = 0; j < info.length; j++) {
     vc.add(info[j]);
    }
   }
  }
  return vc;
}
}

//工具类
public class ExcelReport{
  /**
   * EXCEL文件工作区
   */
  private HSSFWorkbook wb;

  /**
   * EXCEL文件SHEET
   */
  private HSSFSheet sheet;

  /**
   * EXCEL文件存放的目录路径
   */
  private String excelFile = "";

  /**
   * 记录当前行数
   */
  private int rownum = 0;

  /**
   * 记录总共列数
   */
  private int cols = 0;

  /**
   * 记录每列的宽度
   */
  private int[] length;

  /**
   * 记录是否已经设定字段数
   */
  private boolean flag = false;

  /**
   * 设置EXCEL文件存放的目录路径,在生成标题,列头前设定
   */
  public void setExcelFile(String excelFile){
    this.excelFile = excelFile;
  }

  /**
   * 设置EXCEL表的列数,在生成标题,列头前设定
   */
  public void setCols(int cols){
    this.cols = cols;
    if(flag){
      if(length.length < cols){
        length = getLength(length);
      }
    }else{
      length = new int[cols];
    }
    flag = true;
  }

  /**
   * 第二次设定字段数,保存第一张表格每列的长度
   */
  private int[] getLength(int[] arr){
    int[] temp = new int[cols];
    for(int i=0;i<arr.length;i++){
      temp[i] = arr[i];
    }
    return temp;
  }

  /**
   * 初始化EXCEL报表类
   */
  public ExcelReport(){
    wb = new HSSFWorkbook();
    sheet = wb.createSheet("new sheet");
  }

  /**
   * 生成标题
   * @param caption   标题头
   */
  public void createCaption(String caption){
    //生成标题行
    HSSFRow row = sheet.createRow((short)rownum);
    //生成标题单元格
    HSSFCell cell = row.createCell((short)0);
    //生成标题单元格样式
    HSSFCellStyle style = wb.createCellStyle();

    //设定标题字体
    HSSFFont font = wb.createFont();
    font.setFontHeightInPoints((short)14);
    font.setFontName("新宋体");
    font.setColor(HSSFColor.BLACK.index);
    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    style.setFont(font);

    //设定标题框格式
    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    style.setBottomBorderColor(HSSFColor.BLACK.index);
    style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    style.setLeftBorderColor(HSSFColor.BLACK.index);
    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
    style.setRightBorderColor(HSSFColor.BLACK.index);
    style.setBorderTop(HSSFCellStyle.BORDER_THIN);
    style.setTopBorderColor(HSSFColor.BLACK.index);

    //设定对齐方式
    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

    //设置cell编码解决中文高位字节截断
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);

    //设定单元格文字合样式
    cell.setCellValue(caption);
    cell.setCellStyle(style);

    for(int i=1;i<cols;i++){
      cell = row.createCell((short)i);
      cell.setCellStyle(style);
      cell.setCellValue("");
    }

    //设定合并的单元格
    sheet.addMergedRegion(new Region(rownum,(short)0,rownum,(short)(cols-1)));

    //当前行自增
    rownum++;
  }

  /**
   * 生成列头
   * @param vc   列头内容
   */
  public void createColumnCaption(Vector vc){
    //生成列头行
    HSSFRow row = sheet.createRow((short)rownum);

    //生成了列头格式
    HSSFCellStyle style = wb.createCellStyle();

    //设定列头字体
    HSSFFont font = wb.createFont();
    font.setFontHeightInPoints((short)10);
    font.setFontName("新宋体");
    font.setColor(HSSFColor.BLACK.index);
    style.setFont(font);

    //设定标题框格式
    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    style.setBottomBorderColor(HSSFColor.BLACK.index);
    style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    style.setLeftBorderColor(HSSFColor.BLACK.index);
    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
    style.setRightBorderColor(HSSFColor.BLACK.index);
    style.setBorderTop(HSSFCellStyle.BORDER_THIN);
    style.setTopBorderColor(HSSFColor.BLACK.index);

    //设定对齐方式
    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

    //生成列头单元格
    HSSFCell cell;
    for(int i=0;i<vc.size();i++){
      //生成标题单元格
      cell = row.createCell((short)i);
      //设置cell编码解决中文高位字节截断
      cell.setEncoding(HSSFCell.ENCODING_UTF_16);
      //设定单元格文字合样式
      if(vc.get(i) != null){
        cell.setCellValue(vc.get(i).toString());
        //记录列头的长度
        if(vc.get(i).toString().getBytes().length > length[i]){
          length[i] = vc.get(i).toString().getBytes().length;
        }
      }else{
        cell.setCellValue("");
      }
      cell.setCellStyle(style);
    }
    rownum++;
  }

  /**
   * 生成合并的列头
   * @param vc  列头
   * @param colnum  每列要合并的列数,并且所有要合并的列数之和等于总表格列数
   */
  public void mergeColumnCaption(Vector vc,int[] colnum){
    //生成标题行
    HSSFRow row = sheet.createRow((short)rownum);

    //生成标题单元格样式
    HSSFCellStyle style = wb.createCellStyle();

    //设定标题字体
    HSSFFont font = wb.createFont();
    font.setFontHeightInPoints((short)10);
    font.setFontName("新宋体");
    font.setColor(HSSFColor.BLACK.index);
    style.setFont(font);

    //设定标题框格式
    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    style.setBottomBorderColor(HSSFColor.BLACK.index);
    style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    style.setLeftBorderColor(HSSFColor.BLACK.index);
    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
    style.setRightBorderColor(HSSFColor.BLACK.index);
    style.setBorderTop(HSSFCellStyle.BORDER_THIN);
    style.setTopBorderColor(HSSFColor.BLACK.index);

    //设定对齐方式
    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

    int pos = 0;
    HSSFCell cell;
    for(int i=0;i<vc.size();i++){
      pos = pos + colnum[i];
      cell = row.createCell((short)(pos-colnum[i]));
      //设置cell编码解决中文高位字节截断
      cell.setEncoding(HSSFCell.ENCODING_UTF_16);
      //设定单元格文字合样式
      cell.setCellStyle(style);
      if(vc.get(i) == null){
        cell.setCellValue("");
      }else{
        cell.setCellValue(vc.get(i).toString());
      }
      for(int j=1;j<colnum[i];j++){
        cell = row.createCell((short)(pos-colnum[i]+j));
        cell.setCellStyle(style);
        cell.setCellValue("");
      }
      //设定合并的单元格
      sheet.addMergedRegion(new Region(rownum,(short)(pos-colnum[i]),rownum,(short)(pos-1)));
    }
    //当前行自增
    rownum++;
  }

  /**
   * 合并行
   * @param startrow  起始行
   * @param endrow    终止行
   * @param column    列数
   */
  public void mergeRowCaption(int startrow,int endrow,int column){
    sheet.addMergedRegion(new Region(startrow,(short)column,endrow,(short)column));
  }

  /**
   * 生成表格主体
   * @param vc      表格内容
   * @param align   每列的对齐方式,1为左,2为中,3为右,数组长度要等于表格列数
   * @param num     每列的数据类型,0为字符串,1为数字
   */
  public void createBody(Vector vc,int[] align,int[] num){
    int rows = vc.size() / cols;
    //设定表格字体
    HSSFFont font = wb.createFont();
    font.setFontHeightInPoints((short)10);
    font.setFontName("新宋体");
    font.setColor(HSSFColor.BLACK.index);
    font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
    HSSFRow row;
    HSSFCell cell;

    //设定数据格式
    HSSFDataFormat df = wb.createDataFormat();

    //生成了左对齐表格格式
    HSSFCellStyle styleLeft = wb.createCellStyle();
    styleLeft.setFont(font);
    styleLeft.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    styleLeft.setBottomBorderColor(HSSFColor.BLACK.index);
    styleLeft.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    styleLeft.setLeftBorderColor(HSSFColor.BLACK.index);
    styleLeft.setBorderRight(HSSFCellStyle.BORDER_THIN);
    styleLeft.setRightBorderColor(HSSFColor.BLACK.index);
    styleLeft.setBorderTop(HSSFCellStyle.BORDER_THIN);
    styleLeft.setTopBorderColor(HSSFColor.BLACK.index);
    styleLeft.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    styleLeft.setAlignment(HSSFCellStyle.ALIGN_LEFT);
    styleLeft.setDataFormat(df.getFormat("##################.00"));

    //生成居中对齐表格格式
    HSSFCellStyle styleCenter = wb.createCellStyle();
    styleCenter.setFont(font);
    styleCenter.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    styleCenter.setBottomBorderColor(HSSFColor.BLACK.index);
    styleCenter.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    styleCenter.setLeftBorderColor(HSSFColor.BLACK.index);
    styleCenter.setBorderRight(HSSFCellStyle.BORDER_THIN);
    styleCenter.setRightBorderColor(HSSFColor.BLACK.index);
    styleCenter.setBorderTop(HSSFCellStyle.BORDER_THIN);
    styleCenter.setTopBorderColor(HSSFColor.BLACK.index);
    styleCenter.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    styleCenter.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    styleCenter.setDataFormat(df.getFormat("##################.00"));

    //生成右对齐表格格式
    HSSFCellStyle styleRight = wb.createCellStyle();
    styleRight.setFont(font);
    styleRight.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    styleRight.setBottomBorderColor(HSSFColor.BLACK.index);
    styleRight.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    styleRight.setLeftBorderColor(HSSFColor.BLACK.index);
    styleRight.setBorderRight(HSSFCellStyle.BORDER_THIN);
    styleRight.setRightBorderColor(HSSFColor.BLACK.index);
    styleRight.setBorderTop(HSSFCellStyle.BORDER_THIN);
    styleRight.setTopBorderColor(HSSFColor.BLACK.index);
    styleRight.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    styleRight.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
    styleRight.setDataFormat(df.getFormat("##################.00"));

    for (int i = 0;i < rows; i++){
      // 创建新行
      row = sheet.createRow((short)(rownum));
      for (int j = 0;j < cols; j++){
        // 创建一个单元格
        cell = row.createCell((short)j);
        //设置cell编码解决中文高位字节截断
        cell.setEncoding(HSSFCell.ENCODING_UTF_16);
        //设置cell字符类型的值
        if(vc.get(i*cols+j) == null){
          cell.setCellValue("");
        }else{
          if(num[j] == 0){
            cell.setCellValue(vc.get(i*cols+j).toString());
          }else{
            cell.setCellValue(Double.parseDouble(vc.get(i*cols+j).toString()));
          }
          //记录每列的长度
          if(vc.get(i*cols+j).toString().getBytes().length > length[j]){
            length[j] = vc.get(i*cols+j).toString().getBytes().length;
          }
        }
        //设定对齐方式
        if(align[j] == 1){
          cell.setCellStyle(styleLeft);
        }
        if(align[j] == 2){
          cell.setCellStyle(styleCenter);
        }
        if(align[j] == 3){
          cell.setCellStyle(styleRight);
        }
      }
      rownum++;
    }
  }

  /**
   * 生成统计结果行
   * @param stat    统计结果
   * @param align   对齐方式,1为左,2为中,3为右
   */
  public void createStat(String stat,int align){
    //生成统计结果行
    HSSFRow row = sheet.createRow((short)rownum);
    //生成统计结果格
    HSSFCell cell = row.createCell((short)0);
    //生成统计结果单元格样式
    HSSFCellStyle style = wb.createCellStyle();

    //设定统计结果字体
    HSSFFont font = wb.createFont();
    font.setFontHeightInPoints((short)10);
    font.setFontName("新宋体");
    font.setColor(HSSFColor.BLACK.index);
    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    style.setFont(font);

    //设定标题框格式
    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    style.setBottomBorderColor(HSSFColor.BLACK.index);
    style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    style.setLeftBorderColor(HSSFColor.BLACK.index);
    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
    style.setRightBorderColor(HSSFColor.BLACK.index);
    style.setBorderTop(HSSFCellStyle.BORDER_THIN);
    style.setTopBorderColor(HSSFColor.BLACK.index);

    //设定对齐方式

    if(align == 1){
      style.setAlignment(HSSFCellStyle.ALIGN_LEFT);
    }
    if(align == 2){
      style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    }
    if(align == 3){
      style.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
    }

    //设置cell编码解决中文高位字节截断
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);

    //设定单元格文字合样式
    cell.setCellValue(stat);
    cell.setCellStyle(style);

    for(int i=1;i<cols;i++){
      cell = row.createCell((short)i);
      cell.setCellStyle(style);
      cell.setCellValue("");
    }

    //设定合并的单元格
    sheet.addMergedRegion(new Region(rownum,(short)0,rownum,(short)(cols-1)));

    //当前行自增
    rownum++;
  }

  /**
   * 设置页眉
   * @param header  页眉内容
   * @param align  对齐方式,1为左,2为中,3为右
   */
  public void createHeader(String header,int align){
    HSSFHeader head  = sheet.getHeader();
    if(align == 1){
      head.setLeft(header);
    }
    if(align == 2){
      head.setCenter(header);
    }
    if(align == 3){
      head.setRight(header);
    }
  }

  /**
   * 设置页脚
   * @param footer  页脚内容
   * @param align  对齐方式,1为左,2为中,3为右
   */
  public void createFooter(String footer,int align){
    HSSFFooter foot = sheet.getFooter();
    if(align == 1){
      foot.setLeft(footer);
    }
    if(align == 2){
      foot.setCenter(footer);
    }
    if(align == 3){
      foot.setRight(footer);
    }
  }

  /**
   * 设定页脚的页面值
   * @param align  对齐方式,1为左,2为中,3为右
   */
  public void createPage(int align){
    HSSFFooter foot = sheet.getFooter();
    if(align == 1){
      foot.setLeft("Page:" + HSSFFooter.page() + "/" + HSSFFooter.numPages());
    }
    if(align == 2){
      foot.setCenter("Page:" + HSSFFooter.page() + "/" + HSSFFooter.numPages());
    }
    if(align == 3){
      foot.setRight("Page:" + HSSFFooter.page() + "/" + HSSFFooter.numPages());
    }
  }

  /**
   * 生成EXCEL文件
   */
  public void createFile() throws Exception{
      for(int i=0;i<length.length;i++){
        sheet.setColumnWidth((short)i,(short)(length[i]*2*200));
      }
      FileOutputStream fileOut = new FileOutputStream(excelFile);
      wb.write(fileOut);
      fileOut.close();
  }

分享到:
评论

相关推荐

    利用Java实现复制Excel工作表功能

    Java实现复制Excel工作表功能 Java是一种广泛应用于企业开发的编程语言,而Excel则是办公软件中的王者。今天,我们将介绍如何使用Java实现复制Excel工作表功能,包括在同一个工作簿内复制工作表和在不同工作簿间...

    Java导出数据到Excel文件中(支持多表头)

    在Excel中,多级表头允许我们在工作表的列上设置多个层次的标题,以更清晰地组织和展示数据。例如,一级表头通常代表数据的主要类别,如"学号"、"姓名",而二级表头则表示细分的类别,如"语文"、"数学"、"英语",...

    java导出excel复杂表头

    然后,我们创建一个Sheet对象,代表Excel中的一个工作表。 2. **构建复杂表头** 复杂表头可能包括多行或多列合并,甚至嵌套的表头。这可以通过调用`sheet.addMergedRegion`方法来实现单元格的合并。对于嵌套表头,...

    java导出excel复合表头简单实例

    接着,创建一个`Sheet`对象,它代表Excel中的单个工作表。然后,我们可以创建`Row`对象来表示每一行,以及`Cell`对象来表示单元格,并在其中填充数据。 复合表头,也称为合并单元格,是Excel中的一种高级特性,可以...

    java中读取Excel例子

    2. **打开Sheet**:Workbook对象包含一个或多个Sheet,每个Sheet对应Excel中的一个工作表。你可以通过索引来访问它们,例如`workbook.getSheetAt(index)`。 3. **遍历Row和Cell**:Sheet中的数据由Row和Cell组成。...

    java代码生成excel表并下载

    本主题聚焦于“java代码生成excel表并下载”,这是一个关键的后端功能,允许用户自定义表格内容并选择下载路径。下面我们将深入探讨如何实现这一功能。 首先,Java中用于生成Excel文件的主要库是Apache POI项目。...

    JAVA读取Excel,建库建表,并生成java实体

    在Java开发中,有时我们需要处理Excel数据,例如从Excel文件中获取信息来构建数据库表结构,或者根据Excel数据生成对应的Java实体类。这个任务通常在数据导入、导出或者自动化测试场景中出现。下面我们将详细探讨...

    Java中Excel转图片工具包(纯java)

    "Java中Excel转图片工具包(纯java)"就是这样一个解决方案,它实现了将Excel文件通过PDF中间格式转化为图片的功能。 首先,让我们了解一下这个工具包的工作原理。Excel文件本身并不直接支持转换为图片格式,但可以...

    java注解实现通用Excel中文表格转实体对象列表,支持中文表头,Excel批量导入,excel转实体对象,excel读取

    java注解实现通用Excel中文表格转实体对象列表,支持中文表头,在Excel数据导入使用的通用工具类,代码简洁优雅 。基于注解实现的支持中文表头的读取Excel数据并转换为实体对象列表的工具类,使用该工具类可将Excel...

    java实现在Excel中插入图片

    总结起来,Java实现Excel中插入图片的核心步骤包括:导入Apache POI库,创建并操作工作簿和工作表,读取和创建图片对象,创建绘图工作表,设置图片位置,最后保存工作簿。在实际开发中,可能还需要处理图片格式转换...

    Java 实现从Excel批量导入数据到MySQL

    然而,当需要将Excel中的数据存入数据库,例如MySQL时,手动操作会变得低效且易出错。Java作为一种强大的编程语言,提供了多种方式来实现Excel与MySQL之间的数据交互。本文将详细介绍如何利用Java实现从Excel批量...

    java 创建EXCEL文件,并向EXCEL中写入数据

    在Java编程环境中,我们经常需要处理数据的导入和导出,其中Excel文件是最常见的格式之一。本示例将介绍如何使用Java创建Excel文件并写入数据,主要涉及的库是`jxl`,这是一个用于读写Excel文件的开源Java库。 首先...

    JAVA poi 做EXCEL导出(包含图片) 完整版

    在Excel中,`Row`表示行,`Cell`表示单元格。我们可以创建并设置这些对象的值: ```java XSSFRow row = sheet.createRow(0); // 创建第一行 XSSFCell cell = row.createCell(0); // 创建第一列的单元格 cell....

    java实现导出excel表 - Java - Web 开发.mht

    java实现导出excel表 - Java - Web 开发.mhtjava实现导出excel表 - Java - Web 开发.mht

    java实现自定义excel模板导出excel并可保存客户端和在线打开

    在Java编程环境中,生成自定义Excel模板是一项常见的需求,尤其在数据分析、报表生成等领域。本文将深入探讨如何使用Java和jxl库来实现这一功能,让开发者能够创建任意复杂格式的Excel文件,并允许用户在客户端保存...

    Java读取Word中的表格(Excel),并导出文件为Excel

    对于Word中的每一行和每一列,我们都需要在Excel中创建对应的单元格。这可以通过`Row`和`Cell`对象实现: ```java for (int i = 0; i (); i++) { XWPFTableRow wordRow = table.getRow(i); Row excelRow = ...

    在Java中读写Excel文件

    4. 使用`createSheet()`方法创建工作表,每个工作表对应Excel中的一个Sheet。 5. 创建`HSSFRow`对象,表示工作表中的行。 6. 创建`HSSFCell`对象,表示行中的单元格。 7. 使用`setCellValue()`方法设置单元格的值。 ...

    java生成excel图表

    "Java生成Excel图表" Java生成Excel图表是使用Java语言来生成Excel图表的过程。Excel图表是指使用Excel软件生成的图表,例如柱状图、折线图、饼状图等。Java语言可以使用各种库和框架来生成Excel图表,例如...

    Java 使用poi导入excel 并使用xml做数据验证

    Excel中的数据验证可以通过设置数据验证规则来实现,这些规则通常存储在Excel文件的`.xlsx`包中的`sharedStrings.xml`和`workbook.xml`等文件中。在Java中,我们可以使用`DataValidationHelper`和`...

Global site tag (gtag.js) - Google Analytics