幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

100个Java工具类之5多种方式解析和通过List生成Ex

  该系列为java工具类系列,主要展示100个常用的java工具类。
  此文重点讲述:多种方式解析Excel。
  本文目录:通过List生成Excel文件解析Excel文件(入参是MultipartFile)解析Excel文件(入参是Excel本地路径)
  一、通过List生成Excel文件importorg。apache。poi。ss。usermodel。HorizontalAlignment;importorg。apache。poi。ss。util。CellRangeAddress;importorg。apache。poi。xssf。usermodel。;importjava。io。File;importjava。io。FileOutputStream;importjava。io。IOException;importjava。text。SimpleDateFormat;importjava。util。;Author程序幻境Date20221119Version1。0classExcelUtils{privatestaticExcelUtilsinstancenewExcelUtils();privateExcelUtils(){}publicstaticExcelUtilsgetInstance(){returninstance;}将ListMapString,Object类型的数据导出为Excel默认Excel文件的输出路径为项目根目录下文件名为filename时间戳。xlsxparammapList数据源(通常为数据库查询数据)paramfilename文件名前缀,实际文件名后会加上日期paramtitle表格首行标题return文件输出路径publicStringcreateExcel(ListMapString,ObjectmapList,Stringfilename,Stringtitle){获取数据源的key,用于获取列数及设置标题MapString,ObjectmapmapList。get(0);SetStringstringSetmap。keySet();ArrayListStringheadListnewArrayList(stringSet);定义一个新的工作簿XSSFWorkbookwbnewXSSFWorkbook();创建一个Sheet页XSSFSheetsheetwb。createSheet(title);设置行高sheet。setDefaultRowHeight((short)(2256));为有数据的每列设置列宽for(inti0;iheadList。size();i){sheet。setColumnWidth(i,8000);}设置单元格字体样式XSSFFontfontwb。createFont();font。setFontName(等线);font。setFontHeightInPoints((short)16);在sheet里创建第一行,并设置单元格内容为title(标题)XSSFRowtitleRowsheet。createRow(0);XSSFCelltitleCelltitleRow。createCell(0);titleCell。setCellValue(title);合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列,截至列sheet。addMergedRegion(newCellRangeAddress(0,0,0,headList。size()1));创建单元格文字居中样式并设置标题单元格居中XSSFCellStylecellStylewb。createCellStyle();cellStyle。setAlignment(HorizontalAlignment。CENTER);titleCell。setCellStyle(cellStyle);获得表格第二行XSSFRowrowsheet。createRow(1);根据数据源信息给第二行每一列设置标题for(inti0;iheadList。size();i){XSSFCellcellrow。createCell(i);cell。setCellValue(headList。get(i));}XSSFRowrows;XSSFCellcells;循环拿到的数据给所有行每一列设置对应的值for(inti0;imapList。size();i){在这个sheet页里创建一行rowssheet。createRow(i2);给该行数据赋值for(intj0;jheadList。size();j){StringvaluemapList。get(i)。get(headList。get(j))。toString();cellsrows。createCell(j);cells。setCellValue(value);}}DatedatenewDate();SimpleDateFormatdateFormatnewSimpleDateFormat(yyyyMMdd);使用项目根目录,文件名加上时间戳StringpathSystem。getProperty(user。dir)filenamedateFormat。format(date)。xlsx;try{FilefilenewFile(path);FileOutputStreamfileOutputStreamnewFileOutputStream(file);wb。write(fileOutputStream);fileOutputStream。close();}catch(IOExceptione){e。printStackTrace();}returnpath;}publicstaticvoidmain(String〔〕args){ListMapString,ObjectlistnewArrayList();for(inti0;i3;i){MapString,ObjectmapnewHashMap();map。put(测试1,i);map。put(测试2,i);map。put(测试3,i);list。add(map);}ExcelUtils。getInstance()。createExcel(list,data,测试数据);}}
  二、解析Excel文件(入参是Excel本地路径)Author程序幻境Date20221119Version1。0importjava。io。IOException;importjava。io。InputStream;importjava。text。DecimalFormat;importjava。text。SimpleDateFormat;importjava。util。ArrayList;importjava。util。Date;importjava。util。List;importorg。apache。log4j。Logger;importorg。apache。poi。hssf。usermodel。HSSFDataFormat;importorg。apache。poi。hssf。usermodel。HSSFDateUtil;importorg。apache。poi。hssf。usermodel。HSSFWorkbook;importorg。apache。poi。ss。usermodel。;importorg。apache。poi。xssf。usermodel。XSSFWorkbook;importorg。springframework。web。multipart。MultipartFile;解析excel上传数据publicclassExcelUtil{privatestaticfinalLoggerlogLogger。getLogger(ExcelUtil。class);解析excelparamfilereturnthrowsIOExceptionpublicstaticListString〔〕getExcelData(MultipartFilefile)throwsIOException{checkFile(file);获得Workbook工作薄对象WorkbookworkbookgetWorkBook(file);创建返回对象,把每行中的值作为一个数组,所有行作为一个集合返回ListString〔〕listnewArrayListString〔〕();if(workbook!null){for(intsheetNum0;sheetNumworkbook。getNumberOfSheets();sheetNum){获得当前sheet工作表Sheetsheetworkbook。getSheetAt(sheetNum);if(sheetnull){continue;}获得当前sheet的开始行intfirstRowNumsheet。getFirstRowNum();获得当前sheet的结束行intlastRowNumsheet。getLastRowNum();循环除了所有行,如果要循环除第一行以外的就firstRowNum1for(introwNumfirstRowNum;rowNumlastRowNum;rowNum){获得当前行Rowrowsheet。getRow(rowNum);if(rownull){continue;}获得当前行的开始列intfirstCellNumrow。getFirstCellNum();获得当前行的列数intlastCellNumrow。getLastCellNum();String〔〕cellsnewString〔row。getLastCellNum()〕;循环当前行for(intcellNumfirstCellNum;cellNumlastCellNum;cellNum){Cellcellrow。getCell(cellNum);cells〔cellNum〕getCellValue(cell);}list。add(cells);}}}returnlist;}检查文件paramfilethrowsIOExceptionpublicstaticvoidcheckFile(MultipartFilefile)throwsIOException{判断文件是否存在if(nullfile){log。error(文件不存在!);}获得文件名StringfileNamefile。getOriginalFilename();判断文件是否是excel文件if(!fileName。endsWith(xls)!fileName。endsWith(xlsx)){log。error(fileName不是excel文件);}}publicstaticWorkbookgetWorkBook(MultipartFilefile){获得文件名StringfileNamefile。getOriginalFilename();创建Workbook工作薄对象,表示整个excelWorkbookworkbooknull;try{获取excel文件的io流InputStreamisfile。getInputStream();根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象if(fileName。endsWith(xls)){2003workbooknewHSSFWorkbook(is);}elseif(fileName。endsWith(xlsx)){2007及2007以上workbooknewXSSFWorkbook(is);}}catch(IOExceptione){log。error(e。getMessage());}returnworkbook;}publicstaticStringgetCellValue(Cellcell){StringcellValue;if(cellnull){returncellValue;}判断数据的类型switch(cell。getCellType()){caseCell。CELLTYPENUMERIC:数字cellValuestringDateProcess(cell);break;caseCell。CELLTYPESTRING:字符串cellValueString。valueOf(cell。getStringCellValue());break;caseCell。CELLTYPEBOOLEAN:BooleancellValueString。valueOf(cell。getBooleanCellValue());break;caseCell。CELLTYPEFORMULA:公式cellValueString。valueOf(cell。getCellFormula());break;caseCell。CELLTYPEBLANK:空值cellValue;break;caseCell。CELLTYPEERROR:故障cellValue非法字符;break;default:cellValue未知类型;break;}returncellValue;}publicstaticStringstringDateProcess(Cellcell){StringresultnewString();if(HSSFDateUtil。isCellDateFormatted(cell)){处理日期格式、时间格式SimpleDateFormatsdfnull;if(cell。getCellStyle()。getDataFormat()HSSFDataFormat。getBuiltinFormat(h:mm)){sdfnewSimpleDateFormat(HH:mm);}else{日期sdfnewSimpleDateFormat(yyyyMMddhh:mm:ss);}Datedatecell。getDateCellValue();resultsdf。format(date);}elseif(cell。getCellStyle()。getDataFormat()58){处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)SimpleDateFormatsdfnewSimpleDateFormat(yyyyMMddhh:mm:ss);doublevaluecell。getNumericCellValue();Datedateorg。apache。poi。ss。usermodel。DateUtil。getJavaDate(value);resultsdf。format(date);}else{doublevaluecell。getNumericCellValue();CellStylestylecell。getCellStyle();DecimalFormatformatnewDecimalFormat();Stringtempstyle。getDataFormatString();单元格设置成常规if(temp。equals(General)){format。applyPattern();}resultformat。format(value);}returnresult;}}
  三、解析Excel文件(入参是MultipartFile)
  MultipartFile是一种可以接收使用多种请求方式来进行上传文件的代表形式。
  MultipartFile是一个接口,继承自InputStreamSource,封装了getInputStream方法,因此MultipartFile文件可以转换为输入流。Author程序幻境Date20221119Version1。0importjava。io。FileInputStream;importjava。io。IOException;importjava。io。InputStream;importjava。text。DecimalFormat;importjava。text。SimpleDateFormat;importjava。util。ArrayList;importjava。util。Date;importjava。util。List;importorg。apache。log4j。Logger;importorg。apache。poi。hssf。usermodel。HSSFDataFormat;importorg。apache。poi。hssf。usermodel。HSSFDateUtil;importorg。apache。poi。hssf。usermodel。HSSFWorkbook;importorg。apache。poi。ss。usermodel。;importorg。apache。poi。xssf。usermodel。XSSFWorkbook;importorg。springframework。web。multipart。MultipartFile;解析excel上传数据publicclassExcelUtil{privatestaticfinalLoggerlogLogger。getLogger(ExcelUtil。class);publicstaticvoidmain(String〔〕args){try{getExcelData(C:UsersZXCDesktop1。xlsx);}catch(IOExceptione){e。printStackTrace();}}解析excelparamfilereturnthrowsIOExceptionpublicstaticListString〔〕getExcelData(StringfilePath)throwsIOException{通过输入流,读取excel文件FileInputStreaminputnewFileInputStream(filePath);将输入流传入WorkbookWorkbookworkbooknewXSSFWorkbook(input);创建返回对象,把每行中的值作为一个数组,所有行作为一个集合返回ListString〔〕listnewArrayListString〔〕();if(workbook!null){for(intsheetNum0;sheetNumworkbook。getNumberOfSheets();sheetNum){获得当前sheet工作表Sheetsheetworkbook。getSheetAt(sheetNum);if(sheetnull){continue;}获得当前sheet的开始行intfirstRowNumsheet。getFirstRowNum();获得当前sheet的结束行intlastRowNumsheet。getLastRowNum();循环除了所有行,如果要循环除第一行以外的就firstRowNum1for(introwNumfirstRowNum;rowNumlastRowNum;rowNum){获得当前行Rowrowsheet。getRow(rowNum);if(rownull){continue;}获得当前行的开始列intfirstCellNumrow。getFirstCellNum();获得当前行的列数intlastCellNumrow。getLastCellNum();String〔〕cellsnewString〔row。getLastCellNum()〕;循环当前行for(intcellNumfirstCellNum;cellNumlastCellNum;cellNum){Cellcellrow。getCell(cellNum);cells〔cellNum〕getCellValue(cell);}list。add(cells);}}}returnlist;}检查文件paramfilethrowsIOExceptionpublicstaticvoidcheckFile(MultipartFilefile)throwsIOException{判断文件是否存在if(nullfile){log。error(文件不存在!);}获得文件名StringfileNamefile。getOriginalFilename();判断文件是否是excel文件if(!fileName。endsWith(xls)!fileName。endsWith(xlsx)){log。error(fileName不是excel文件);}}publicstaticWorkbookgetWorkBook(MultipartFilefile){获得文件名StringfileNamefile。getOriginalFilename();创建Workbook工作薄对象,表示整个excelWorkbookworkbooknull;try{获取excel文件的io流InputStreamisfile。getInputStream();根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象if(fileName。endsWith(xls)){2003workbooknewHSSFWorkbook(is);}elseif(fileName。endsWith(xlsx)){2007及2007以上workbooknewXSSFWorkbook(is);}}catch(IOExceptione){log。error(e。getMessage());}returnworkbook;}publicstaticStringgetCellValue(Cellcell){StringcellValue;if(cellnull){returncellValue;}判断数据的类型switch(cell。getCellType()){caseCell。CELLTYPENUMERIC:数字cellValuestringDateProcess(cell);break;caseCell。CELLTYPESTRING:字符串cellValueString。valueOf(cell。getStringCellValue());break;caseCell。CELLTYPEBOOLEAN:BooleancellValueString。valueOf(cell。getBooleanCellValue());break;caseCell。CELLTYPEFORMULA:公式cellValueString。valueOf(cell。getCellFormula());break;caseCell。CELLTYPEBLANK:空值cellValue;break;caseCell。CELLTYPEERROR:故障cellValue非法字符;break;default:cellValue未知类型;break;}returncellValue;}publicstaticStringstringDateProcess(Cellcell){StringresultnewString();if(HSSFDateUtil。isCellDateFormatted(cell)){处理日期格式、时间格式SimpleDateFormatsdfnull;if(cell。getCellStyle()。getDataFormat()HSSFDataFormat。getBuiltinFormat(h:mm)){sdfnewSimpleDateFormat(HH:mm);}else{日期sdfnewSimpleDateFormat(yyyyMMddhh:mm:ss);}Datedatecell。getDateCellValue();resultsdf。format(date);}elseif(cell。getCellStyle()。getDataFormat()58){处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)SimpleDateFormatsdfnewSimpleDateFormat(yyyyMMddhh:mm:ss);doublevaluecell。getNumericCellValue();Datedateorg。apache。poi。ss。usermodel。DateUtil。getJavaDate(value);resultsdf。format(date);}else{doublevaluecell。getNumericCellValue();CellStylestylecell。getCellStyle();DecimalFormatformatnewDecimalFormat();Stringtempstyle。getDataFormatString();单元格设置成常规if(temp。equals(General)){format。applyPattern();}resultformat。format(value);}returnresult;}}
  本文仅供个人记录,大家可以借鉴,每行代码都是自己手打,亲测可直接粘贴执行,如有任何问题可在评论区提问,欢迎大家交流。
  编辑人:程序幻境
  码字不易,不喜勿踩
  写代码使我快乐

