中企动力 > 商学院 > java从excel读取数据
  • ?

    数据小白,怎样从EXCEL快速入门系列(五)

    伊斯奈斯

    展开

    小伙伴们,二宝又回来啦,抱歉最近是在太忙早长的太深啦~感谢一直都还在的朋友们,我会继续努力保持持续高质量的产出哒~

    最近在写这个系列的最大感受就是“助人者,自助之”,我在跟大家分享自己EXCEL的经验同时,发现其实也是给自己一个复习的过程,能够更加巩固自己所学的知识,大家如果有时间的话也可以一边学习以分享经验,共同进步嘛!

    前面几篇文章已经跟大家讲了一些常用的EXCEL函数技巧和数据透视表以及数据透视图的做法,那么这篇文章里会对之前讲过的内容再进行补充,并且还会再给大家分享一些不是很常用却也很重要的EXCEL函数技巧哦!

    1.切片器的应用

    在EXCEL里面使用切片器应该是要在Microsoft2010以及之后的版本才会有这个功能,当然,目前大家使用的Microsoft应该都是具有切片器这个功能的,那么切片器是做什么用的呢?其实,也可以理解为切片器和筛选具有大同小异的功能,但是相比较手动去筛选切片器的使用起来会更加直观、方便,是给老板用的不二选择。那么,下面来演示下要怎么使用切片器:

    Step1:我们也都知道切片器是要在数据透视表的基础上去使用的,所以这里我们如果想要使用切片器,前提就是已经做好了数据透视表,这里就不再复习了,小伙伴们可以自行尝试先去做数据透视表,也就当作是复习之前所学的内容了。这里,选中我们所做的数据透视表,并点击数据透视表工具(PIVOTTABLE TOOLS )下的插入切片器(insert slicer),会跳出如下图所示的提示框:

    STEP1

    STEP2:根据上图跳出的insert slicer 提示框,我们可以看到这里show出了数据透视表中所有列的选项,那么具体要选择哪些作为我们要筛选的对象,这就根据各自的需求不同去选择了。在这里,我选择在IOT 和MACHINE_TYPE前面打勾,表示我要根据这2个条件去选择性看我们的数据,选择好之后点击OK出现的结果如下:

    STEP2

    如上图,就是我们加了切片器出来的成果图啦,这样子我们就可以根据你选择的IOT去看不同地区的数据啦,同样,如果你是已经有数据透视图的话,也可以在这个基础上去做,这样就很容易去改变数据方便你直接查看趋势图了,比手动筛选要快捷很多哦!

    2.批量生成数据透视表

    看武侠小说的小伙伴都知道,“天下武功,唯快不破”,所以当我们已经掌握了技术之后,再想比一般人胜出的话就是怎么样做到快了,这里就跟小伙伴们聊下怎么样快速批量生成表.

    STEP1:如图,要求快速生成以各个名称命名的数据透视表,

    同样,我们首先选中这个表格做数据透视表,并将名称这列拖拽到筛选(filters)这个区域下面,如 下图所示:

    STEP2:选中上图的数据透视表,再去点击左上角的数据透视表里面的“显示报表筛选页”,跳出如下图所示的提示框

    STEP3:点击OK之后就可以出现我们需要的结果了,每个名称下的表格都会出现,如下图所示:

    STEP3

    好了,今天的份额就到这里,大家先去试试这两个技巧吧,记得,唯快不破哦!!!

  • ?

    Excel表格函数--调取数据用法

    心淡

    展开

    Vlookup数据调取公式应用

    制作表格过程中往往遇到之前数据引用问题,所以我们在表格中如果去查找以往的数据再进行手录的话还是需要一定的操作时间的,万一遇到需要采用的数据量较大的情况下我们按照一个一个的抄录方式会浪费很大的工作时间,所以我们应该保持对Excel表格中的函数应用的学习热情。

    遇到以上数据需要收录的情况下,我们往往需要利用一部分公式进行批量操作,如下图所示的Vlookup函数的使用操作图

    图1:Vlookup函数应用演示

    上图演示的Vlookup函数使用过程中应当注意几点:

    如果数据中有重复的内容或者重复的name数据,则Vlookup函数只读取(从上至下)第一个相对应的数据,而且在应用过程中需要了解到的是Vlookup函数只针对单同一列不重复的数据抓取,如果重复的情况下我们该怎么使用Vlookup函数呢?如下图所示:

    图2:重复数据的调取公式应用

    如上图,我们使用的方式是在大量数据的情况下避免Vlookup函数无法获取第二或者更多的数据情况下,我们采用sumif函数进行区域同条件的数据进行求和,可详细查看表格中的函数应用方式,这是我平时应用比较多的结构函数。下面便给各位详细给出函数的公式内容:

    函数引用以及作用详解

    =vlookup(查找值,数据表,列序数,[匹配条件])公式中查找值表示的是:我们需要查找的这个数据,求的是这个数据对应的某项数据,数据表需要选择查找项与需要获取的某项数据在内的所有序列,然后列序数表示的则是从选中的序列中的第几列,填写数字;匹配条件分精准匹配和近似匹配两种,字面意思可以清楚明白选哪个。=countif(区域,条件)公式中需要填写的内容较少,仅为两项,这个函数主要是针对该选中区域中的复合条件项个数,非常有利于查找这个条件的权重或者这个条件项的出现次数。便于分析数据。使用方式如上图所示:区域选择含有你想要查找的条件内容列,条件则选择需要选择的单项数据。=sumif(区域,条件,[求和区域])区域与条件的选择与上一项的countif一样的选择方式,仅求和区域选择与Vlookup一样的需要获取的数据列,如上图所示。

    希望上述简要说明对各位有所帮助,我在应用函数过程中,有很多函数在实际的应用过程中相当具有帮助,可能也是工作原因导致,但是在平时我们如果学会使用这些函数,会给我们不时的工作内容带来更多的帮助,这也给了我一个很好的启发就是:能让工具快速解决的问题我们尽量不耗费大量时间处理。当然还有很多有关于数据调取的函数,由于本号作者时间有限,还请给位谅解,文章会在不定期做更新!

    图3:excel表格函数图4:更多函数应用

    图3则是告诉我们还有很多函数需要我们去了解,同样图4是其他函数的应用,图4的表格中所有数据均来自下方的其他工作表中的计算结果,所以表格给我一个很好的很便捷的工作内容便是,我只要提交初始数据,结果可以给我输出我需要经过长时间计算的其他结果,这样在短暂的时间准备后能够帮我后期节约大量的工作时间。希望对各位有所帮助

    主旨一直不变,当然希望给我有空能够在文章下面流量进行互动,相互学习,共同成长

    本号宗旨:不断学习,能力晋升

  • ?

    利用PHPExcel读取Excel的数据和导出数据到Excel

    光荣

    展开

    PHPExcel是一个PHP类库,用来帮助我们简单、高效实现从Excel读取Excel的数据和导出数据到Excel。也是我们日常开发中,经常会遇到的使用场景。比如有个客户信息表,要批量导出发给同事,我们就可以用PHPExcel来快速实现。同样,如果我们要利用短信群发接口去群发信息,PHPExcel可以快速导入客户信息,避免人工录入信息的麻烦。

    PHPExcel使用教程:

    首先下载PHPExcel

    到https://github/PHPOffice/PHPExcel下载PHPExcel,如果不懂得使用git,可以到这https://codeload.github/PHPOffice/PHPExcel/zip/1.8下载压缩包,懂得的自行用git下载。

    下载好文件,解压可以得到如下文件:

    PHPExcel

    好了,现在我们就可以用PHPExcel愉快的读取和制作表格了!

    PHPExcelDEMO1:利用PHPExcel读取excel信息:

    我们在根目录创建一个名为read.php的文件来读取文档,创建一个test.xlsx的文件,里面写的信息如下:

    然后在read.php写以下代码:

    $inputFileName=‘./test.xls’;date_default_timezone_set(‘PRC’);//读取excel文件try{$inputFileType=PHPExcel_IOFactory::identify($inputFileName);$objReader=PHPExcel_IOFactory::createReader($inputFileType);$objPHPExcel=$objReader->load($inputFileName);}catch(Exception$e){die(‘加载文件发生错误:”‘.pathinfo($inputFileName,PATHINFO_BASENAME).'”:‘.$e->getMessage);//确定要读取的sheet,什么是sheet,看excel的右下角,真的不懂去百度吧$sheet=$objPHPExcel->getSheet(0);$highestRow=$sheet->getHighestRow;$highestColumn=$sheet->getHighestColumn;//获取一行的数据for($row=1;$row//Readarowofdataintoanarray$rowData=$sheet->rangeToArray(‘A’.$row.‘:’.$highestColumn.$row,NULL,TRUE,FALSE);//这里得到的rowData都是一行的数据,得到数据后自行处理,我们这里只打出来看看效果var_dump($rowData);echo“”;

    得到的数据:

    PHPexcel读取文件

    PHPExcelDEMO2:利用PHPExcel导出信息到excel:

    getProperties->setCreator("作者简庆旺")->setLastModifiedBy("最后更改者")->setTitle("文档标题")->setSubject("文档主题")->setDescription("文档的描述信息")->setKeywords("设置文档关键词")->setCategory("设置文档的分类");//根据excel坐标,添加数据$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1','你好')->setCellValue('B2','世界')->setCellValue('C1','你好')->setCellValue('D2','世界');//混杂各种符号,编码为UTF-8$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A4','Miscellaneousglyphs')->setCellValue('A5','éàèùêüü');$objPHPExcel->getActiveSheet->setCellValue('A8',"你好世界");$objPHPExcel->getActiveSheet->getRowDimension(8)->setRowHeight(-1);$objPHPExcel->getActiveSheet->getStyle('A8')->getAlignment->setWrapText(true);$value="-ValueA\n-ValueB\n-ValueC";$objPHPExcel->getActiveSheet->setCellValue('A10',$value);$objPHPExcel->getActiveSheet->getRowDimension(10)->setRowHeight(-1);$objPHPExcel->getActiveSheet->getStyle('A10')->getAlignment->setWrapText(true);$objPHPExcel->getActiveSheet->getStyle('A10')->setQuotePrefix(true);//重命名工作sheet$objPHPExcel->getActiveSheet->setTitle('第一个sheet');//设置第一个sheet为工作的sheet$objPHPExcel->setActiveSheetIndex(0);//保存Excel2007格式文件,保存路径为当前路径,名字为export.xlsx$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');$objWriter->save('export.xlsx');//保存Excel95格式文件,,保存路径为当前路径,$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');$objWriter->save('export.xls');

    好了,执行后我们可以得到export.xls和export.xlsx,如果使用过程遇到问题,可以联系本博客答疑。

  • ?

    浅谈我们在处理Excel的数据原则, 其实学习并没有你想的那么难

    风之刀

    展开

    Excel VBA处理重复数据的方法

    写在前面:

    Excel-VBA中处我们在处理Excel数据时,很多时候都可以分为三个步骤,读取整理数据、计算构造输出数据、输出结果。

    前者和后者会和Excel工作表交换处理数据,而中间的那个步骤则是在计算机内存中处理完成。

    我们知道原数据的结构决定了算法,也就是说第一步的读取整理数据决定了中间的计算和后面的输出的代码难易度。 所以我们在设计源数据的时候,应该注意源数据的结构是否合理.

    PS:这里我想说一下良好的编程习惯应该具有以下两点:

    a.遵循一定的变量命名规则。每个人都会有自己的命名习惯,但我想说的是让这种习惯遵循一定的规则,并尽可能的让它表达自身的含义。

    b.编写代码尽量写成一个模块,拎出来单独写个过程或是函数,其好处不仅仅是避免重复的代码,更大的好处是让你可以更为专注的解决一个相对独立的功能而不用去考虑全局的情况

    给这个过程起一个恰当的名字,同样会让你的代码更容易看懂,让你的代码会说话。

    今天和大家聊聊在Excel中如何使用VBA处理重复的数据的几种方法.

    Excel数据处理的过程中,我们常常会遇到某个表格存在重复数据。但是在大多时候,我们常常需要这些重复数据进行处理,得到我们所需要的数据。

    我们还来举一个例子,下图的数据我们其实非常常见,具体如下图所示

    那么我们的问题就来啦!请看题:

    假设我们要计算在职人员的所在的部门数量,我们应该怎么计算呢?同时还需要计算各部门的的人数分别是多少人?下面我们一步一步来实现。

    按照前言所说,我们分析以上的数据发现,这个源数据的结果单一,数据十分规范,有规律.

    我们处理数据首先就是读取数据,读取数据也就是我们常说的将Exce写入到计算机内存,在这个位置我们就想到的利用数组,将源数据区域写入内存.

    我们选择合适方法,进行数据处理.我们想到的是利用字典的关键词数据不重复性,完成数据处理.

    最后就是输出我们结果,也就是我们将处理过的数据,重新写入到表格中.

    至此我们处理数据的三部曲是不是得到完整的体现.我们现在来看看具体的操作过程.

    PS:我们主要利用字典,利用字典key不重复的特性,我们将省份存入字典中

    我们看看执行后的结果:

    黄色高亮区域即为我们利用字典的特性,将部门加入我们的字典当中,然后对重复的部门进行项的累加,从而达到计算重复的个数.当然我们也可以计算部门的工资的总额.

    附上代码:

    Sub test()

    字典前期绑定写法

    Dim d As New Dictionary

    Dim arr, i&

    清除H和I列的值

    [h:i].ClearContents

    将数据的单元格区域直接赋值给数组arr

    arr = Range("a2:f15")

    利用循环将字典特性,将部门的关键词写入到字典中,然后对他的项进行累加计算.

    For i = 1 To UBound(arr)

    这句话的意思就是,如果字典不存在这个部门的关键词,则将这个关键词写入到字典中.如果字典中已经存在这个关键词的话,则对他的项进行累加计算.也就是我们老生常谈的K=K+1.

    d(arr(i, 2)) = d(arr(i, 2)) + 1

    Next

    写入标题

    [h1].Resize(1, 2) = Array("部门", "人数")

    在H列赋值我们字典中的所有关键词

    [h2].Resize(d.Count) = Application.Transpose(d.Keys)

    在H列赋值我们字典中的所有项

    [i2].Resize(d.Count) = Application.Transpose(d.Items)

    End Sub

    写在结尾:

    看了上面,你是不是发现利用字典和数组处理数据的重复计算,是不是如此简单!

    其实我们学习Excel VBA没有那么难,他只能是算是解释型编程语言。所以如果你还是在是否学习犹豫不前,请不用担心,大步向前走吧!

    PS:学习的苦难需要我们主动面对,生活的苦难你躺着它自己主动就过来啦!与君共勉之!!!

    以上就是今天要和大家分享的技巧,希望对大家有所帮助,祝各位一天好心情!

    唯有不断学习,才能不被淘汰!

    Excel中每一个方法都有特定的用途,不是他们没有用处,只是你不了解或者暂时用不着,建议你收藏起来,万一哪天用着呢?

  • ?

    超实用:通过Excel进行数据采集

    月桂树

    展开

    前言

    IBM大中华区总经理胡世忠曾说:数据构成了智慧地球的三大元素——智能化、互联化和物联化,而这三大元素又改变了数据来源、传送方式和利用方式,带来“大数据”这场信息社会的变革。

    从上可见,时代的变革是源于对数据的利用,对企业而言,数据也同样是其发展、转型的命脉。在工作中,我的前辈不止一次地强调,数据是公司的资产,而且举足轻重。我们对待数据,一定要严谨,经得起考验,对自己的数据负责,这是一个数据人的基本要求。

    数据资源

    大数据时代,数据虽然很多,但是也不是随意得来的,需要利用各种渠道和方式获得。不管从哪个角度来说,数据可分为内部数据和外部数据。内部数据是企业在日积月累的经营中得来的,我们应该对这些数据挖掘、收集有价值的东西,形成企业的数据资产。内部数据重在后期的处理和分析上。

    下面先说外部数据的获取方式,以及通过Excel操作来获取外部数据。

    外部数据获取方式

    1、专业网站看数据(某一个行业、某一件产品)2、通过收费渠道买数据(第三方数据平台等)3、通过特殊形式引数据(网站爬虫,统计网站等)4、自身积累数据(时间久、跨度长)

    Excel获取外部数据

    作为一个数据分析师以及想更进一步成长为数据科学家,熟练操作基本的办公软件以及SQL查询是很重要的。请看下面通过Excel获取外部数据的步骤。

    第1步:打开“新建web查询”框。新建Excel工作簿,在打开的工作表中单击“数据”选项卡,然后在“获取外部数据”组中单击“自网站”按钮,如下图。

    第2步:输入网址并选择要导入的表格数据。在弹出的“新建web查询”对话框中的“地址”文本框中复制粘贴上述网页的网址,然后单击“转到”,找到网站中的表格数据后单击表格左上角的箭头→,图标变成选中状态的复选框√。如下图。最后单击下方的“导入”按钮。

    第3步:选择数据的放置区域。点击导入后,Excel会出现“导入数据”对话框,如下图,选中你想放置的单元格,单击“确定”开始导入。

    第4步:美化导入的数据。由于导入的数据多且乱,要调整格式使数据规范,并启用冻结窗格功能方便浏览。如下图。

    好了,上面就是通过Excel操作来获取网站上的外部数据,很简单吧,但网站中的数据并非都是以表格的形式呈现,现在大部分是以json格式呈现,Excel不是万能的,而且现在很多网站需要付费才能导数据(上面说过数据就是企业的资产)。

    小结

    希望通过上面的操作能帮助大家。如果你有什么好的意见,建议,或者有不同的看法,我都希望你留言和我们进行交流、讨论。

    End.

  • ?

    PHPexcel读取excel数据

    Vaasa

    展开

    PHPExcel是一个PHP类库,用来帮助我们简单、高效实现从Excel读取Excel的数据和导出数据到Excel。也是我们日常开发中,经常会遇到的使用场景。PHPExcel可以快速导入客户信息,避免人工录入信息的麻烦。这里分享下读取数据的过程

    1. 下载PHPexcel, 我这里下载的PHPExcel-1.8

    2. 将下载的文件解压缩拷贝到项目目录中,如图:

    3. 准备好要读取的excel文件,如图:

    4. 加载PHPexcel文件并读取数据:

    5. 读取结果如下:

  • ?

    R学习笔记系列—R语言从文本和Excel文件中读取数据

    翠安

    展开

    1.4.1 从文本文件中导入数据

    可以使用 read.table() 函数从带分隔符的文本文件中导入数。调用格式为:

    这个函数看上去很复杂,但其实很多参数在使用时不用明确指出来,使用默认值可以满足绝大部分情况,因此实际使用还是比较简单的,下面我们简单介绍一下参数含义。

    file: 字符型,文件名称,要从中读取文件的完整路径。

    header: 逻辑型,指定是否在首行包含变量名,默认为 FALSE。

    sep: 字符型,分割字符,默认为"",代表空白字符,包括空格(一个或多个)、制表符、 换行符、回车

    dec: 字符型,指定小数点字符,默认为".",一般不用修改。

    numerals: 字符型,在数字转换会损失精度时的处理方法,allow.loss 表示允许精度损失;warn.loss 允许精度损失,但显示一条警告信息;no.loss 不允许精度损失,即转换为数字,而是转换为因子或者不转换,保留字符串形式。

    row.names 字符向量,为行指定名称。

    col.names 字符向量,为列指定名称,若列名在第一行定义好了,可不用。

    stringAsFactors: 逻辑型,是否将字符串自动编码为因子,默认为 TRUE。

    na.strings: 字符向量,定义代表缺失值的字符串,比如c("N",".")会将 "N" 和"." 两个字符读取为缺失值,默认为 "NA"。

    colClasses: 字符向量为列指定类型,比如c("numeric","character")指定第一列为数值型,第二列为字符型,若将某列指定为字符串,则不会将其自动编码为因子。

    nrows: 数值型,读取的最大行数,负数为不限制。

    skip: 数值型,读取前跳过的行数。

    check.names: 逻辑型,是否检查变量名在 R 中的有效性,默认为 TRUE。

    fill: 逻辑型,是否自动填充空白值,若各变量行数不一致,是否为空白列添加空白值。

    strip.white: 逻辑型,是否自动过滤掉字符型变量前后的空格。

    comment.char: 字符型,注释字符,以此字符开头的行将被忽略。

    blank.lines.skip 逻辑型,是否忽略空白行,默认为 TRUE。

    allowEscapes: 逻辑型,是否处理 C 语言风格的转意符。

    text: 字符型,直接指定要读取的字符串,此时 file 应该为空。

    encoding: 字符型,输入文本的编码,若出现乱码,请尝试更改此选项。

    fileEncoding: 字符型,文件编码,若出现乱码,请尝试更改此选项。

    假定我们有一个文本文件,students.txt,记录了6个学生的性别、身高和体重情况,其内容如下:

    那么我们可以用以下方式读取:

    read.table() 是读取按行列组织的数据的基础方式,其它同类函数,比如 read.csv() 等其实是用特定的选项调用了 read.table() 函数。在 read.table() 函数时,应尽量注意以下几点。

    1.建议明确地在首行定义变量名,并加上参数 header = TRUE。

    2.默认的分隔符为"",可以用空格、制表符、换行符等空白字符分割内容,若非空白分割,则需明确指出。

    3.字符型变量会被自动转换为因子型,在读大型文件时,将 stringsAsFactors 设置为 False,能加快读取速度。

    4.默认情况下,read.table 用 # 作为注释标识字符。如果碰到该字符(除了在被引用的字符串内),该行中随后的内容将会被忽略。

    5.read.table()会尽量为每个变量选择合适的数据类型,若你想明确指定请用colClasses,或者生成后根据需要修改。

    6.若读中文时出现乱码,请尝试改变编码

    1.4.2 从 Excel 表格中读取

    从 Excel 里读取数据最简单的办法就是将 Excel 表格存储为以逗号分割的 csv 文件,然后用 read.csv() 函数读取。read.csv() 函数其实就是 read.table() 的定制版,其用法与 read.table() 基本一致。

    若要直接读取 Excel 文件,则需安装专门的包,本书推荐 readxl 包。

    readxl 中有若干读取 Excel 数据的函数,最常用的是 read.excel()。调用格式为:

    path: 字符型,文件路径sheet: 字符型或数值型。若为字符型,则指定 Sheet 名;若为数值,则指定 Sheet 的位置;若不指定,默认第一个Sheetrange: 字符型或数值型,读取的单元格范围,比较复杂,请查看文档col_names: 逻辑型或字符型向量;若为逻辑型,则指定是否将第一行作为变量名;若为字符向量,则直接定义各列名col_types: 字符型向量,定义各列数据类型,比如c("numeric","character");若不指定,则自动匹配na: 字符型向量,指定读取为缺失值的字符串 ,默认情况下,会将空单元格读取为缺失值trim_ws: 逻辑型,是否自动过滤掉字符型变量前后的空白(空格、制表符、换行符skip: 数值型,读取前跳过的行数,因为空白的行会自动跳过,所以这是最小的被跳过的行数n_max: 数值型,最大读取行数guess_max: 数值型,猜测列类别时,检测的最大行数

    假如,在 d 盘有一名为 students.xls 的 Excel 文件,你可以通过如下方式读取。

    喜欢闲适安静的生活,懂一点计算机编程,懂一点统计学和数据分析。(爱编程爱统计)

  • ?

    集算器协助java处理多样性数据源之Excel

    怜梦

    展开

    Java程序员读取和计算excel的程序一般要使用poi或其它开源包,这些开源包对编程的支持较为底层,整体学习成本和操作复杂度都很高。使用集算器辅助java处理excel文件就可以避免这些事务。

    下面通过一个例子看一下具体作法:从Excel文件orders.xls中读取订单信息,找出2010年1月1日(含)之后,SELLERID等于18的订单。orders.xls的内容如下:

    实现的思路是:用Java程序调用集算器脚本,读取和计算excel文件中的数据,之后将结果以ResultSet的方式返回给Java程序。由于集算器支持动态表达式解析和求值,使得Java程序可以像使用sql那样,灵活的处理数据。

    首先,程序员可以将条件“2010年1月1日(含)之后,并且SELLERID等于18的订单。”作为参数where传递给esProc程序,如下图:

    where是个字串,其值为:ORDERDATE>=date(2010,1,1) && SELLERID==18。

    esProc的程序代码如下:

    A2:按照条件过滤。这里使用宏来实现动态解析表达式,其中的where就是传入参数。集算器将先计算${…}里的表达式,将计算结果作为宏字符串值替换${…}之后解释执行。这个例子中最终执行的是:=A1.select(ORDERDATE>=date(2010,1,1) && SELLERID==18)。A1:定义一个file对象,导入excel数据。esProc的集成开发环境可以直观的显示出导入的数据,如上图右边部分。importxls函数也可以读写xlsx文件,它会根据文件扩展名自动判断excel的版本。

    A3:将符合条件的结果集返回给java。如果需要将结果写入另外一个excel文件,只要将A3单元格改为:=file("D:/file/orders_result.xls").exportxls@t(A2)。

    过滤条件发生变化时不用改变程序,只需改变where参数即可。例如,条件变为:2010年1月1日(含)之后,并且SELLERID等于18的订单,或者CLIENT等于PWQ的订单。Where的参数值可以写为:CLIENT=="PWQ"||ORDERDATE>=date(2010,1,1) && SELLERID==18。执行之后,A2中的结果集如下图:

    在Java程序中使用esProc JDBC调用这段程序获得结果的代码如下:(将上述esProc程序保存为test.dfx):

    //建立esProc jdbc连接

    Class.forName("com.esproc.jdbc.InternalDriver");

    con= DriverManager.getConnection("jdbc:esproc:local://");

    //调用esProc程序(存储过程),其中test是dfx的文件名

    com.esproc.jdbc.InternalCStatementst =(com.esproc.jdbc.InternalCStatement)con.prepareCall("call test(?)");

    //设置参数

    st.setObject(1,"ORDERDATE>=date(2010,1,1) && SELLERID==18 || CLIENT==\"PWQ\"");//执行esProc存储过程

    ResultSet set =st.executeQuery();

    对于代码较简单的脚本,还可以把代码直接写在调用集算器JDBC的Java程序中,而不必专门编写脚本文件(test.dfx):

    ResultSet set = st.executeQuery(

    "=file(\"D:/file/orders.xls\").importxls@t().select(ORDERDATE>=date(2010,1,1) && SELLERID==18 || CLIENT==\"PWQ\")");

    这段Java代码直接调用了集算器的一句脚本:从Excel文件中取得数据,并按照指定的条件过滤。

  • ?

    一行代码完成Java的Excel读写

    维尼熊

    展开

    前段时间在 github 上发现了阿里的 EasyExcel 项目,觉得挺不错的,就写了一个简单的方法封装,做到只用一个函数就完成 Excel 的导入或者导。刚好前段时间更新修复了一些 BUG,就把我的这个封装分享出来,请多多指教。

    附上源码:

    https://github/HowieYuan/easyexcel-method-encapsulation

    EasyExcel

    EasyExcel 的 github 地址:

    https://github/alibaba/easyexcel

    EasyExcel 的官方介绍:

    可以看到 EasyExcel 最大的特点就是使用内存少,当然现在它的功能还比较简单,能够面对的复杂场景比较少,不过基本的读写完全可以满足。

    一. 依赖

    首先是添加该项目的依赖,目前的版本是 1.0.2。

    com.alibabaeasyexcel1.0.2

    二. 需要的类

    1. ExcelUtil

    工具类,可以直接调用该工具类的方法完成 Excel 的读或者写。

    2. ExcelListener

    监听类,可以根据需要与自己的情况,自定义处理获取到的数据,我这里只是简单地把数据添加到一个 List 里面。

    publicclassExcelListenerextendsAnalysisEventListener {//自定义用于暂时存储data。//可以通过实例获取该值private List datas = new ArrayList<>();/** * 通过 AnalysisContext 对象还可以获取当前 sheet,当前行等数据 */ @Overridepublicvoidinvoke(Object object, AnalysisContext context) {//数据存储到list,供批量处理,或后续自己业务逻辑处理。 datas.add(object);//根据自己业务做处理 doSomething(object); }privatevoiddoSomething(Object object) { } @OverridepublicvoiddoAfterAllAnalysed(AnalysisContext context) { }public List getDatas() {return datas; }publicvoidsetDatas(List datas) {this.datas = datas; }}

    3. ExcelWriterFactroy

    用于导出多个 sheet 的 Excel,通过多次调用 write 方法写入多个 sheet。

    4. ExcelException

    捕获相关 Exception。

    三. 读取 Excel

    读取 Excel 时只需要调用 ExcelUtil.readExcel() 方法:

    @RequestMapping(value = "readExcel", method = RequestMethod.POST)public Object readExcel(MultipartFile excel) {return ExcelUtil.readExcel(excel, new ImportInfo());}

    其中 excel 是 MultipartFile 类型的文件对象,而 new ImportInfo() 是该 Excel 所映射的实体对象,需要继承 BaseRowModel 类,如:

    publicclass ImportInfo extends BaseRowModel {@ExcelProperty(index = 0)privateString name;@ExcelProperty(index = 1)privateString age;@ExcelProperty(index = 2)privateString email;publicString getName() {return name; }publicvoid setName(String name) {this.name = name; }publicString getAge() {return age; }publicvoid setAge(String age) {this.age = age; }publicString getEmail() {return email; }publicvoid setEmail(String email) {this.email = email; }}

    作为映射实体类,通过 @ExcelProperty 注解与 index 变量可以标注成员变量所映射的列,同时不可缺少 setter 方法。

    四. 导出 Excel

    1. 导出的 Excel 只拥有一个 sheet

    只需要调用 ExcelUtil.writeExcelWithSheets() 方法:

    @RequestMapping(value = "writeExcel", method = RequestMethod.GET)publicvoidwriteExcel(HttpServletResponse response) throws IOException { List list = getList(); String fileName = "一个 Excel 文件"; String sheetName = "第一个 sheet"; ExcelUtil.writeExcel(response, list, fileName, sheetName, new ExportInfo()); }

    fileName,sheetName 分别是导出文件的文件名和 sheet 名,new ExportInfo() 为导出数据的映射实体对象,list 为导出数据。

    对于映射实体类,可以根据需要通过 @ExcelProperty 注解自定义表头,当然同样需要继承 BaseRowModel 类,如:

    publicclass ExportInfo extends BaseRowModel {@ExcelProperty(value = "姓名" ,index = 0)privateString name;@ExcelProperty(value = "年龄",index = 1)privateString age;@ExcelProperty(value = "邮箱",index = 2)privateString email;@ExcelProperty(value = "地址",index = 3)privateString address;}

    value 为列名,index 为列的序号。

    如果需要复杂一点,可以实现如下图的效果:

    对应的实体类写法如下:

    publicclass MultiLineHeadExcelModel extends BaseRowModel {@ExcelProperty(value = {"表头1","表头1","表头31"},index = 0)privateString p1;@ExcelProperty(value = {"表头1","表头1","表头32"},index = 1)privateString p2;@ExcelProperty(value = {"表头3","表头3","表头3"},index = 2)private int p3;@ExcelProperty(value = {"表头4","表头4","表头4"},index = 3)private long p4;@ExcelProperty(value = {"表头5","表头51","表头52"},index = 4)privateString p5;@ExcelProperty(value = {"表头6","表头61","表头611"},index = 5)privateString p6;@ExcelProperty(value = {"表头6","表头61","表头612"},index = 6)privateString p7;@ExcelProperty(value = {"表头6","表头62","表头621"},index = 7)privateString p8;@ExcelProperty(value = {"表头6","表头62","表头622"},index = 8)privateString p9;}

    2. 导出的 Excel 拥有多个 sheet

    调用 ExcelUtil.writeExcelWithSheets() 处理第一个 sheet,之后调用 write() 方法依次处理之后的 sheet,最后使用 finish() 方法结束。

    publicvoidwriteExcelWithSheets(HttpServletResponse response) throws IOException { List list = getList(); String fileName = "一个 Excel 文件"; String sheetName1 = "第一个 sheet"; String sheetName2 = "第二个 sheet"; String sheetName3 = "第三个 sheet"; ExcelUtil.writeExcelWithSheets(response, list, fileName, sheetName1, new ExportInfo()) .write(list, sheetName2, new ExportInfo()) .write(list, sheetName3, new ExportInfo()) .finish();}

    write 方法的参数为当前 sheet 的 list 数据,当前 sheet 名以及对应的映射类。

    扩展阅读

    代码整洁之道|最佳实践小结

    Javascript 将 HTML 页面生成 PDF 并下载

    Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框

    来源:https://juejin.im/post/5ba320546fb9a05d0b14304b

    文章来源网络,版权归作者本人所有,如侵犯到原作者权益,请与我们联系删除

  • ?

    整理关于java读取excel内容的例子供大家参考

    咎无声

    展开

    1POI简介

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

    2POI下载

    poi下载地址:https://apache.org/dyn/closer.lua/poi/release/bin/poi-bin-3.17-20170915.tar.gz

    下载之后把压缩包解压,然后在项目里面引用解压文件夹里面的jar

    3新建java project,引入poi相关的jar

    4创建一个java类,编写代码

    package test;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.InputStream;

    import org.apache.poi.hssf.usermodel.HSSFRow;

    import org.apache.poi.hssf.usermodel.HSSFSheet;

    import org.apache.poi.hssf.usermodel.HSSFWorkbook;

    public class ReadExcel {

    /**

    * @param args

    */

    @SuppressWarnings("resource")

    public static void main(String[] args) {

    try {

    InputStream is = new FileInputStream(new File(

    "D:/360bizhi/0_TITLE_CODE.xls"));

    HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);

    // 获取每一个工作薄

    for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {

    HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);

    if (hssfSheet == null) {

    continue;

    }

    // 获取当前工作薄的每一行

    for (int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {

    HSSFRow hssfRow = hssfSheet.getRow(rowNum);

    if (hssfRow != null) {

    String title_id = String.valueOf(hssfRow.getCell(0));

    // 读取第一列数据

    String title_name = String.valueOf(hssfRow.getCell(1));

    // 读取第二列数据

    String title_name_en = String.valueOf(hssfRow

    .getCell(2));

    System.out.println("===============title_id:"

    + title_id + ",title_name:" + title_name

    + ",title_name_en:" + title_name_en);

    } catch (Exception e) {

    e.printStackTrace();

    5运行main进行测试,查看打印结果

    打印结果和xls里面的值是一样的,说明读取excel成功

    请大家多多关注我的头条号,谢谢大家

  • java从excel读取数据