//excel文件

private File xlsFile;

//excel列名

private static final String[] SALARYIMPORTVALUE_COLUMN_NAMES = { “机组名称”,“显示顺序”, “备注”};

/**

* 从excel文件导入操作任务 add by ytrao 20111202

* @throws IOException

*/

public void importWoTickTask() throws IOException{

String parentBlockId = request.getParameter("parentBlockId");

String code = remote.findMaxCode(parentBlockId);

InputStream is=null;

Workbook workbook=null;

RunCWorkticketBlock opTask = null;

String msg = "";

List opTaskList = new ArrayList();

try {

is = new FileInputStream(xlsFile);

workbook = Workbook.getWorkbook(is);// 得到工作薄

Sheet sheet = workbook.getSheet(0);// 得到工作薄中的第一个工作表

int rows = sheet.getRows();// 得到excel的总行数

if (rows == 0) {

msg = "{success:true,msg:'无数据进行导入!'}";

write(msg);

} else if (rows == 1) {

msg = "{success:true,msg:'文件除一列头行外,至少还需一行数据!'}";

write(msg);

} else {

int[] column_indexs = new int[sheet.getRow(0).length];

String columnError = null;

columnError = addColumnIndex(column_indexs, sheet.getRow(0));

// 列名是否存在问题

if (columnError != null){

write(columnError);

return;

}

outer:

for (int i = 1; i < rows; i++) {

opTask = new RunCWorkticketBlock();

Cell[] cells = sheet.getRow(i);// i行的所有单元格

if(cells.length > column_indexs.length){

i++;

msg = "第" + (i+1)+ "行的数据超过列头行!
";

break;

}

for (int j = 0; j < column_indexs.length; j++) {

column_indexs[j] = j;

//0 : 序号

// 1:机组名称

if (column_indexs[j] == 0) {

if (cells.length > j

&& !"".equals(cells[j].getContents())) {

for (RunCWorkticketBlock entity : opTaskList) {

if (cells[j].getContents().equals(entity.getBlockName())) {

msg+= "Excel中第" +(i+1) + "行机组名称重复!
";

continue outer;

}

}

String list = remote.findByPId(parentBlockId);

if(list !=null&& list !=""){

//System.out.println(list);

String arry[] = list.split(",");

//System.out.println(“555555” +arry[0]);

for(int a=arry.length-1;a>=0;a–){

if (cells[j].getContents().equals(arry[a])) {

msg+= "Excel中第" +(i+1) + "行机组名称已经存在!
";

continue outer;

}

}

}

opTask.setBlockName(cells[j].getContents());

}else{

continue outer;

}

}

// 2:显示序号

else if (column_indexs[j] == 1) {

if (cells.length > j&& !"".equals(cells[j].getContents())) {

opTask.setDisplayNo(Long.parseLong(cells[j].getContents()));

}

}

// 3:备注

else if (column_indexs[j] == 2) {

if (cells.length > j

&& !"".equals(cells[j].getContents())) {

opTask.setMemo(cells[j].getContents());

}

}

}

opTask.setParentBlockId(Long.parseLong(parentBlockId));

opTask.setLastModifyBy(employee.getWorkerCode());

opTask.setLastModifyDate(new Date());

opTask.setIsUse("Y");

opTaskList.add(opTask);

}

if(msg.equals(""))

{

for(RunCWorkticketBlock entity : opTaskList){

remote.save(entity);

}

write("{success:true,msg:'导入成功!'}");

}

else

{

write("{success:true,msg:'数据填写存在问题或机组名称重复,请确认后在导入,
"+msg+"'}");

}

}

} catch (Exception e) {

e.printStackTrace();

} finally {

workbook.close();

is.close();

}

}

/**

* 检测导入的Excel文件列名是否正确

* @param column_indexs

* @param cells

* @return String

*/

private String addColumnIndex(int[] column_indexs, Cell[] cells) {

for (int i = 0; i < cells.length; i++) {

boolean isError = true;

for (int j = 0; j < SALARYIMPORTVALUE_COLUMN_NAMES.length; j++) {

if (SALARYIMPORTVALUE_COLUMN_NAMES[j].equals(cells[i].getContents())) {

column_indexs[i] = j;

isError = false;

}

}

if (isError) {

return "{success:true,msg:'" + cells[i].getContents()

+ "列不是要导入的具体列!'}";

}

}

return null;

}

public File getXlsFile() {

return xlsFile;

}

public void setXlsFile(File xlsFile) {

this.xlsFile = xlsFile;

}

以前做传统行业开发,用到的导入模型

ajax传递excel后台接收,前端上传EXCEL文件,后台servlet怎么获取EXCEL中的数据相关推荐

  1. Java中使用MultipartFile类型接收前端上传的文件过大报异常解决

    问题:在使用MultipartFile类型上传文件时,发现上传的文件过大会报异常,异常信息如下: org.apache.tomcat.util.http.fileupload.impl.SizeLim ...

  2. Spring Boot接收前端上传的多个文件

    Spring Boot接收前端上传的多个文件 突然被问到这个功能,太久没用到这个功能,印象有些模糊,这个文章记录一下. 前端那里会传一个字段和一些文件到后端,然后后端接收保存一下. 代码 可以直接使用 ...

  3. 前端上传大文件怎么处理

    前端上传大文件怎么处理 - 掘金 背景 当我们在做文件的导入功能的时候,如果导入的文件过大,可能会导所需要的时间够长,且失败后需要重新上传,我们需要前后端结合的方式解决这个问题 思路 我们需要做几件事 ...

  4. 后台接收datetime_input上传date日期时间数据到后台报400怎么办?

    前端上传日期时间数据到后台时,上传失败 我这里是用里存放时间,上传到后台的controller方法时,参数类型是java.util.Date,发现没有到controller方法里面.报错:不能将Str ...

  5. 怎么接收layui上传的文件_如何接收layui上传excel上传及php处理【】

    怎样在arcgis中导出表格 如果是shp格式,直接用excel打开dbf文件,否则,加载数据,layer右键打开属性表,找到一个export按钮,导出为dbf,excel可以直接打开. ArcGIS ...

  6. go语言接收html上传的文件,html5原生js拖拽上传(golang版)

    package main import ("fmt" "io" "net/http" "os")const( uploa ...

  7. php微信上传视频文件在哪里,微信小程序中实现上传视频的开发代码

    本篇文章给大家带来的内容是关于微信小程序中实现上传视频的开发代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 其实这个比较简单,官方提供了API接口,基本上直接调用就可以了,话不多 ...

  8. ASP.NET Core 3.1系列(7)——Controller接收前端上传文件的方法

    1.前言 前一篇博客主要介绍了在GET和POST模式下Controller接收参数的一系列方法,归根结底还是一些简单类型参数的传递和接收.当前端界面需要上传文件时,后台的Controller又应该如何 ...

  9. 怎么接收layui上传的文件_layui 上传文件_批量导入数据UI的方法

    使用layui的文件上传组件,可以方便的弹出文件上传界面. 效果如下: 点击[批量导入]按钮调用js脚本importData(config)就可以实现数据上传到服务器. 脚本: /*** * 批量导入 ...

最新文章

  1. java 中ln是什么意思_JavaBean命名规范
  2. vs2010 问题 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  3. 基于Kubernetes1.20.1版本开发调试环境搭建
  4. SpringBoot集成OpenOffice实现doc文档转html
  5. centos下升级g++版本
  6. adb-常用命令记录
  7. linux系统用户登陆时脚本执行顺序
  8. 深度学习《自动编码器》
  9. 重磅!校友会2020中国大学排名出炉!为自己母校感到骄傲!
  10. ubuntu通过vmware与访问宿主的文件
  11. 【报告分享】To B企业如何玩转视频号.pdf(附下载链接)
  12. vmware下Ubuntu屏幕分辨率设置
  13. 云服务器怎么增加d盘_怎么租用美国云服务器比较便宜?
  14. 有赞 插入html,有赞 前端工程师面试题
  15. 计算机系第一学期电脑,公共课第一学期《计算机基础》.doc
  16. MATLAB线性规划相关函数用法
  17. python日志:去掉noteexpress导出参考文献题录的空格
  18. 【VUE】如何关闭代码规范extra semicolon
  19. 磁珠 符号_电子元件磁珠该如何使用呢?
  20. Japanese Student Championship 2019 Qualification B - Kleene Inversion(规律 + 快速乘)

热门文章

  1. python3进行汉字和unicode码的转换
  2. java配置出现的问题解释_java SE问题总结(持续更新。。。)
  3. php new对象 调用函数,关于JS中new调用函数的原理介绍
  4. opencv converTO()函数 转换图像的数据类型不改变通道数,注意与cvtColor()改变颜色空间/彩色空间/色彩空间函数区分
  5. C语言linux gettimeofday()函数和time()函数的区别(后者只能得到秒级系统时间,前者能得到毫秒甚至微秒级系统时间)
  6. C语言malloc动态分配内存分配失败怎么办?exit(OVERFLOW);(include <cstdlib>)
  7. pycharm如何修改默认浏览器?修改成chrome
  8. python 从字符串中提取数字 re.findall()
  9. git中的gitgnore是什么? 码云gitee
  10. python 怎么报错后再次启动?