文档章节

Apache POI .xlsx 下拉框实现

Geeyu
 Geeyu
发布于 2017/09/06 15:18
字数 473
阅读 53
收藏 1
点赞 0
评论 0

主要对象

  • 工作本: HSSFWorkbook(.xls) / XSSFWorkbook(.xlsx)
  • 工作表:HSSFSheet / XSSFSheet
  • 行:Row
  • 单元格:Cell
  • 其他:CellRangeAddressList 选中区域,DataValidationConstraint 数据约束,DataValidation 数据验证,XSSFCellStyle 单元格样式

读取与创建 Excel

/**
 * 创建
 * 1. 如果是一个FileOutputStream,则会直接创建文件
 * 2. 可以是 response.getOutputStream(),则直接返回浏览器进行下载
 */
OutputStream os = ...;
XSSFWorkbook wb = new XSSFWorkbook();
wb.write(os);
os.flush();

// 读取
XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
// 获取工作表
XSSFSheet sheet = workbook.getSheetAt(index);
// 获取总行数
int rows = sheet.getLastRowNum();

单元格合并

// 创建工作表
XSSFSheet sheet = wb.createSheet("sheetName");
// 添加合并区域,第一行前三个格子
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 3));
// 设置合并区域的值,cell为0、1、2都一样
sheet.createRow(0)
    .createCell(0)
    .setCellValue("cellValue");

单元格样式

//创建样式对象、字体对象
XSSFCellStyle style = wb.createCellStyle();                       
XSSFFont font = wb.createFont();                                  

// 字体
font.setFontName("宋体");
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setColor(HSSFFont.COLOR_NORMAL);
font.setFontHeight((short) 12*20);
style.setFont(font);

// 填充色
style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

// 边框
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);

// 内容布局
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

// 给单元格设置样式
Cell cell = ...;
cell.setCellStyle("style");

下拉框

XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);

