精华内容
下载资源
问答
  • Layui数据表格引用

    千次阅读 2019-06-09 21:11:52
    对于一些编程插件的引用,相信大多数的编程人员都不会感觉到陌生,因为在对程序开发和项目开发的过程中往往都会需要引用到插件,那么... 对于引用插件,我们就引用layui插件里面的表格来进行说明: 第步:最主要...

        对于一些编程插件的引用,相信大多数的编程人员都不会感觉到陌生,因为在对程序开发和项目开发的过程中往往都会需要引用到插件,那么至于插件呢,也有很多种,比如:

    1. bootstrap
    2. jquery
    3. layui

    当然,插件是有很多种的,上面几种只是比较常见的插件而已,那么对于插件,我们如何引用呢?

        对于引用插件,我们就引用layui插件里面的表格来进行说明:

        第一步:最主要的第一步就是先从网上下载插件文件,

        第二步:插件的文件下载完成之后,我们就把它添加到我们的代码里面,如下图所示

    这插件一般有2种,第一种就是css插件,这css的插件,我们一般是引用在页面标题下面,至于另外一种,那就是js插件,这种的插件我们一般是引用在结束body的上面,当然,也可以引用在css插件的那个地方,它们引用的位置是不固定的,

        第三步:当插件引用完成之后,我们就开始搭建页面,等页面搭建完成,或者已经搭建好了的页面,我们找到需要添加引用layui插件数据表格的那个table标签的ID名称。

        第四部:找到需要添加引用layui插件数据表格的那个table标签的ID名称之后,我们就开始创建脚本,亦或者在页面上直接创建一个script的脚本标签,如下图

        第五步:当脚本创建完成之后,就可以在里面进行编写代码,调用插件的功能到程序或者项目上,比如我们现在是要进行layui插件里的数据表格的引用,首先我们得在刚刚创建的js脚本里面,先自定义一个layui的数据表格的名称,然后再定义一个layui的模块,以便全局都可以使用这个插件,如下图:

        第六步:按照layui文档里面的数据表格的使用方法,进行使用,首先进行layui数据表格的渲染,比如说,我们需要引用layui表格的那个table的那个元素的ID名称就是:FlightInformation,那么引用的它的代码如下:

    layui.use(['layer', 'table'], function () {

                    layer = layui.layer, layuiTable = layui.table;

                    TabAchievementInfor = layuiTable.render({

                        elem: "#FlightInformation",//table的ID HTML元素的ID

                        url: "/AirTicketMarket/OnLineBook/SeekFlight",

                        cols: [[

                            { title: '航班ID', field: 'FlightID', align: 'center' },

                            { title: '航空公司', field: 'Airline', align: 'center' },

                            { title: '航班', field: 'FlightNumber', align: 'center' },

                            { title: '机型', field: 'FlightType', align: 'center' },

                            { title: '起飞机场', field: 'DepartCity', align: 'center' },

                            { title: '降落机场', field: 'ArriveCity', align: 'center' },

                            { title: '起飞时间', field: 'DepartTime', align: 'center' },

                            { title: '降落时间', field: 'ArriveTime', align: 'center' },

                            { title: '是否经停', field: 'Transit', align: 'center' },

                            { title: '是否配餐', field: 'Catering', align: 'center' },

                            { title: '头等舱', field: 'Ffares', align: 'center' },

                            { title: '公务舱', field: 'Cfares', align: 'center' },

                            { title: '经济舱', field: 'Yfares', align: 'center' },

                            { title: '最低价', field: 'Vfares', align: 'center' },

                            { title: '更多', templet: setOperatea, align: 'center' },

                        ]],

                        page: {

                            limit: 5,//指定每页显示的条数

                            limits: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50],//每页条数的选择项

                        }//开启分页

                    });

                });

    上面整个代码都是进行表格的渲染,接下来解析一下上面的参数,首先第一第二行都是固定的,第三行也可以说是固定的,因为第三行的=符号前面的是表格的名称,也就是刚刚创建完脚本就定义好的表格名称TabAchievementInfor,第四行参数elem:后面填写的是需要存放表格的table标签的ID,也就是表格容器的ID,第五行url:后面填写的是表格数据的来源的路径,然后到第六行cols:后面的[[]]符号里面填写的是数据表格表头的样式,至于它的表头样式,是很丰富的,这里我就不做详细介绍,需要了解的可以去layui文档的数据表格的表头样式一览表里面进行了解,我现在只介绍常用的,也就是上面的几种,首先是title:‘’它是用于设置表头表头名称的,field:’’它是用于设定字段名称,对于表格来说,字段名的设定是非常有重要性的,因为它是表格数据列的唯一标识,至于后面的align:’’它是用于让每一个数据格子里面的文字进行居中显示的,接下来再到下面的page: {}它是用于让表格的数据进行分页的,limit:后面的数值代表的是每一个页显示的数据的条数,而limits:的后面是一个类似于下拉框的选项功能,可以对里面的数字进行选择,每一个数字代表的是每一个页显示的条数,这里是用于选择每页显示的条数。

        这样一来,整个的layui的数据表格就完成了引用。

    展开全文
  • (如果你觉得这里不好看,你可以直接往下拖到你进入正题部分) 在进入正题前,先来讲讲自己的经历...就连用什么关键词搜索都不知道,但是我知道,按照自己的想法来,开始我这这么搜索的:layui表格数据 java获得数据...

    (如果你觉得这里不好看,你可以直接往下拖到你进入正题部分)

    在进入正题前,先来讲讲自己的经历,用layui框架来建立后台用户数据管理时,获得数据出现了难题,以前开发接口用别人的,没想到现在自己也要开发接口,刚开始很难(个人觉得,可能自己太笨了),不知道从哪里下手,于是进入百度搜索,就连用什么关键词搜索都不知道,但是我知道,按照自己的想法来,开始我这这么搜索的:layui表格数据 java获得数据转换为json,  结果还是可以搜索出来的:

    但是,当点进去的时候,有好多都不满足自己,不是看不懂,就是嫌弃太长,(这可不是好习惯),然后根据一篇做了一下,捣鼓了一下,还是不行,没办法,又网上找资料,根据前面搜索,以及自己实践,知道该怎么搜索了,那就是自己搜索:java转换为json 效果但是也不是很好,但是根据自己的不断搜索,不断实践,知道了gson包,在线文档,     包下载地址,包下载地址进去自己搜索,

    如图就是它了,把它导入项目,然后我们继续,刚开始我是这样写的代码:(部分代码不全,不过没关系,我会详细讲解,这里只是展示)

    			JsonObject json = new JsonObject();
    			JsonArray jsonDateArray = new JsonArray();
    			JsonObject jsonDate2 = new JsonObject();
    		
    			json.addProperty("code", 0);
    			json.addProperty("msg", "");
    			json.addProperty("count", 1000);
    			while(rs.next()){
    				//得到结果集(rs)的结构信息,比如字段数、字段名等。
    				ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData();
    				//返回此 ResultSet对象中的列数。 
    				int icolnum = rsmd.getColumnCount();
    				for(int i= 1;i<= icolnum;i++){
    					 //转换为json 类型
    					if(rs.getString(i).equals("user")){
    						jsonDate2.addProperty(rsmd.getColumnName(i).toString(),"普通用户");
    					}else if(rs.getString(i).equals("admin_1")){
    						jsonDate2.addProperty(rsmd.getColumnName(i).toString(),"一级管理员");
    					}else if(rs.getString(i).equals("admin_2")){
    						jsonDate2.addProperty(rsmd.getColumnName(i).toString(),"二级管理员");
    					}else if(rs.getString(i).equals("SuperAdmin")){
    						jsonDate2.addProperty(rsmd.getColumnName(i).toString(),"超级管理员");
    					}else{
    						jsonDate2.addProperty(rsmd.getColumnName(i).toString(), rs.getString(i));
    					}
    					
    				}                                                                                                                                                                                                                                                                                                                                                
    				jsonDateArray.add(jsonDate2);
    				System.out.println(jsonDateArray);
    			}
    			
    			json.add("data", jsonDateArray);
    			return json;

    jsonDateArray.add(jsonDate2);  这里,就是把数据库里获得的数据保存到jsonDateArray里面去,但是重复了,也就是出现数据后面添加的吧前面的重复掉了。

    如上图,由于截图有限,看不出什么效果,简单的说就是数据到最后都变成一样的了。到现在还没找到解决的办法,现在猜想是因为用列表名作为key,可能因为这个重复(个人猜测,如果你知道,感谢你的留言,我也想知道答案),在解决这个问题中,可以说是花了一半天的时间,还是没有解决,没办法,改变思路:

    ————————————————————————————————————————————————————————

    你进入正题了

    ————————————————————————————————————————————————————————

    先看代码:*(一个方法完整方法,最后返回的就是json 格式了)

    /*
    	 * 查询用户表,用于后台管理用户
    	 */
    	public JsonObject select_(){
    		Connection con = null;   //定义引用
    		Statement stmt = null;
    		ResultSet rs = null;
    		try {
    			/*
    			 * 一、得到连接
    			 */
    			con = JdbcUtils_v10.getConnection();
    			/*
    			 * 二、准备模块
    			 */
    			String sql = "select id,login,email,jurisdiction,sex,signature,experience,count,joinTime from user";
    			PreparedStatement pstmt = con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
    			/*
    			 * 三、为pstmt中的问号赋值
    			 */
    			
    			/*
    			 * 四、执行
    			 */
    			rs = pstmt.executeQuery();
    			/*
    			 * 五、把rs 转换为User类型
    			 */
    			if(rs == null) {
    				return null;
    			}
    			Gson gson = new Gson();
    			HashMap<String, String> hm = new HashMap<String, String>();
    			JsonArray jsonarray = new JsonArray();
    			JsonObject json = new JsonObject();
    			String Shm = null;
    			json.addProperty("code", 0);
    			json.addProperty("msg", "");
    			json.addProperty("count", 1000);
    			while(rs.next()){
    				//得到结果集(rs)的结构信息,比如字段数、字段名等。
    				ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData();
    				//返回此 ResultSet对象中的列数。 
    				int icolnum = rsmd.getColumnCount();
    				for(int i= 1;i<= icolnum;i++){
    					 //转换为json 类型
    					if(rs.getString(i).equals("user")){
    						hm.put(rsmd.getColumnName(i).toString(),"普通用户");
    					}else if(rs.getString(i).equals("admin_1")){
    						hm.put(rsmd.getColumnName(i).toString(),"一级管理员");
    					}else if(rs.getString(i).equals("admin_2")){
    						hm.put(rsmd.getColumnName(i).toString(),"二级管理员");
    					}else if(rs.getString(i).equals("SuperAdmin")){
    						hm.put(rsmd.getColumnName(i).toString(),"超级管理员");
    					}else{
    						hm.put(rsmd.getColumnName(i).toString(), rs.getString(i));
    					}
    				}  
    				jsonarray.add(gson.toJsonTree(hm));
    				System.out.println(jsonarray);
    			}
    			
    			json.add("data", jsonarray);
    			System.out.println(json);
    			
    			return json;			
    		}catch (Exception e) {
    			throw new RuntimeException(e); 	
    		}finally{
    			//关闭
    			try {
    				if(rs != null)rs.close();
    				if(stmt != null)stmt.close();
    				if(con != null)con.close(); //必须要关
    			}catch(Exception e) {
    				throw new RuntimeException(e);
    			}			
    		}	
    	}

    以上代码讲解:(由于是完成测试可以了,直接就来写文档了)

    要注意几个地方,

    HashMap<String, String> hm = new HashMap<String, String>();

    这里就是吧获得到的数据通过HashMap保存起来,然后通过gson.toJsonTree(hm)转换为对象。然后添加在jsonarray里面。

    ------------------

    jsonarray.add(gson.toJsonTree(hm))

    gson.toJsonTree(HashMap<String,String>)     //返回类型是JsonElement   
    gson.toJson(HashMap<String,String>)  //返回类型是 String

    上面红色两句一定要明白,他们返回的类型,刚开始我使用的时toJson 返回的时字符串,返回添加在jsonarray里去,出现了转义字符,且还是字符串,如图:

    是不是感觉自己头大了,我也是,在这里就得说说看文档的重要性了,以及英语的重要性(显然,我两个都不满足,又浪费了很多时间,)如果你看文档了,就知道用哪个方法来解决了。

    就是它:gson.toJsonTree(HashMap<String,String>)     //返回类型是JsonElement   

    我们再来看看:

    是不是一切都解决了。简单吧。

    接口里是这样的:通过out.print(json)在浏览器输出,然后layui框架里用这个接口就可以了。(layui 文档讲的很详细,一定要仔细,不然很浪费时间,别走我走过的路)

    在这里,文章讲的也差不多了。可能还有一些地方没有表达的清楚,你可以加我qq363491343 我们共同讨论学习,

    最后就是提个醒(这篇文章主要讲java  转换  json ):

    layui 表格数据时,从接口获得的数据名称一定要和

    一样哦。

     

     

     

    微信公众号:

     

    展开全文
  • layui数据表格的使用

    千次阅读 2019-05-17 08:00:36
    (作者:郭鑫 撰写时间:2019年5月13号) layui(谐音:类UI) 是一款采用自身...用这个数据表格就四个步骤:“引用插件——创建一个表格的“画板”——“画”表格——查数据,放到数据表格”。 第一步:引用;...

    (作者:郭鑫 撰写时间:2019年5月13号)

    layui(谐音:类UI) 是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用,非常方便,在开发的时候会经常用到,特别是里面的数据表格,既方便又不失美观。用这个数据表格就四个步骤:“引用插件——创建一个装表格的“画板”——“画”表格——查数据,放到数据表格”。

     

    第一步:引用;

    引用一共要引用两个插件,一个是构建CSS样式的css文件,一个是表格功能的JS文件,引用如下

    CSS引用:<link href="~/Plugins/layui/css/layui.css" rel="stylesheet" />

    JS 引用:<script src="~/Plugins/layui/layui.js"></script>

     

    第二步:在页面上构建一个盒子,存放接下来要生成的表格;

        就使用一个table标签存放即可,其余两div只是限制一下,在table标签里面还有放有两个内容,一个是Id,一个是lay-filter。Id是为了把数据绑定到数据表格,lay-filter是事件过滤器。可以在很多地方看到看到这个属性,他一般是用于监听特定的自定义事件。你可以把它看作是一个ID选择器。Id值和lay-filter值可以相同也可以不同。

     

        第三步:“画表格”;

        画板已经有了,如果想画画的话,那你必须还要有一支画笔才行。首先要定义两个两变量。

    LayuiTable是用来加载数据表格模块的,tabOrganization是用来存放表格的

     

        然后在加载事件里面加载layui的数据表格模块,下面就是加载的方法,table为加载的模块名称,加载完成后就放到前面声明好的layuiTable中,以便与接下来的使用。

        画笔准备好后就可以开始做表格了,对表格进行初始化。tabOrganization就是前面声明存放表格的变量,layuiTable则是上面加载模块时的存放的变量,render就是初始化表格的方法。

        初始化表格的方法里面有一般有三个值,elem、cols、url(或data)。elem是用来绑定存放这个数据表格的容器,就是绑定页面上那个table标签;cols是用来设置表头行数据的;url和data都是用来放数据的,只是用url是要请求控制器查询数据库查询数据,data是直接为表格数据赋值。如果数据多的,还可以使用分页,分页用的是page;page里面有两参数:一个是limit,limit: 10,就是指定每一页显示10条数据;一个是limits:[5,10],表示的是每页的条数分组,在页面上是可以选择每页的条数的,这就是设置每页分组条数的地方。如果不分组,那就是默认显示10条数据,分页也是每10条数据的往上加。

        接着就是表头了,表头的内容放在cols里面,需要用两个中括号包裹着,一般数据表格前面都会有一个单选框或者复选框,然后就是列的序号,接着才是数据的内容。

    选择框和序号用的是type,type可选的值有5个,分别是:

    normal(常规列,无需设定)

    checkbox(复选框列)

    radio(单选框列)

    numbers(序号列)

    space(空列)

    内容项用的是field,field是用来设定字段名。字段名的设定非常重要,且是表格数据列的唯一标识,{ field: 'ChineseName', title: '中文名称' },

    field后面紧跟着的是放入数据时对应的名称,不再页面上显示;

    title是设定需要显示在页面上的字段,就是表头内容了;

    主要的就是这几个内容了,其它的还有一些属性,例如

    fixed:意思是将该列数据固定,有两个可选值left(固定在左)、right(固定在右)。一旦设定,对应的列将会被固定在左或右,不随滚动条而滚动。 

    align:也是固定的意思,不过align是固定文字,即单元格排列方式。可选值有:left(默认)、center(居中)、right(居右)。

    hide:隐藏,默认值为false(不隐藏),可设定为true(隐藏)。

    width:设定列宽,若不填写,则自动分配;若填写,则支持值为:数字、百分比 
    请结合实际情况,对不同列做不同设定。

    效果如下:

             这样子表格就做好了,但是也就只是把表格显示了出来,如果要对表格点击操作的话还要对表格进行监听,监听用的就是table标签里面的lay-filter属性值了,也就是这里的tabOrganization。layuiTable依旧是加载的数据表格模块,row监听的是单击事件,rowDouble监听的是双击事件,监听事件里最重要的就是获取到所点击行的数据,获取数据直接就是回调函数的参数点出来就行。obj.data就获取到点击行的数据了。还有就是要让用户知道已经选中了该行,就要给这一行添加一些样式,顺便把选择框选上。这样,一个简单的数据表格就做好了。

            

    展开全文
  • 将excel表格数据转换为xml文本数据

    千次阅读 2017-07-31 18:35:01
    这篇blog主要是讲述java中poi读取excel,并将excel中的数据转化为xml文本中的数据,而excel的版本包括:2007之前和2007之后两版本, 即excel的后缀名为:xls和xlsx。 该项目的目录结构如下图: 项目中所...

    原文:http://blog.javayc.com/archives/12

    这篇blog主要是讲述java中poi读取excel,并将excel中的数据转化为xml文本中的数据,而excel的版本包括:2007之前和2007之后两个版本, 即excel的后缀名为:xls和xlsx。

    该项目的目录结构如下图:


    项目中所需要的jar包如图中lib目录所示。
    所用的Excel数据如下图所示:(不同excel版本中的数据相同)

    大家也可以用自己的数据,但是,数据请符合以下规则,(如不符合以下规则,请自行修改代码后再使用):
    1、我们要读取的sheet要放在excel中的最前面
    2、sheet中的第一行为字段行
    3、sheet中必须要有一个字段为Key的列
    4、sheet中的第二行为该字段的解释
    5、sheet中的第三行为该字段的类型
    6、sheet中的第四行为标志位,该标志位的含义为:当Key字段的这个值为C的时候,只生成client端使用的xml文件(其他字段的该值为C或者A就放进该xml文件中,为S就不会放入),当Key字段的这个值为S的时候,只生成server端使用的xml文件(其他字段的该值为S或者A就放进该xml文件中,为C就不会放入),当值为A的时候,即生成client端使用的xml文件,也生成server端使用的xml文件(其他字段的该值为C时,放入生成的client端使用的xml文件中,其他字段的值为S时,放入生成的server端使用的xml文件中,其他字段的值为A时,即放入生成的client端使用的xml文件中,又放入server端使用的xml文件中)。
    运行结果如下所示:
    client端运行结果:

    server端运行结果:


    代码部分:

    ConfigUtil.java主要负责获取我们配置在config.properties里面的数据

    package util;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.Properties;
    
    public class ConfigUtil {
    	//获取一个文本输入流,该文本输入流所输入的是config.properties配置文件
    	public FileInputStream getFileInputStream(){
    		//声明一个文本输入流
    		FileInputStream in = null;
    		try {
    			//实例化文本输入流,输入config.properties配置文件
    			in = new FileInputStream("conf/config.properties");
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		//返回该文本输入流
    		return in;
    	}
    	//关闭一个文本输入流
    	public void closeFileInputStream(FileInputStream in){
    		try {
    			//关闭文本输入流
    			in.close();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	//通过Properties获取名称为pathName的值
    	public String getPath(Properties pro, String pathName) {
    		//获取本项目的根目录
    		String firstPath = ConfigUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath();
    		//获取本项目根目录的上一级目录
    		firstPath = firstPath.substring(0, firstPath.lastIndexOf("/"));
    		//获取config.properties中配置的名称为pathName的属性值
    		String lastPath = pro.getProperty(pathName);
    		//判断lastPath是否是以..开头的
    		if (lastPath.substring(0, 2).equals("..")) {
    			//如果lastPath是以..开头的,我们就调用该方法获取它的绝对路径
    			lastPath = getPath(firstPath, lastPath);
    		} else {
    			//如果不是以..开头的,我们再去判断是否是以.开头的
    			if (lastPath.substring(0, 1).equals(".")) {
    				//如果是以.开头的,我们在这里处理,获取他的绝对路径
    				lastPath = firstPath + lastPath.substring(1, lastPath.length());
    			}
    		}
    		//返回该绝对路径
    		return lastPath;
    	}
    	//当配置中的路径是以..开头的时候,我们通过该方法可以获取到我们要的文件夹的绝对路径
    	public String getPath(String firstPath, String lastPath) {
    		//判断lastPath中是否存在..
    		if (lastPath.indexOf("..") != -1) {
    			//将firstPath进行截取,去掉firstPath的最后一个目录结构
    			firstPath = firstPath.substring(0, firstPath.lastIndexOf("/"));
    			//将lastPath进行截取,去掉lastPath的前3个字符,(../)
    			lastPath = lastPath.substring(3, lastPath.length());
    			//递归调用
    			return getPath(firstPath, lastPath);
    		} else {
    			//当lastPath中不存在..的时候,我们将firstPath和lastPath进行拼接,获得绝对路径
    			return firstPath + "/" + lastPath;
    		}
    	}
    }
    ExcelToXml.java中的代码为逻辑代码,负责读取excel中的数据,解析,并生成xml文件
    package impl;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Properties;
    
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    import util.ConfigUtil;
    
    public class ExcelToXml {
    	public static void main(String[] args) throws Exception {
    		ExcelToXml excelToXml = new ExcelToXml();
    		excelToXml.excelToXml();
    	}
    
    	@SuppressWarnings("unchecked")
    	public void excelToXml() {
    		// 实例化ConfigUtil类,用来获取config.properties中配置的属性
    		ConfigUtil configUtil = new ConfigUtil();
    		// 打开一个文件输入流,这个输入流读取了config.properties
    		FileInputStream in = configUtil.getFileInputStream();
    		// 实例化一个properties配置文件的工具类
    		Properties pro = new Properties();
    		try {
    			// 载入文件输入流中的数据
    			pro.load(in);
    		} catch (IOException e2) {
    			// TODO Auto-generated catch block
    			e2.printStackTrace();
    		}
    		// 获得ExcelPath的路径,该路径在config.properties中可以配置成相对路径,也可以配置成绝对路径,
    		// 但是,如果是相对路径,这个路径是相对于本项目根目录的,不是相对于本类文件的
    		String excelPath = configUtil.getPath(pro, "ExcelPath");
    		// 获得ClientPath的路径,该路径在config.properties中可以配置成相对路径,也可以配置成绝对路径,
    		// 但是,如果是相对路径,这个路径是相对于本项目根目录的,不是相对于本类文件的
    		String clientPath = configUtil.getPath(pro, "ClientPath");
    		// 获得ClientPath的路径,该路径在config.properties中可以配置成相对路径,也可以配置成绝对路径,
    		// 但是,如果是相对路径,这个路径是相对于本项目根目录的,不是相对于本类文件的
    		String serverPath = configUtil.getPath(pro, "ServerPath");
    		// 获得需要在生成的xml文件中声明的版本号,字符集的配置
    		String xmlDeclaration = pro.getProperty("xmlDeclaration");
    		System.out.println("ExcelPath = " + excelPath);
    		System.out.println("ClientPath = " + clientPath);
    		System.out.println("ServerPath = " + serverPath);
    		System.out.println("XmlDeclaration = " + xmlDeclaration);
    		// 文件输入流使用完毕,关闭这个文件输入流
    		configUtil.closeFileInputStream(in);
    		// 读取Excel的存放路径,这个路径需要指向一个已存在的文件夹,不然会报错,因为要根据这里面的excel来生成xml,所以,如果文件夹不存在,我不会主动去创建
    		File file = new File(excelPath);
    		// 判断该file是不是一个文件夹
    		if (file.isDirectory()) {
    			// 获取文件夹中的所有文件
    			File[] excelFiles = file.listFiles();
    			// 遍历这些文件
    			for (File excelFile : excelFiles) {
    				// 判断是否是文件
    				if (excelFile.isFile()) {
    					// 获取文件名(包括后缀名)
    					String excelName = excelFile.getName();
    					// 获取文件名(去掉后缀名)
    					String firstName = excelName.substring(0, excelName.lastIndexOf("."));
    					// 获取文件的后缀名
    					String excelLastName = excelName.substring(excelName.lastIndexOf(".") + 1, excelName.length());
    					// 声明一个workbook,用来操作我们要操作的excel文档用的
    					Workbook wb = null;
    					// 声明一个文本输入流,用来读取我们要操作的excel文档用的
    					FileInputStream fis = null;
    					try {
    						// 实例化文本输入流
    						fis = new FileInputStream(excelFile);
    					} catch (FileNotFoundException e1) {
    						// TODO Auto-generated catch block
    						e1.printStackTrace();
    					}
    					// 声明一个sheet,用来操作我们要操作的sheet
    					Sheet sheet = null;
    					// 声明一个row,这个row用来操作sheet中的第一列,这里的规则第一列存放的是字段名
    					Row namesRow = null;
    					// 声明一个row,这个row用来操作sheet中的第二列,这里的规则第二列存放的是字段说明
    					Row annotationRow = null;
    					// 声明一个row,这个row用来操作sheet中的第三列,这里的规则第三列存放的是字段的类型
    					Row classRow = null;
    					// 声明一个row,这个row用来操作sheet中的第四列,这里的规则第四列存放的是一个标志位,
    					// 标志这个字段生成的时候是放入client使用的xml文件中的,还是放入server使用的xml文件中的,
    					// C表示放入client使用的xml文件中,S表示放入server使用的xml文件中,A表示在client和server使用的xml文件中都放入
    					Row typeRow = null;
    					// 我们每一张excel表中必须要有一个叫Key的字段,这个字段是确定数据的唯一性的,相当于id,这里声明的keyNum是表示Key这个字段在sheet中的第几列
    					int keyNum = 0;
    					// 声明一个boolean值,该值表示是否要生成client端使用的xml文件,当key的标志位为C的时候只生成client端使用的xml文件,当key的标志位为S的时候,
    					// 只生成server端使用的xml文件,当key的标志位为A的时候,表示既要生成client端使用的xml文件,又要生成server端使用的xml文件
    					boolean cfal = false;
    					// 声明一个boolean值,该值表示是否要生成server端使用的xml文件
    					boolean sfal = false;
    					// 声明一个List,用来存放所有的字段名
    					List<String> nameList = null;
    					// 声明一个List,用来存放所有的字段说明
    					List<String> annotationList = null;
    					// 声明一个List,用来存放所有的字段类型
    					List<String> classList = null;
    					// 声明一个List,用来存放所有的要放入client端使用的xml文件的字段的位置
    					List<Integer> cnums = null;
    					// 声明一个List,用来存放所有的要放入server端使用的xml文件的字段的位置
    					List<Integer> snums = null;
    					// 实例化一个xml的名称,所生成的xml文件就叫这个名字
    					String xmlName = firstName + ".xml";
    					// 声明一个xml文件,这个文件就是我们要生成的xml文件
    					File xmlFile = null;
    					// 声明一个字符串,这个字符传存放的是我们要放入xml文件中的内容
    					String outputStr = "";
    					// 判断该文件的后缀名是否是xls结尾的,主要是为了区分excel的版本
    					if (excelLastName.equals("xls")) {
    						POIFSFileSystem fs = null;
    						try {
    							fs = new POIFSFileSystem(fis);
    							// 实例化workbook
    							wb = new HSSFWorkbook(fs);
    						} catch (IOException e) {
    							e.printStackTrace();
    						}
    						// 判断该文件的后缀名是否是xlsx结尾的,主要是为了区分excel的版本
    					} else if (excelLastName.equals("xlsx")) {
    						try {
    							// 实例化workbook
    							wb = new XSSFWorkbook(fis);
    						} catch (IOException e) {
    							e.printStackTrace();
    						}
    						// 不是excle文件就跳过本次循环
    					} else {
    						continue;
    					}
    					// 实例化sheet,这里我默认取的是文件中的第一个sheet,大家也可以改成用sheet名来取的,wb.getSheet("sheet名");
    					sheet = wb.getSheetAt(0);
    					// 获取sheet中的第一行,也就是字段名那一行
    					namesRow = sheet.getRow(0);
    					// 获取第一行的内容
    					Object[] obj = getNames(namesRow);
    					// 将第一行的内容赋值给nameList
    					nameList = (List<String>) (obj[0]);
    					// 获得key在excel表中的哪一列
    					keyNum = (int) (obj[1]);
    					// 判断,如果第一行为空,就跳过本次循环
    					if (nameList == null || nameList.size() == 0) {
    						continue;
    					}
    					// 获得sheet中的第二行,也就是字段说明那一行
    					annotationRow = sheet.getRow(1);
    					// 获得字段说明的内容
    					annotationList = getAnnotations(annotationRow);
    					// 判断,如果第二行为空,就跳过本次循环
    					if (annotationList == null || annotationList.size() == 0) {
    						continue;
    					}
    					// 获得sheet中的第三行,也就是字段类型那一行
    					classRow = sheet.getRow(2);
    					// 获得字段类型的内容
    					classList = getClasses(classRow);
    					// 判断,如果第三行为空,就跳过本次循环
    					if (classList == null || classList.size() == 0) {
    						continue;
    					}
    					// 获得sheet中的第四行,也就是标志位那一行
    					typeRow = sheet.getRow(3);
    					// 获得标志位的信息
    					Object[] tobj = getTypes(typeRow, keyNum);
    					// 获得哪些列是要放入到client端使用的xml文件中的
    					cnums = (List<Integer>) tobj[0];
    					// 获得哪些列是要放入到server端使用的xml文件中的
    					snums = (List<Integer>) tobj[1];
    					// 获取是否生成客户端xml文件
    					cfal = (boolean) tobj[2];
    					// 获取是否生成server端使用的xml文件
    					sfal = (boolean) tobj[3];
    					// 判断是否生成client端使用的xml文件
    					if (cfal) {
    						// 获取要向xml文件中打印的内容
    						outputStr = getOutputStr(nameList, annotationList, classList, firstName, sheet, cnums,
    								xmlDeclaration, false);
    						System.out.println(outputStr);
    						// 实例化client端使用的xml文件
    						xmlFile = new File(clientPath + "/" + xmlName);
    						try {
    							// 将内容写入到client端使用的xml文件中
    							writer(xmlFile, outputStr);
    						} catch (IOException e) {
    							// TODO Auto-generated catch block
    							e.printStackTrace();
    						}
    					}
    					// 判断是否生成server端使用的xml文件
    					if (sfal) {
    						// 获取要向xml文件中打印的内容
    						outputStr = getOutputStr(nameList, annotationList, classList, firstName, sheet, snums,
    								xmlDeclaration, true);
    						System.out.println(outputStr);
    						// 实例化server端使用的xml文件
    						xmlFile = new File(serverPath + "/" + xmlName);
    						try {
    							// 将内容写入到server端使用的xml文件中
    							writer(xmlFile, outputStr);
    						} catch (IOException e) {
    							// TODO Auto-generated catch block
    							e.printStackTrace();
    						}
    					}
    
    				}
    			}
    		}
    	}
    
    	// 获取excel中第一行所包含的信息
    	private Object[] getNames(Row namesRow) {
    		// 实例化一个List,该list中存放的是所有的字段名
    		List<String> nameList = new ArrayList<String>();
    		// 实例化一个int值,该值表示key字段在excel中的位置
    		int keyNum = 0;
    		// 实例化一个object类型的数组,该数组中存放的是所有的字段名和key字段的位置
    		Object[] obj = new Object[2];
    		// 判断namesRow这个行是否为空
    		if (namesRow != null) {
    			// 遍历namesRow这一行
    			for (int i = 0; i < namesRow.getLastCellNum(); i++) {
    				// 获取单元格
    				Cell cell = namesRow.getCell(i);
    				// 判断单元格是否为空
    				if (cell != null) {
    					// 添加单元格的内容到nameList中
    					nameList.add(cell.getStringCellValue());
    					// 判断这个单元格的内容是不是Key
    					if (cell.getStringCellValue().equalsIgnoreCase("Key")) {
    						// 记录Key的位置
    						keyNum = i;
    					}
    				}
    			}
    		}
    		// 将所有的字段名放入obj[0]
    		obj[0] = nameList;
    		// 将key列的位置放入obj[1]
    		obj[1] = keyNum;
    		// 返回obj
    		return obj;
    	}
    
    	// 获取字段说明那一行的数据
    	private List<String> getAnnotations(Row annotationRow) {
    		// 声明一个list,用来存放所有的字段说明
    		List<String> annotationList = new ArrayList<String>();
    		// 判断,字段说明那一行是否为空
    		if (annotationRow != null) {
    			// 遍历字段说明这一行所有的单元格
    			for (int i = 0; i < annotationRow.getLastCellNum(); i++) {
    				// 获取单元格
    				Cell cell = annotationRow.getCell(i);
    				// 判断单元格是否为空
    				if (cell != null) {
    					// 将单元格中的内容放入List中
    					annotationList.add(cell.getStringCellValue());
    				}
    			}
    		}
    		// 返回所有的字段说明
    		return annotationList;
    	}
    
    	// 获取字段类型那一行的数据
    	private List<String> getClasses(Row classRow) {
    		// 声明一个list,用来存放所有的字段类型
    		List<String> classList = new ArrayList<String>();
    		// 判断这一行是否为空
    		if (classRow != null) {
    			// 遍历这一行的所有单元格
    			for (int i = 0; i < classRow.getLastCellNum(); i++) {
    				// 获取单元格
    				Cell cell = classRow.getCell(i);
    				// 判断单元格是否为空
    				if (cell != null) {
    					// 将单元格的内容存放到list中
    					classList.add(cell.getStringCellValue());
    				}
    			}
    		}
    		// 返回所有的字段类型
    		return classList;
    	}
    
    	// 获取标志位那一行的信息
    	private Object[] getTypes(Row typeRow, int keyNum) {
    		// 声明一个List,用来存放所有要放入生成的client端的xml文件中的数据位置信息
    		List<Integer> cnums = new ArrayList<Integer>();
    		// 声明一个List,用来存放所有要放入生成的server端的xml文件中的数据位置信息
    		List<Integer> snums = new ArrayList<Integer>();
    		// 声明一个boolean值,用来判断是否要生成client端的xml文件
    		boolean cfal = false;
    		// 声明一个boolean值,用来判断是否要生成server端的xml文件
    		boolean sfal = false;
    		// 声明一个object数字,用来存放这一行所要返回的信息
    		Object[] obj = new Object[4];
    		// 判断这一行是否为空
    		if (typeRow != null) {
    			// 遍历这一行的所有单元格
    			for (int i = 0; i < typeRow.getLastCellNum(); i++) {
    				// 获取单元格
    				Cell cell = typeRow.getCell(i);
    				// 判断单元格是否为空
    				if (cell != null) {
    					// 判断单元格的内容是否为C,为C表示这一列要放入到生成的client端要使用的xml文件中
    					if (cell.getStringCellValue().equals("C")) {
    						// 添加单元格位置到cnums中
    						cnums.add(i);
    						// 判断是否是key列,如果是,表示要生成client端使用的xml文件
    						if (keyNum == i) {
    							// 将判断是否生成client端使用的xml文件的标志设为true
    							cfal = true;
    						}
    						// 判断单元格的内容是否为S,为S表示这一列要放入到生成的server端要使用的xml文件中
    					} else if (cell.getStringCellValue().equals("S")) {
    						// 添加单元格位置到snums中
    						snums.add(i);
    						// 判断是否是key列,如果是,表示要生成server端使用的xml文件
    						if (keyNum == i) {
    							// 将判断是否生成server端使用的xml文件的标志设为true
    							sfal = true;
    						}
    						// 判断单元格的内容是否为A,为A表示这一列既要放入到生成的client端使用的xml文件中,又要放入到生成的server端要使用的xml文件中
    					} else if (cell.getStringCellValue().equals("A")) {
    						// 添加单元格位置到cnums中
    						cnums.add(i);
    						// 添加单元格位置到snums中
    						snums.add(i);
    						// 判断是否是key列,如果是,表示要生成client端和server端使用的xml文件
    						if (keyNum == i) {
    							// 将判断是否生成client端使用的xml文件的标志设为true
    							cfal = true;
    							// 将判断是否生成server端使用的xml文件的标志设为true
    							sfal = true;
    						}
    					}
    				}
    			}
    		}
    		// 将要生成client端xml文件的位置信息放入到obj[0]
    		obj[0] = cnums;
    		// 将要生成server端xml文件的位置信息放入到obj[1]
    		obj[1] = snums;
    		// 将判断是否要生成client端xml文件的标志放入到obj[2]
    		obj[2] = cfal;
    		// 将判断是否要生成server端xml文件的标志放入到obj[3]
    		obj[3] = sfal;
    		// 返回这一行所有的信息
    		return obj;
    	}
    
    	// 获取要打印到xml文件中的内容
    	private String getOutputStr(List<String> nameList, List<String> annotationList, List<String> classList,
    			String firstName, Sheet sheet, List<Integer> nums, String xmlDeclaration, boolean isServer) {
    		// 声明一个StringBuilder,用来存放要打印到xml文件中的内容
    		StringBuilder builder = new StringBuilder("");
    		// 向builder中放入配置声明,包括版本号和编码类型
    		builder.append(xmlDeclaration + " \n");
    		// 向builder中放入注释的开始符号
    		builder.append("<!-- ");
    		// 向builder中放入换行符
    		builder.append("\n");
    		// 遍历位置信息
    		for (Integer num : nums) {
    			// 将该位置的字段说明放入到builder中
    			builder.append(annotationList.get(num) + " ");
    		}
    		// 向builder中放入换行符
    		builder.append("\n");
    		// 遍历位置信息
    		for (Integer num : nums) {
    			// 将该位置的字段类型放入到builder中
    			builder.append(classList.get(num) + " ");
    		}
    		// 向builder中放入换行符
    		builder.append("\n");
    		// 向builder中放入注释结束符和换行符
    		builder.append("--> \n");
    		// 向builder中放入标签开始符号
    		builder.append("<");
    		// 向builder中放入标签名称
    		builder.append(firstName);
    		// 向builder中放入标签结束符号
    		builder.append(">");
    		// 向builder中放入换行符
    		builder.append("\n");
    		// 遍历该sheet中从第四行开始的所有行,从第四行开始就是数据行了
    		for (int i = 4; i <= sheet.getLastRowNum(); i++) {
    			// 获取某一行
    			Row row = sheet.getRow(i);
    			// 判断这一行是否为空
    			if (row != null) {
    				// 获取本行的第一个单元格
    				Cell cell1 = row.getCell(0);
    				// 判断这个单元格是否为空,或者是空白的,或者是错误的,如果符合其中一种,我们就跳过此次循环
    				if (cell1 == null || cell1.getCellType() == Cell.CELL_TYPE_BLANK
    						|| cell1.getCellType() == Cell.CELL_TYPE_ERROR) {
    					continue;
    				}
    				// 这里是向builder中添加数据标签的开始符,我这里用的是小写字母l,大家也可以换掉
    				builder.append("    <l ");
    				// 遍历所有要向xml中放入的数据列
    				for (int j = 0; j < nums.size(); j++) {
    					// 获取这一行中的某一列的单元格
    					Cell cell = row.getCell(nums.get(j));
    					// 判断单元格是否为空,或者空白,或者是错误的,如果符合其中一种,我们就跳过此次循环
    					if (cell != null) {
    						if (cell.getCellType() == Cell.CELL_TYPE_BLANK || cell.getCellType() == Cell.CELL_TYPE_ERROR) {
    							continue;
    						}
    						// 判断生成的xml文件是否是server端使用的,如果是server端使用的,我们将他的属性名全部小写处理,
    						// 如果大家不想这样做,可以去掉这个判断,只留下else里面的那一行代码
    						if (isServer) {
    							// 向builder中添加该列的属性名称,这里是对server端的处理,所以我进行了toLowerCase()处理
    							builder.append(nameList.get(nums.get(j)).toLowerCase() + "=\"");
    						} else {
    							// 向builder中添加该列的属性名称,这里是对client端的处理
    							builder.append(nameList.get(nums.get(j)) + "=\"");
    						}
    						// 判断该单元格是否是boolean类型
    						if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
    							// 当该单元格的类型为boolean类型时,我们调用单元格的getBooleanCellValue()这个方法获取它的值,然后将该值放入builder中
    							builder.append(cell.getBooleanCellValue() + "\" ");
    							// 判断该单元格是否是公式类型
    						} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
    							// 当该单元格的类型为公式类型时,我们调用单元格的getCellFormula()这个方法获取它的值,然后将该值放入builder中(这个获取到的是一个公式)
    							builder.append(cell.getCellFormula() + "\" ");
    							// 判断该单元格是否是数值类型
    						} else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
    							// 当该单元格的类型为数值类型时,我们调用单元格的getNumericCellValue()这个方法获取它的值,然后将该值放入builder中
    							// 这里因为我用到的数据都是整数型的,所有我将取到的值强转成了int,大家也可以去掉强转,就取原来的值就好
    							builder.append((int) (cell.getNumericCellValue()) + "\" ");
    							// 判断该单元格的类型是否是字符串类型
    						} else if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
    							// 当该单元格的类型为字符串类型时,我们调用单元格的getStringCellValue()这个方法获取它的值,然后将该值放入builder中
    							builder.append(cell.getStringCellValue() + "\" ");
    						}
    					}
    				}
    				// 向builder中放入本条数据的结束符,以及换行符
    				builder.append("/> \n");
    			} else {
    				continue;
    			}
    		}
    		// 向builder中放入结束标签的开始符
    		builder.append("</");
    		// 向builder中放入结束标签的标签名
    		builder.append(firstName);
    		// 向builder中放入结束标签的结束符
    		builder.append(">");
    		// 返回我们要向xml中插入的内容
    		return builder.toString();
    	}
    
    	// 将内容outputStr插入到文件xmlFile中
    	private void writer(File xmlFile, String outputStr) throws IOException {
    		// 判断该文件是否存在
    		if (xmlFile.exists()) {
    			// 如果存在,删除该文件
    			xmlFile.delete();
    		}
    		// 创建该文件
    		xmlFile.createNewFile();
    		// 实例化一个输出流,该输出流输出的目标对象是xmlFile,输出时的编码格式为utf-8,这里大家可以根据自己的实际情况作修改
    		OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(xmlFile), "utf-8");
    		// 将outputStr写入到文本中
    		writer.write(outputStr);
    		// 关闭输出流
    		writer.close();
    	}
    }

    config.properties配置文件中,有四个需要配置的数据:ExcelPath请配置你的excel所在的路径,ClientPath请配置你的client端生成的xml文件需要放置的目录,ServerPath请配置你的server端生成的xml文件需要放置的目录,xmlDeclaration请配置生成的xml中第一行的声明,其中的version和encoding请根据自己的需求填写,示例如下图:


    源码及相关jar文件在github的下载地址:https://github.com/yuchaozxc/ExcelToXml

    源码及相关jar文件在csdn的下载地址:http://download.csdn.net/detail/u013871927/9916745


    展开全文
  • 在做管理后台功能时,经常需要用到表格展示数据,从数据库查询返回的数据,返回集合或数组到前台,然后前台将数据渲染成表格,方便直观展示数据,通常还需要结合分页、...这是一个读取本地json数据渲染表格的示例 ...
  • DataGridView数据到Excel表格 方法一:利用微软的excel 操作类 引用:using Excel = Microsoft.Office.Interop.Excel;...首先给表格一个点击事件 private void buttonX26_Click(object sender, EventArgs e) { ...
  • layui表格设计以及数据初始化

    千次阅读 2019-04-28 08:38:29
    开发工具与关键技术: VisualStudio 2015 mvc 作者:杨泽平 撰写时间:2019、4、20 数据表格,在mvc项目中很多地方都会见到,...我们写数据表格之前,需要引用这个layui的插件,引用完后接下来就是,我们需要一个t...
  • excel表格中的数据变成json格式的方法 大家在工作中会遇到一些需要使用excel表格中的数据的情况,但是excel中的数据很难直接用在编程中,比如本人在工作中就需要... 首先,我先拿出一个表格表格中不同的条件对应不
  • 如何导出数据到Excel表格

    千次阅读 2019-05-08 20:14:26
    开发工具与关键技术:Visual Studio、MVC 作者:幻奏 撰写时间:2019.5.5 我们在日常的生活中常常会看到很多的数据,有时...首先我们要点击导出的按钮,然后弹出一个提示框,询问你是否导出你所要导出的数据,确定...
  • C#中导出数据到Excel表格

    千次阅读 2019-04-28 08:17:47
    有些数据的使用不可能仅仅限制于本个项目,还需要在外部使用,当需要在外部使用数据时,就要对数据进行提取,其中一个提取的方式就是把数据导出到Excel表格。 JS部分 在JS部分的代码很少,就是一个询问提示框然后在...
  • 问题:在表单中修改数据,经常遇到表格数据也跟着修改的问题,并且不管是不是按确定或取消按钮,表格数据还是被修改了。 -部分代码如下: editRow(row: any): void { this.currentInfo = row; this....
  • 实际上,bootstrap或者layui的table都有对应的treegrid插件来实现表格数据的树形展示。但layui的treegrid插件似乎对复杂表头的支持不大好,而在我使用bootstrap的treegrid插件时一直出现样式问题(当然应该是我自己...
  • 前面博客已经写过两种方法,各有缺点,但是项目中是追求的完美,所以才有我现在这种方法,可以说这种方法接近完美。 引用:NPOI 添加引用:项目==》管理NUGet程序包 下载安装: 判断DataGridView是否有数据: ...
  • 引用CSS、JS: Vue、element-ui、Axios treeTable: https://github.com/ProsperLee/element-tree-grid 模拟根据父id请求子数据的JSON: 1 // data.json 2 [{ 3 "id": "a1", 4 "name": "级-1", 5 .....
  • 四、从XML读取数据表格

    千次阅读 2012-09-18 15:59:49
    XML是一种常见的数据,其应用也非常广泛。现在新建一个名为xmlgrid.html网页,...然后新建一个xmlgrid.xml文件,其内容如下: 张三 男 2012001 170 1985 9/1 12:00am 王芳 女 2012003 160 1985 10/
  • 关于webix数据表格用法完整示例

    千次阅读 2017-10-30 23:18:21
    本文用简单示例,说明webix如何快速实现数据表的锁列,锁标题行,翻页,数据统计,排序,这些功能只需要配置实现,不需要写代码。 本文提供所有运行的源代码,可以导入到MyEclipse中即刻运行。
  • file = '冠状病毒数据new' df = pd.read_excel(file) df.head(5) 会出现错误: error: No such file or directory: ‘冠状病毒数据new’ *又或者使用 import xlrd from pprint import pprint file = '冠状病毒数据...
  • 简单的Ajax加载数据表格

    千次阅读 2018-05-23 09:48:39
    &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="...--注意引用的顺序,《script》Vue一定要在Iview的前面--&gt; &a
  • 大部分的数据分析师都或多或少掉入这样的陷阱:每天大部分的工作都花在查数上,干着干着变成了“查数菇”。...产品新上线了一个新功能,想第一时间看看功能的使用数据;老板在做决策缺一项数做判断依据,要快速查询...
  • 今天做一个导出Excel表格的功能,最后一列是日期,在java那设置为日期格式,结果前面几列的数字也变成了日期格式搞了很久终于在网上找到了解决方法,附上原文链接...cell.getCellStyle().setFont(font);...
  • 超硬核!数据结构学霸笔记,考试面试吹牛就靠它

    万次阅读 多人点赞 2021-03-26 11:11:21
    上次发操作系统笔记,很快浏览上万,这次数据结构比上次硬核的多哦,同样的会发超硬核代码,关注吧。
  • 大家好,今天给大家介绍一下如何建立MapReduce程序的基本模板 MapReduce程序与您所学过的编程模型有所不同。...通过用不同方式应用MapReduce,您可以开始培养种直觉,并养成“用MapReduce思考(thinking in MapRe
  • vue移动端复杂表格表头,固定表头与固定第

    万次阅读 热门讨论 2018-07-28 11:45:09
    最近做移动端的h5项目,要做一个可配置表头的复杂表格,网上找了很久也没什么好方法,结合网上的一些例子,在此做一了一个完整的vue版的例子。 效果 无图无真相,先上最终效果图再说 。 方法一:iscroll ...
  • Apache POI电子表格/Spreadsheet

    千次阅读 2017-10-12 23:09:59
    首先,让我们创建一个使用在前面的章节中讨论的引用的类的电子表格。按照前面的章节中,首先创建一个工作簿,然后我们就可以去,并创建一个表。 下面的代码片段用于创建电子表格。 //Create Bla
  • 计算与推断思维 五、表格

    万次阅读 2017-11-18 21:05:17
    具名列的序列,每列都描述数据集中所有条目的一个方面,或者 行的序列,每行都包含数据集中单个条目的所有信息。 为了使用表格,导入所有称为datascience的模块,这是为这篇文章创建的模块。from data
  • 数据结构基础概念篇

    万次阅读 多人点赞 2017-11-14 13:44:24
    数据结构一些概念 数据结构就是研究数据的逻辑结构和物理结构...数据元素:数据(集合)中的一个“个体”,数据及结构中讨论的基本单位 数据项:数据的不可分割的最小单位。一个数据元素可由若干个数据项组成。 数据
  • Pandas是Python生态中非常重要的数据分析包,它是一个开源的库,采用BSD开源协议。 Pandas是基于NumPy构建的数据分析包,但它含有比ndarray更为高级的数据结构和操作工具,如Series类型、DataFrame类型等。 Pandas的...
  • Excel2016 四超强的数据分析功能

    千次阅读 2017-02-23 14:03:19
    三维地图、预测工作表、引用外部数据查询、数据透视表更强大的功能改进、将Excel 表格发布到Office 365 Power BI实现数据的商业智能分析等等,Excel 2016在数据智能分析与展示上亮点很多。
  • Bigtable:一个结构化数据的分布式存储系统 翻译人:HC Bigtable是一个为管理大规模结构化数据而设计的分布式存储系统,这些大规模数据是分布在上千台普通服务器的PB级数据。Google的许多项目使用Bigtable存储数据...
  • 又到年底了,大家在忙着收集数据的同时还在忙着共享一些数据。...使用excel对表格数据进行保护​第步:打开文件-工具栏-审阅-保护工作表选择“审阅”选项,可以看到保护工作表的选项。第二步:设置保护工作

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,680
精华内容 19,472
关键字:

引用前面一个表格数据