excel导出导入通用方法
/**
* 方法说明:批量导出通用方法
* 创建时间:2018年8月24日 ***
* @param filePath 文件地址
* @param sheetName 分页名称
* @param title Excel文件表头(各个属性中文名称)
* @param propertys 导出数据对象实体类的属性名称,首字母大写
* @param conList 导出的数据集合
* @return
*/
public static boolean exportExcel(String filePath, String sheetName, String[] title, String[] propertys, List<Object> conList) {
try {
if (title != null && title.length > 0 && sheetName != null && !"".equals(sheetName)) {
// 导出excel标题
// String[] title = { "基础基地课堂教学质量评价计算", "序号", "姓名", "职务", "系部", "教研室", "领导评价成绩", "同行评价成绩", "专家评价成绩", "学员评价成绩", "最终成绩", "评价档次"};
// 创建成成excel工具类
WritableWorkbook wwb;
// 获取输出流
OutputStream os = new FileOutputStream(filePath);
wwb = Workbook.createWorkbook(os);
// 生成excel文件wwb.createSheet(excel文件名, 第几页);
WritableSheet sheet = wwb.createSheet(sheetName, 0);
// Label是单元格内容的Model
Label label = null;
// jxl 是专门操作excel的工具类
jxl.write.WritableFont wfont = new jxl.write.WritableFont(WritableFont.createFont("微软雅黑"), 16);
// 生成一种字体
WritableCellFormat font = new WritableCellFormat(wfont);
// 字体水平居中
font.setAlignment(jxl.format.Alignment.CENTRE);
// 字体垂直居中
font.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
// 自动换行
font.setWrap(true);
// sheet操作列的属性
// 合并单元格 sheet.mergeCells(第几类,第几格,到第几列,到第几格)
sheet.mergeCells(0, 0, title.length-2, 0);
// 单元格行高
sheet.setRowView(0, 750);
// 创建label,给其内容
label = new Label(0, 0, title[0], font);
// 写进excel
sheet.addCell(label);
for (int i = 1; i < title.length; i++) {
sheet.setRowView(i, 800);
sheet.setColumnView(0, 8);
sheet.setColumnView(i, 24);
label = new Label(i - 1, 1, title[i], font);
sheet.addCell(label);
}
wfont = new jxl.write.WritableFont(WritableFont.createFont("楷体"), 12);
font = new WritableCellFormat(wfont);
font.setAlignment(jxl.format.Alignment.CENTRE);
font.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
font.setWrap(true);
if (conList != null && conList.size() > 0) {
int j = 2;
for (int i = 0; i < conList.size(); i++) {
Object tr = conList.get(i);
if (tr != null) {
sheet.setRowView(j, 800);
sheet.setColumnView(0, 8);
sheet.setColumnView(i + 1, 24);
label = new Label(0, j, j - 1 + "", font);
sheet.addCell(label);
for (int l = 0; l < propertys.length; l++) {
label = new Label(l+1, j, (String) tr.getClass().getMethod("get" + propertys[l]).invoke(tr), font);
sheet.addCell(label);
}
j++;
}
}
}
SheetSettings setting = sheet.getSettings();
// 页边距start
setting.setTopMargin(0.0);
setting.setLeftMargin(0.5);
setting.setRightMargin(0.0);
setting.setBottomMargin(0.0);
// 页边距end
// 写入数据
wwb.write();
// 关闭文件
wwb.close();
return true;
}
} catch (Exception e) {
System.out.println("writeExcelForDoc1---出现异常---");
e.printStackTrace();
}
return false;
}
/**
*
* 方法说明:
* 创建时间:2018年8月24日 (***)
* @param excelPath 文件地址
* @param obj 要导入的数据实体类
* @param propertys 要导入的字段 字符串名称数组 首字母大写
* @param nameCodeMap Map<导入字段,Map<导入内容,转义信息>> 例: Map<性别,Map<男,"1">>
* @param outMap 非必填字段
* @return
*/
public static List<Object> uploadExcel(String excelPath, Object obj, String[] propertys, Map<String,Map<String,String>> nameCodeMap, Map<String,String> outMap) {
try {
File file = new File(excelPath);
Workbook book = Workbook.getWorkbook(file);
List<Object> tempList = new ArrayList<Object>();
Sheet[] sheets = book.getSheets();
for (Sheet sheet : sheets) {
// 获得第一个工作表对象
// Sheet sheet = book.getSheet(0);
if (sheet!= null && obj!=null) {
int columnum = sheet.getColumns();// 得到列数
int rownum = sheet.getRows();// 得到行数
for (int i = 2; i < rownum; i++) {
boolean bRet3 = false;
Cell cellFirst = sheet.getCell(0, i);
String resultFirst = cellFirst.getContents();
if(resultFirst==null || "".equals(resultFirst)){
continue;
}
for (int j = 1; j < columnum; j++) {
// 得到第一列第一行的单元格
Cell cell1 = sheet.getCell(j, i);
String result = cell1.getContents();
result = result.trim();
if ("".equals(result) || result==null) {
if("1".equals(outMap.get(propertys[(j-1)]))){
continue;
}else{
break;
}
}else{
bRet3 = true;
if(nameCodeMap!=null && nameCodeMap.size()>0 && nameCodeMap.get(propertys[(j-1)])!=null && !"".equals(nameCodeMap.get(propertys[(j-1)]))){
String value = nameCodeMap.get(propertys[(j-1)]).get(result);
if(value!=null && !"".equals(value)){
obj.getClass().getMethod("set"+propertys[(j-1)],String.class).invoke(obj, value);
}
}else if("-".equals(result) || "无".equals(result) || "空".equals(result)){
obj.getClass().getMethod("set"+propertys[(j-1)],String.class).invoke(obj, "");
}else{
obj.getClass().getMethod("set"+propertys[(j-1)],String.class).invoke(obj, result);
}
}
}
if (bRet3) {
tempList.add(obj);
obj = obj.getClass().getMethod("initThisObj").invoke(obj);
}else{
book.close();
return null;
}
}
}
}
book.close();
file = null;
// System.out.println("tempList:"+tempList);
// Excel里面有数据才会加到集合里,没有返回空集合
return tempList;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
excel导出导入通用方法的更多相关文章
- ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法
ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法 (2010-05-28 12:54:34) http://blog.sina.com.cn/s/blog_67d41beb0100ixn ...
- 不同版本的SQL Server之间数据导出导入的方法及性能比较
原文:不同版本的SQL Server之间数据导出导入的方法及性能比较 工作中有段时间常常涉及到不同版本的数据库间导出导入数据的问题,索性整理一下,并简单比较下性能,有所遗漏的方法也欢迎讨论.补充. 0 ...
- 使用NPOI组件完成的Excel导出导入(附源代码,测试通过)
最近遇到一个Excel导入导出的问题,要支持winform和webform,这里我是一个认真严谨的coder,所以决定把这个记录下来!和大家一起分享一下!如果需要的同学可以下载哦! 对于NPOI这个组 ...
- Mysql 用命令行导出导入数据方法
方法一: 导出参考:https://www.cnblogs.com/activiti/p/6700044.html 用mysqldump可以导出整个数据库里的表和数据,不单单是只导出某个表的数据 命令 ...
- excel 导出导入
/** * 导出 * @param * @param * @return */ public function exportexcel() { set_time_limit(0); ini_set(' ...
- C#Excel导出导入
using System; using System.Collections.Generic; using NPOI; using NPOI.HPSF; using NPOI.HSSF; using ...
- Oracle导出/导入数据方法--两种方法(pde格式/dmp格式)
转至:https://www.cnblogs.com/houbxblogs/articles/13365557.html?ivk_sa=1024320u 1.导出数据方法一(pde格式) 工具→ 导出 ...
- 【Oracle】EXPDP和IMPDP数据泵进行导出导入的方法
一.expdp/impdp和exp/imp 客户端工具 1.exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. 服务端工具 2.expdp和impdp是服务端的工具程序,他们 ...
- php 之 excel导出导入合并
<?php class Excel extends Controller { //直属高校 public function __construct() { parent::Controller( ...
随机推荐
- CKEditor 4.5 filetools, XHR.withCredentials = true,
var editor = CKEDITOR.replace( 'editor1', { extraPlugins: 'uploadimage,filetools', imageUploadUrl: ' ...
- 微软发布Xamarin Live Player:Win10可开发iOS
微软在Build2017大会上发布一款名为Xamarin Live Player的全新工具,可以让PC用户在不使用Mac的前提下测试和调试iOS应用.但是向App Store提交应用时仍然需要Xcod ...
- 在Django中使用ORM创建图书管理系统
一.ORM(对象关系映射) 很多语言的web框架中都有这个概念 1. 为什么要有ORM? 1. 写程序离不开数据,要使用数据就需要连接数据库,但是不同的数据库在sql语句上(mysql,oracle等 ...
- 【模板】2-SAT 问题
[传送门] 分析 按照逻辑关系建图,跑tarjan,如果上下点在一个环中,说明不可能,不然就可能. 代码 #include <bits/stdc++.h> #define ll long ...
- neutron-删除负载均衡器
neutron-删除负载均衡器 在清除垃圾数据的时候,删除负载均衡器,总是有很多依赖.写了一个脚本,连同依赖资源一起删除 #!/bin/bash delete(){ local id id=$1 lo ...
- 洛谷 P4302 【[SCOI2003]字符串折叠】
又来填一个以前很久很久以前挖的坑 首先如果先抛开折叠的内部情况不谈,我们可以得到这样的一个经典的区间DP的式子 $ f[l][r]=min(f[l][r],f[l][k]+f[k+1][r])(l&l ...
- 如何修改hosts文件
如何修改hosts文件 1.进入路径 C:\Windows\System32\drivers\etc 2.拷贝hosts文件到其他地方3.修改拷贝的hosts文件,右键用记事本打开4.直接修改或添加 ...
- WebSocke实时通讯协议
WebSocket 是什么? WebSocket 是一种网络通信协议.RFC6455 定义了它的通信标准. WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议 ...
- 金融量化分析【day110】:NumPy-切片和索引
一.索引和切片 1.数组和标量之间的运算 2.同样大小的数组之间的运算 3.数组索引 4.数组切片 1.一维数组 2.多维数组 二.布尔索引 1.问题 给一个数组,选出数组中所有大于5的数 1.答案 ...
- Windows系统下查看某一进程下所有线程的dos命令
1.查看进程 pslist或 tasklist 注:若出现“pslist不是外部或内部命令,也不是可运行的程序....”,需要去TechNet官网下载psTools(链接https://technet ...