// 下拉框可选的数据,作为约束
XSSFDataValidationConstraint dvConstraint = 
    (XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(new String[]{"a", "b", "c"});
// 设置为下拉框的范围
CellRangeAddressList addressList = 
    new CellRangeAddressList(0, 0, 0, 4);
// 创建 DataValidation 对象
XSSFDataValidation validation = 
    (XSSFDataValidation)dvHelper.createValidation(dvConstraint, addressList);
validation.setShowErrorBox(true);

// 作用于指定工作表
sheet.addValidationData(validation);

下拉框引用隐藏域

  • 用于解决上种方法,数组超过255和字节就会报错的问题
  • 公式不能漏掉 $
  • 与上面的区别只是创建了一个公式约束
// 创建一个隐藏域,users是下拉列表数组
String hiddenSheet = "hiddenSheet";
XSSFSheet sheet_hidden = wb.createSheet(hiddenSheet);
wb.setSheetHidden(1, true);
for (int i = 0; i < users.length; i++)
    sheet_hidden.createRow(i)
            .createCell(0)
            .setCellValue(users[i]);
            
// 然后用公式去引用,隐藏域中的 A1:A user.length 就是上面设置的格子
String formula = hiddenSheet + "!$A$1:$A$" + users.length;

XSSFDataValidationConstraint dvConstraint_agent = 
    (XSSFDataValidationConstraint) dvHelper.createFormulaListConstraint(formula);
CellRangeAddressList addressList_agent = 
    new CellRangeAddressList(2, 11, 3, 3);
XSSFDataValidation validation_agent = 
    (XSSFDataValidation)dvHelper.createValidation(dvConstraint_agent, addressList_agent);
validation_agent.setShowErrorBox(true);

sheet.addValidationData(validation_agent);

© 著作权归作者所有

共有 人打赏支持
Geeyu
粉丝 2
博文 54
码字总数 28983
作品 0
昌平
使用Apache POI读取Excel文件

网上关于介绍Apache POI操作Excel的文章已经很多了,但都讲得比较复杂。poi的API 与实际使用中的Excel很类似,可以说是POI把Excel中的workbook、sheet、cell等对象化了,在实际使用中极易理解...

zlikun ⋅ 2013/05/13 ⋅ 4

HSSF和XSSF

HSSF是POI工程对Excel(.xls)文件操作的实现,XSSF是POI工程对Excel(.xlsx)文件操作的实现.gradle.build`dependencies {compile('org.springframework.boot:spring-boot-starter')testCompile(......

不正经茂 ⋅ 2016/08/01 ⋅ 1

java读写excel之POI篇—001

POI 简单介绍 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 Apache POI 是创建和维护操作各种符合Office Open XML(OOXML...

Mysoft ⋅ 2015/09/21 ⋅ 0

使用 Apache POI 处理 Microsoft Office 文档

原文同步至:http://www.waylau.com/apache-poi-handle-microsoft-documents/ POI 概述 Apache POI 项目的使命是创造和维护 Java API 操纵各种格式的文件,其中包括基于 Office Open XML 标准...

waylau ⋅ 2015/02/01 ⋅ 0

关于POI将2007excel加密(不能只读)

java开发,需要实现一个功能:将excel进行加密。然后碰到问题。 public static void main(String[] args) throws IOException, InvalidFormatException, GeneralSecurityException { POIFSF......

真尼玛难取啊 ⋅ 2016/10/31 ⋅ 1

Java读写excel

先下载JExcelapi的jar包。   读取的文件主要分两类:xls文件、xlsx文件。xls文件的相关操作用的是jxl.jar包,只要将这个包导入即可。xlsx文件的相关操作是利用apache的poi包。 一、xls文件...

pricker ⋅ 2015/10/19 ⋅ 0

selenium + java po模式

po模式大概介绍,大家也可以自己百度看看 Page Object模式主要是将每个页面设计为一个类class,这个类包含页面中需要测试的元素(按钮、输入框、URL、标题等)和实际操作方法,这样在写测试用...

水滴的历程 ⋅ 01/10 ⋅ 0

POI 数据验证

从3.8开始,POI使用.xls和.xlsx格式处理数据校验略有不同之处。 1)针对一个或多个预定义值检查用户输入到单元格的值 以下代码将限制用户能输入到单元格A1的值是三个整数值(10、20、30)之一...

Leech ⋅ 2015/07/17 ⋅ 0

自动化excl学习笔记

学习excl操作 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.text.DecimalFormat; import java.util.A......

知止内明 ⋅ 2017/11/21 ⋅ 0

Apache POI 3.11 发布,Java 的 Office 文档操作库

Apache POI 3.11 发布,此版本是个稳定版本,包括一些新功能和 bug 修复。 发行说明: http://www.apache.org/dyn/closer.cgi/poi/release/RELEASE-NOTES.txt 完整更新日志: http://poi.apa...

oschina ⋅ 2014/12/27 ⋅ 14

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

VS2015配置并运行汇编(一步一步照图做)【vs2017的链接在最后】

x64: TITLE Add and Subtract (AddSub.asm) ; This program adds and subtracts 32-bit integers. ; Last update: 2/1/02 ;.MODEL flat,stdcall x64 not su......

simpower ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 昨天 ⋅ 0

你真的明白RPC 吗?一起来探究 RPC 的实质

你真的明白RPC 吗?一起来探究 RPC 的实质 不论你是科班出身还是半路转行,这么优秀的你一定上过小学语文,那么对扩句和缩句你一定不陌生。缩句就是去除各种修饰提炼出一句话的核心,而不失基...

AI9o後 ⋅ 昨天 ⋅ 0

z-index设置失效?

今天碰到了一个问题,就是在给li设置提示框的时候,有用到遮罩效果,本来想把对应的出现在最顶层,可是不管将li设置的z-index值设为多大,li都没有出现在遮罩层之上。 我在网上查了z-index设...

IrisHunag ⋅ 昨天 ⋅ 0

CyclicBarrier、CountDownLatch以及Semaphore使用及其原理分析

CyclicBarrier、CountDownLatch以及Semaphore是Java并发包中几个常用的并发组件,这几个组件特点是功能相识很容易混淆。首先我们分别介绍这几个组件的功能然后再通过实例分析和源码分析其中设...

申文波 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部