图月季烂根的症状介绍想要解决这个难题就这么做月季花原产我国湖北、四川、云南等地。现国内外普遍栽培观赏,是花友们比较喜欢的一种花卉植物。它们适应性强,喜阳光,喜温暖,对土壤要求不高,在大部分的地区都能生存。月季这种花……2022GSPL环球超模职业联赛洞悉高雅时尚魅力2022GSPL环球超模职业联赛即将火热来袭,这场位于杭州艺尚国际秀场的盛会将于12月隆重呈现,本次超模联赛由环球超模职业联赛组委会及上海亚鼎文化传媒有限公司联合举办,致力于举……图夜来香叶子发黄了怎么办正确应对方式在这里夜来香属于柔弱藤状灌木,它的小叶呈黄绿色,老枝是灰褐色。花朵会有阵阵的芳香,在夜间的时候香味比白天的还要浓好多,夜来香对于人体的健康是有影响的呢。夜来香的花期是在五月份至……图家养杜宾犬打架很苦恼这样训练就能解决杜宾犬是根据繁育者的名字命名的,它诞生于德国,已经拥有很久远的发展历史。现如今的杜宾犬不仅是人们钟爱的宠物狗,还是人们生活以及军警界的好帮手。说起杜宾犬,可能很多人都会想……替自己孩子出气,也不能拿别人的孩子撒气,替别人教育孩子不可取南京的鲁医生现在后悔也来不及了。因为要给自己的孩子讨个说法,南京的鲁医生入室打了邻居孩子一巴掌,邻居家孩子的爷爷举起凳子要给孙子报仇,不料被鲁医生推倒在地受了伤。现……图俄罗斯蓝猫怎么样性格温和是很多人喜欢的类型俄罗斯蓝猫是非常受欢迎的一种猫,不同于英国蓝猫的敦厚可爱,俄罗斯蓝猫以它的端庄和优雅被大家喜爱。我们今天就为大家好好介绍一下俄罗斯蓝猫的知识吧。一、基本信息。它们体……图郁金香种球多久发芽掌握正确方法是关键平时生活中人们都喜欢在家中养殖植物打发闲暇时间,其中郁金香由于它具有观赏价值所以备受人们的青睐。但是大家是否了解过郁金香种球多久才可以发芽呢?平时植物的种类多得数不清,其……图拉布拉多犬怎样让它早上不叫这样调教狗狗很安静在生活中,拉布拉多其实是不爱吠叫的。但受到各种原因的影响,乖巧的拉拉也会偶尔的吠叫。当它感到害怕、孤独、恐惧、不安的时候,它就会通过吠叫的方式来表达自己的情绪。说起拉布拉……阿里巴巴发布2022天猫双11社会价值报告超1633万消费者中证网讯(记者杨洁)11月11日,在第14个天猫双11当天,阿里巴巴集团发布《2022天猫双11社会价值报告》(简称《报告》)。《报告》提出,经过14年发展,天猫双11在促流通……图柯基犬掉毛怎么办掌握这些方法没烦恼柯基犬是小型犬,性格非常稳健,完全没有一般小型犬的神经质,是非常适合小孩的守护犬。它们的胆子很大,也相当机警,能高度警惕地守护家园,是较受欢迎的小型护卫犬之一。随着网络的……消息称台积电拿下特斯拉辅助驾驶FSD芯片大单,以45nm生产IT之家11月21日消息,据台湾经济日报,台积电取代三星,拿下了特斯拉辅助驾驶(FSD)芯片大单,将以45纳米进行生产。台积电对此表示不予评论。据称,特斯拉明年有望成为台……图纽芬兰犬粘人程度超忠实的性格让你爱上它纽芬兰犬是一种大型犬,因为聪明且脾气很好,所以受到了很多家庭的欢迎。它们天性善良且敦厚,是忠实的伴侣犬。纽芬兰犬粘人吗?它们的性格特征是怎么样的呢?一、粘人程度。纽……
北京国安海口热身赛3比0完胜长春亚泰,斯坦利满意角球战术见成25日下午,正在海口观澜湖基地进行冬训的北京国安队迎来了一场内部教学赛,对手是中超球队长春亚泰。经过4节80分钟的较量,国安最终3比0拿下全华班的对手,为球队建功的分别是朴成、……新日本心体验春夏秋冬的无限精彩期待与你久别相逢冬末春初,万物复苏,新一年的旅行计划做好了吗?富士山下的樱花北海道的浪漫雪景大阪的美味料理。。。日本,好久不见!和煦的春日又开始温暖的时候,……食品饮料行业2023年度策略报告重估新食饮时代(报告出品方作者:信达证券,马铮)1。白酒板块:优选周期下的熨滑能力1。1行业整体仍处在调整期中白酒的自身属性决定其具有周期性。对于很多消费品来说,都存在一个经营周……曝郝伟或下课,恩里克有望执教泰山,泰山后续引援曝光最近几天,有网络媒体爆料,山东泰山队的主帅郝伟即将下课,前巴塞罗那的主帅恩里克很有可能成为泰山的新任主教练。这一消息迅速引起了球迷的热议,难道泰山在丢掉联赛冠军之后,真的要有大……朋友在澳门街头吸烟被罚款,公众场所禁烟法度必须要严给大家讲一件亲身经历的事情,2015年几个朋友相约一起去港澳旅游,岀发之前做了攻略,其中一条就是香港和澳门对于公共场所吸烟处罚非常严格,因此提醒朋友中两位烟瘾较大者,一定要注意……中国三箭齐发,美国始料未及,外媒中国亮出了真正的实力从芯片四方联盟(Chip4)再到美日荷联盟,美国对华芯片出口限制一再升级。挟技术以令诸侯。冷战时铁幕分隔东西方,如今又在半导体领域降下硅幕。为了应对美国人的喧闹,据……这些器官一旦受伤往往不可逆!一起看看保养指南吧人体就像一台精密机器,各个器官维持着机器的日常运作,随着年龄增加、不健康的生活方式,有些脏器会产生不可逆的损伤,引发一系列健康问题,一起来看肾脏早期的肾脏疾病可能没……27岁中国女篮队长杨力维能做的就是无所畏惧澎湃新闻首席记者马作宇这个时代最受欢迎的球星们需要两种特质或者在场上拥有必杀技,且球风凌厉,霸气十足;或者在场下平易近人,随时随地可以和周围的人打成一片。27岁的中……这项黑科技能够再生器官维克森林大学的科学家们正在3D打印组织和微器官,模仿我们自身天然组织的一些功能特性。图片来源:COURTESYOFWFIRM2022年,在美国得克萨斯州的圣安东尼奥,阿图……衡山明前茶飘香茶农采摘忙村民正在衡山县开云镇双全新村衡山皇茶文化园采摘茶叶。文峰摄红网时刻衡阳3月31日讯(通讯员廖晶唐有权记者宋美君)春回大地,万木吐翠,又到一年采茶季。3月30日,衡山县开云……小鞠舞台美图曝光穿短裙尽情唱跳活力满满!不愧是四千年一遇美女1月12日,著名女星鞠婧祎的一组美图曝光,魅力十足。图中,小鞠穿着闪亮的短裙。1月12日,鞠婧祎的一组舞台美图曝光,她身穿闪亮短裙在舞台上释放魅力,尽情唱跳活力满满。……流感高发季,儿童养肺居家推拿手法学起来丨杏林之声春季是儿童流感高发季,感冒后多见咳嗽、咳痰、胃口欠佳等症状,可以通过小儿推拿来改善。推拿是一种绿色疗法,用特定的手法在特定部位及穴位上操作,从而达到防病治病的效果。推荐一……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网