Excel文件导入导出
/**
* 导入Excel文件数据
*
* @param file 将要导入的Excel文件
* @param fileCheckKeyWord 用于判断导入文件是否正确的关键字符串
* @param keyX 用于判断导入文件是否正确的关键字符串所在的x坐标位置
* @param keyY 用于判断导入文件是否正确的关键字符串所在的y坐标位置
* @param startRow 导入数据开始行数
* @param startLine 导入数据开始列数
*
* @return List《Object[]》
* @throws Exception
*/
public static List<Object[]> excelImport(File file, String fileCheckKeyWord, int keyX, int keyY, int startRow, int startLine) throws Exception{
List<Object[]> dataList = new ArrayList<Object[]>();
InputStream inputStream = new FileInputStream(file);
WorkbookSettings wbs = new WorkbookSettings();
wbs.setSuppressWarnings(true);
Workbook book = Workbook.getWorkbook(inputStream, wbs);
Sheet sh = book.getSheet(0);
//判断选择excel文件是否正确
String typeContent = sh.getCell(keyX, keyY).getContents().trim();
if(!typeContent.equals(fileCheckKeyWord)){
return dataList;
}
//行数
int rows = sh.getRows();
if(rows >= 65536){//超出 excel 03最大行数
return dataList;
}
//列数
int lines = sh.getColumns();
//判断导入的数据是否有误
Object[] dataObjArr = null;
for(int i = startRow; i <= rows; i++){
dataObjArr = new Object[lines - startLine + 1];
for(int j = startLine; j <= lines; j++){
String content = sh.getCell(j, i).getContents().trim();
if(ComFun.strNull(content) && !content.trim().equals("")){
dataObjArr[j - startLine] = content;
} else {
dataObjArr[j - startLine] = "";
}
}
}
return dataList;
}
/**
* 导出EXCEL文件
*
* @param fileName 导出文件名 (为NULL时,文件名称按照时间戳生成)
* @param headCellNames 头部标题名称组
* @param dataList 数据List,与参数headCellNames对应
*/
public static void excelExport(String fileName,
String[] headCellNames, List<Object[]> dataList) throws IOException, WriteException {
if(ComFun.strNull(dataList) && dataList.size() > 0){
if(!ComFun.strNull(fileName)){
fileName = DateFormatUtil.dateToStr(new Date(), DateFormatUtil.TYPE4);
}
String[] cellNames = new String[headCellNames.length + 1];
cellNames[0] = "序号";
for(int i=0; i<headCellNames.length; i++){
cellNames[i+1] = headCellNames[i];
}
WritableWorkbook book = Workbook.createWorkbook(new File("C:\\ACjba\\fileDownload\\" + fileName + ".xls"));// 创建文件
WritableSheet sheet = book.createSheet(fileName, 0);// 创建工作薄
sheet.setName(fileName);
sheet.getSettings().setVerticalFreeze(2);// 冻结前两行
/* 开始创建sheet第一行 */
// 标题字体、样式
WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 12,
WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,
Colour.BLACK);// 设置标题字体
WritableCellFormat titleFormat = new WritableCellFormat(titleFont);// 设置标题格式
titleFormat.setAlignment(Alignment.CENTRE);
titleFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
// 合并单元格
sheet.mergeCells(1, 0, cellNames.length, 0);
// 设置行高
sheet.setRowView(0, 800, false);// 40磅
// label理解为sheet中的单元格,此处在第1列0行加入指定内容、样式
Label titleLabel = new Label(1, 0, fileName, titleFormat);
// 将label加入到sheet中,第一行创建完成
sheet.addCell(titleLabel);
/* 开始创建第二行 */
// 表头字体、样式
WritableFont cellFont = new WritableFont(WritableFont.ARIAL, 9,
WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,
Colour.BLACK);
WritableCellFormat cellFormat = new WritableCellFormat(cellFont);
// 设置自动换行
cellFormat.setWrap(true);
cellFormat.setAlignment(Alignment.CENTRE);
cellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
cellFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);// 设置边框
// 设置列宽
for (int i = 1; i <= cellNames.length; i++) {
sheet.setColumnView(i, 20);
sheet.setRowView(1, 440);// 22磅
sheet.addCell(new Label(i, 1, cellNames[i - 1], cellFormat));
}
// 创建第三行
sheet.setRowView(2, 440);// 22磅
/* 循环创建传入集合(第四行以后) */
WritableFont bodyFont = new WritableFont(WritableFont.ARIAL, 9,
WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,
Colour.BLACK);
WritableCellFormat bodyFormat = new WritableCellFormat(bodyFont);
// 设置自动换行
bodyFormat.setWrap(true);
bodyFormat.setAlignment(Alignment.CENTRE);
bodyFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
bodyFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);// 设置边框
int r = 2;
for (int i=0;i<dataList.size();i++) {
sheet.setRowView(r, 440);
sheet.addCell(new Label(1, r, String.valueOf(r - 1), bodyFormat));// 序号
for(int j=2; j<cellNames.length+1; j++){
sheet.addCell(new Label(j, r, String.valueOf(dataList.get(i)[j-2]), bodyFormat));
}
r++;
}
book.write();
book.close();
}
}
Excel文件导入导出的更多相关文章
- NodeJs之EXCEL文件导入导出MongoDB数据库数据
NodeJs之EXCEL文件导入导出MongoDB数据库数据 一,介绍与需求 1.1,介绍 (1),node-xlsx : 基于Node.js解析excel文件数据及生成excel文件. (2),ex ...
- Excel导入导出工具(简单、好用且轻量级的海量Excel文件导入导出解决方案.)
Excel导入导出工具(简单.好用且轻量级的海量Excel文件导入导出解决方案.) 置顶 2019-09-07 16:47:10 $9420 阅读数 261更多 分类专栏: java 版权声明:本 ...
- Excel文件导入导出(基于Nodejs、exceljs)
Excel导入.导出是大多数项目的管理后台必备功能.几年来使用过多个该功能的实现包,最近一次开发该功能,突然发现一个人气极高(3000+)的包,这里记录一下使用方法. 大凡厉害的技术的文档咋一看都想字 ...
- C# excel文件导入导出
欢迎关注微信公众号 C#编程大全 这里有更多入门级实例帮你快速成长 在C#交流群里,看到很多小伙伴在excel数据导入导出到C#界面上存在疑惑,所以今天专门做了这个主题,希望大家有所收获! 环境:wi ...
- postman 测试Excel文件导入导出功能
1.导入的测试方法 选择form-data,key值填写方法对应的参数,选择File,Value处上传文件即可. 2. 导出的测试方法 在导出文件的时候,响应结果是乱码,然后在测试的时候选择下载,下载 ...
- 用NODEJS处理EXCEL文件导入导出,文件上传
參考文章 http://librajt.github.io/2013/08/04/handle-excel-file-with-nodejs/ 对照了 ExcelJS ,https://github. ...
- CSV文件导入导出MySQL
使用SQLyog 工具导入文件数据到MySQL: Excel文件导入导出: 需要驱动:Microsoft Office 2007驱动 导入需要注意的问题:1.Excel里数值列,默认导入会变成浮点型. ...
- c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出
c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出 using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using S ...
- Laravel Excel 实现 Excel-CSV 文件导入导出功能
Laravel Excel 是一款基于 PHPExcel 开发的Laravel框架专用的 Excel/CSV 文件导入导出功能的扩展包,用起来的非常方便. 它的 Github 地址是:https:// ...
随机推荐
- 【04】AngularJS 表达式
AngularJS 表达式 AngularJS 使用 表达式 把数据绑定到 HTML. AngularJS 表达式 AngularJS 表达式写在双大括号内:{{ expression }}. Ang ...
- Bugzilla 系统企业应用案例
目录 一. 概述: - 4 - 二. 目的 - 4 - 三. 执行原则 - 4 - 四. 管理办法 - 4 - 五. BUG处理流程图 - 5 - 六. 主要职责 - 6 - 七. 需求类问题处理 - ...
- Drools等规则引擎技术对比分析
项目中需要设计开发一个规则引擎服务,于是调研了业界常用的规则引擎. 常见的规则引擎如下: Ilog JRules 是最有名的商用BRMS: Drools 是最活跃的开源规则引擎: Jess 是Clip ...
- 墨卡托坐标与LBS应用
今天了解到这边的LBS应用,一般用的是墨卡托坐标. 也就是商品库的商品入库的时候,会根据输入,使用百度地图提供的一个API,来转换成一个墨卡托坐标. 然后用户流量过来的时候,会带来历史坐标,和当前坐标 ...
- zoj 月赛
Wumpus Time Limit: 2 Seconds Memory Limit: 65536 KB One day Leon finds a very classic game call ...
- git 手动操作
git 手动操作 以下所有的情况都需要在上面那个目录下: 查看改动: git status // 所有改动都在这里. 提交代码: git add <file_name> // 把代码放到 ...
- Unity3d PBR海水渲染
三层水 博主近期渲染:近期用unity5弄的一些渲染 ---- by wolf96 http://blog.csdn.net/wolf96
- POJ 1861 Network (Kruskal求MST模板题)
Network Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 14103 Accepted: 5528 Specia ...
- swift 2.0 语法 函数
//: Playground - noun: a place where people can play import UIKit /*: 函数 * 格式 func 函数名称(形参名称1: 形参类型, ...
- 从头认识java-13.7 什么时候使用泛型?
这一章节我们来讨论一下什么时候使用泛型? 答案:当你希望代码能够跨多个类型(不同的类型,不包括继承关系)工作的时候. 1.当没有确切类型的时候 以下是错误的代码: package com.ray.ch ...