当前位置: 首页 > news >正文

POI技术

1.excel左上角有绿色小图标说明单元格格式不匹配 
2.模板中设置自动计算没效果,需要加上sheet.setForceFormulaRecalculation(true);

FileInputStream fs = new FileInputStream(path);  //使用导出模板文件
POIFSFileSystem ps = new POIFSFileSystem(fs);               //使用POI提供的方法得到excel的信息
FileOutputStream out = new FileOutputStream(outFileName); //向outFileName中写数据 HSSFWorkbook wb = new HSSFWorkbook(ps); HSSFSheet sheet = wb.getSheetAt(0); //获取到工作表 sheet.setForceFormulaRecalculation(true); //设置自动计算 //隐藏:根据条件设置颜色:但是由于设置颜色后,就无法通过模板里面的公式做出计算,所以去掉 //字体:绿色、13号大小、水平垂直居中、保留两位小数 HSSFDataFormat df = wb.createDataFormat(); // 此处设置数据格式 Font font1 = wb.createFont(); font1.setColor(HSSFColor.SEA_GREEN.index); font1.setFontHeightInPoints((short)13); //字体大小 font1.setFontName("宋体"); HSSFCellStyle style1 = wb.createCellStyle(); style1.setFont(font1); style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中 style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中 style1.setDataFormat(df.getBuiltinFormat("0.00"));//保留两位小数点



区域数据导入(Apache POI

操作office办公文档;

 

区域:国家划分行政单位。 省市区构成;

 

 

1.1 Jquery OCUpload一键上传插件

 

 

1、 传统文件上传:页面三要素

a) 表单提交的方式POST

b) 表单中enctype=multipart/form-data

c) 在表单中存在<input  type=file name=test>

2、 ocUpload使用:

a) 引入js文件

<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.8.3.js"></script>

<script type="text/javascript" src="${pageContext.request.contextPath }/js/ocupload/jquery.ocupload-1.1.2.js"></script>

b) 在页面提供任意的元素 给出id

c) 在页面加载完成后调用uplaod方法:动态修改html元素

 -

 

1.2 在区域页面使用ocUpload

1、 页面:/pages/base/area.jsp

 

 

 

 

1.3 在服务端接收上传文件

 

 

a) 创建三层接口,类

  1. 通过spring组件扫描创建service,action的对象
  2. 通过spring-data-jpa创建dao的对象

b) 完成注入

c) 配置struts2注解

d) 添加方法

e) 配置结果视图

1.4 Apache POI

 

 

 

官网:http://poi.apache.org/

 

 

导入依赖:

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi</artifactId>

<version>${poi.version}</version>

</dependency>

1.4.1 Demo

 

HSSF:操作07版本之前 后缀名xxx.xls

XSSF:操作07版本之后 后缀名xx.xlsx

 

 

 

 

需求:解析本地磁盘excel文件中内容:

 

 

 

public static void main(String[] args) throws Exception {

//解析本地磁盘exel文件 后缀名:xls

//文件目录

String pathname = "H:\\北京Java271_速运快递\\速运快递项目-day04\\资料\\03_区域测试数据\\区域导入测试数据.xls";

//使用POI提供API读取文件

//:excel文件对象

//07版本  XSSFWorkbook

HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(new File(pathname)));

//解析文件中数据

//从文件对象中获取标签页

HSSFSheet sheet = workbook.getSheetAt(0);

//遍历标签页中行

for (Row row : sheet) {

//遍历每一行中单元格中数据

System.out.println();

for (Cell cell : row) {

System.out.print(cell.getStringCellValue()+"  ");

}

}

 

}

 

1.4.2 在项目中使用POI

//定义变量接收上传文件

private File upload;

//接收文件MIME类型,文件名称

private String uploadContentType;

private String uploadFileName;

public void setUpload(File upload) {

this.upload = upload;

}

 

 

public void setUploadContentType(String uploadContentType) {

this.uploadContentType = uploadContentType;

}

 

 

public void setUploadFileName(String uploadFileName) {

this.uploadFileName = uploadFileName;

}

 

 

/**

  * @Description: 通过POI解析excel文件中数据

 */

@Action("areaAction_importXls")

public String importXls() throws Exception {

List<Area> list = new ArrayList<>();

//创建excel文件对象

HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(upload));

//获取标签页

HSSFSheet sheet = workbook.getSheetAt(0);

//遍历标签页获取行

for (Row row : sheet) {

//忽略标题行

if(row.getRowNum()==0){

continue;

}

String id = row.getCell(0).getStringCellValue();

String province = row.getCell(1).getStringCellValue();

String city = row.getCell(2).getStringCellValue();

String district = row.getCell(3).getStringCellValue();

String postcode = row.getCell(4).getStringCellValue();

//创建区域对象

Area area = new Area(id, province, city, district, postcode, null, null);

list.add(area);

}

areaService.save(list);

 

//释放资源

workbook.close();

//由于提交表单到Iframe中,故配置结果视图也看不到

return NONE;

}




转载于:https://www.cnblogs.com/shan1393/p/9334749.html

相关文章:

  • 微信公众号之模板消息使用
  • Windows Unity ARKit发布到IOS相关设置及错误解决
  • Spring配置补充
  • 基于 HTML5 结合互联网+ 的 3D 隧道
  • Ligowave无线网桥15级手拉手链路设计及稳定性保障
  • JAVAOOP异常
  • RxJava mini
  • 从零开始的程序逆向之路 第一章——认识OD(Ollydbg)以及常用汇编扫盲
  • 使用在线yum源安装maridb并配置,以及跳过密码并修改。
  • 绝对音乐No.1
  • 阿里云和腾讯云VPC互通配置
  • java成神之路截图
  • supervisor 永不挂掉的进程 安装以及使用
  • Vue-cli原理分析
  • 数据库sql优化
  • .pyc 想到的一些问题
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Java|序列化异常StreamCorruptedException的解决方法
  • Linux各目录及每个目录的详细介绍
  • MD5加密原理解析及OC版原理实现
  • MySQL数据库运维之数据恢复
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 订阅Forge Viewer所有的事件
  • 观察者模式实现非直接耦合
  • 基于组件的设计工作流与界面抽象
  • 手写一个CommonJS打包工具(一)
  • 微信小程序:实现悬浮返回和分享按钮
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 移动端唤起键盘时取消position:fixed定位
  • - 转 Ext2.0 form使用实例
  • 《天龙八部3D》Unity技术方案揭秘
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (pojstep1.3.1)1017(构造法模拟)
  • (pytorch进阶之路)扩散概率模型
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (一) springboot详细介绍
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)VC++中ondraw在什么时候调用的
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET MVC第三章、三种传值方式
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .net 调用php,php 调用.net com组件 --
  • .NET6实现破解Modbus poll点表配置文件
  • .NET运行机制
  • ::前边啥也没有
  • [@Controller]4 详解@ModelAttribute
  • [Angular 基础] - 表单:响应式表单
  • [BT]BUUCTF刷题第4天(3.22)
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)