精华内容
下载资源
问答
  • Java实现从网页上传导入excel数据到数据库

    万次阅读 多人点赞 2018-10-31 00:55:57
    项目中通过excel往数据库批量导入的功能颇为常见,所以今天整理出来一份简单的例子,为了以后方便使用,同时也为大家实现功能作为一个参考,该框架采用SSM,可以结合自身业务修改即可使用 Spring配置文件加载解析...

           一晃已经是十月份的最后一天了,时间过得很快...

           项目中通过excel往数据库批量导入的功能颇为常见,所以今天整理出来一份简单的例子,为了以后方便使用,同时也为大家实现功能作为一个参考,该框架采用SSM,可以结合自身业务修改即可使用

    Spring配置文件加载解析器(文件上传)

           <!-- 加载 multipartResolver -->
           <bean id="multipartResolver"
    	    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    	    <property name="maxUploadSize" value="307200000"/>
    	    <property name="maxInMemorySize" value="4096" />
    	</bean>

    HTML界面

    <form class="form form-horizontal" id="form-article-add" enctype="multipart/form-data">
    		<div class="row cl">
    			<label class="form-label col-xs-4 col-sm-2">文件:</label>
    			<div class="formControls col-xs-8 col-sm-9"> <span class="btn-upload form-group">
    				<input class="input-text upload-url" type="text" name="uploadfile" id="uploadfile" readonly nullmsg="请添加附件!" style="width:200px">
    				<a href="javascript:void();" class="btn btn-primary radius upload-btn"><i class="Hui-iconfont">&#xe642;</i> 浏览文件</a>
    					<input type="file" multiple name="file" class="input-file" id="file">
    				</span> </div>
    		</div>
    		<div class="row cl">
    			<div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-2">
    				<button onClick="importUsers();" class="btn btn-primary radius" type="button"><i class="Hui-iconfont">&#xe632;</i> 导入数据</button>
    				<button onClick="cancel();" class="btn btn-default radius" type="button">&nbsp;&nbsp;取消&nbsp;&nbsp;</button>
    			</div>
    		</div>
    </form>

    的JavaScript的代码

                    /*导入数据*/
    		function importUsers(){
    			//var clientid = $("#clientid").val();
    			var FormDatas=new FormData($("#form-article-add")[0]);
    			var fileName=$("#file").val();
    			if(fileName == '') {
    		          layer.msg('请选择文件!',{
    		          	icon:MSG_CHECK,
    		          	time:MSG_TIME
    		          }); 
    		          return false;
    		      }
    			//验证文件格式
    		       var fileType = (fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length)).toLowerCase();
    			if (fileType != 'xlsx') {
    				    layer.msg('文件格式不正确!',{
    				     icon:MSG_CHECK,
    				     time:MSG_TIME
    				 });
    				return false;
    			} 
    			$.ajax({
    				type:'post',
    				url:'',
    				async : false,
    				cache : false,
    				contentType : false,
    				processData : false,
    				data:FormDatas,
    				success: function(data){
    					if(data == "error"){
    						layer.msg("文件导入失败,请重新上传!", {
    							icon: OPER_SB,
    							shade: [0.3, '#393D49'], // 透明度  颜色
    							time:5000
    							});
    						return false;
    					}else{
    						layer.msg("文件导入成功!", {
    							icon: OPER_CG,
    							shade: [0.3, '#393D49'], // 透明度  颜色
    							time:5000
    							});
    						window.location.reload();
    						return false;
    					}
    				},
    				error : function(data){
    					console.log(data.msg);
    				}
    			});
    		}

    sqlserver-表结构

     

    控制器代码

             /**
    	 * 导入学员清单
    	 * @param file
    	 * @param clientid 
    	 * @return
    	 * @throws IOException 
    	 */
    	@RequestMapping("importUsers")
    	@ResponseBody
    	public String importUsers(@RequestParam MultipartFile file,Integer clientid,HttpServletRequest request) throws IOException{
    		
    		boolean FLAG;//身份状态
    		
    		List<Users> list = new ArrayList<Users>();
    		XSSFWorkbook workbook =null;
    		
    		//把MultipartFile转化为File 第一种
    		CommonsMultipartFile cmf= (CommonsMultipartFile)file;
    		DiskFileItem dfi=(DiskFileItem) cmf.getFileItem();
    		File fo=dfi.getStoreLocation();
            
                    //把MultipartFile转化为File 第二种
                    //File fo = new File(file.getOriginalFilename());
                    //FileUtils.copyInputStreamToFile(file.getInputStream(),fo);
    
    		//创建Excel,读取文件内容
    		workbook = new XSSFWorkbook(FileUtils.openInputStream(fo));
    
    		//获取第一个工作表
    		XSSFSheet sheet = workbook.getSheet("学员信息");
    		
    		//获取sheet中第一行行号
    		int firstRowNum = sheet.getFirstRowNum();
    		//获取sheet中最后一行行号
    		int lastRowNum = sheet.getLastRowNum();
    		
    		try {
    			//循环插入数据
    			for(int i=firstRowNum+1;i<=lastRowNum;i++){
    				XSSFRow row = sheet.getRow(i);
    				
    				Users users = new Users();
    				
    				users.setClientid(clientid);
    				users.setAdddate(date);
    				users.setStatus(true);//默认为启用状态
    				
    				XSSFCell username = row.getCell(0);//学员名称
    				if(username!=null){
    					username.setCellType(Cell.CELL_TYPE_STRING);
    					users.setUsername((username.getStringCellValue()));
    				}
    				
    				XSSFCell phone = row.getCell(1);//联系方式
    				if(phone!=null){
    					phone.setCellType(Cell.CELL_TYPE_STRING);
    					users.setPhone((phone.getStringCellValue()));
    				}
    				
    				XSSFCell post = row.getCell(2);//职位
    				if(post!=null){
    					post.setCellType(Cell.CELL_TYPE_STRING);
    					users.setPost((post.getStringCellValue()));
    				}
    				
    				XSSFCell identitys = row.getCell(3);//身份
    				if(identitys!=null){
    					identitys.setCellType(Cell.CELL_TYPE_STRING);
    					if(identitys.getStringCellValue().equals("学员")){
    						FLAG = false;
    					}else{
    						FLAG = true;
    					}
    					users.setIdentitys(FLAG);
    				}
    				list.add(users);
    			}
    			//usersMapper.insert(list);//往数据库插入数据
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			workbook.close();
    		}
    		
    	}

    Excel中中的模板

    选择的Excel文件上传,看数据是否导入数据库

    通用的工具类 :

     Java 使用 Poi 导入 Excel 通用(一)

    Java 使用 Poi 导出 Excel 通用(二)

    以上就是本文的全部内容,希望对大家的学习有所帮助,欢迎评论交流。能get到知识点不要忘了关注点个赞~ 拒绝白嫖从我们做起hh~ 

     

    展开全文
  • 从Excel导入数据到数据库

    万次阅读 2019-05-27 11:22:56
    导入数据之前要先设计出一个导入数据Excel模板,写入数据就规定按照此模板写入。 把设计好的模板放入到项目的文件夹中。 接着写一个下载模板的代码,调用浏览器下载窗口,进行下载模板 public ActionResult ...
    开发工具与关键技术:VS2015,ASP.NET MVC
    
    撰写时间:2019年5月24日
    

    通过网页页面把Execl的数据导入到数据库。
    在导入数据之前要先设计出一个导入数据的Excel模板,写入数据就规定按照此模板写入。
    把设计好的模板放入到项目的文件夹中。
    接着写一个下载模板的代码,调用浏览器下载窗口,进行下载模板

     public ActionResult DownImportTemplate()
            {
                //Server  系统
                //MapPath  自动找到这个项目所在路径
                string filePath = Server.MapPath("~/Document/Template/英雄信息导入模板.xls");
                //因为是文件 所以要转换成流.所以要用到IO流
                if (System.IO.File.Exists(filePath))//判断此文件是否存在,并判断是否能用IO流输出
                {
                    //把这个路径转换成文件的名字  Path 路径  GetFileName 获取文件名
                    string strFileName = Path.GetFileName(filePath);
                    //文件返回可以接收三个参数,前面是具体返回的值,中间是返回的类型,最后可以读取文件的长度
                    return File(new FileStream(filePath, FileMode.Open), "application-octet-stream", strFileName);
                        //FileStream 文件流   FileMode 下载文件的模态框   Open,在点击下载模板是自动打开下载浏览器自带的下载框   
                        //application-octet-stream 通过流的格式返回
                        //strFileName 文件名字
                }
                else
                {
                    return Content("模板文件不存在,请联系系统运维人员");
                }
            }
    

    效果图:
    在这里插入图片描述
    接下来就是把模板填好
    把数据导入到数据库。

    public ActionResult EnterHeroData(HttpPostedFileBase file)
            {
                Fantasy fancy = new Fantasy();
                fancy.State = false;
                try
                {
                    //把session中的ImportExcel移除避免残留以前数据
                    Session.Remove("IportExcel");
                    //获取文件的后缀
                    //判断是否是Excel
                    //上传的工作簿的格式必须是 .xls
                    string fileExtension = System.IO.Path.GetExtension(file.FileName);
                    //判断类型是不是  .xls
                    //Equals  等于   判断前后是否相等
                    if (".xls".Equals(fileExtension)||".XLS".Equals(fileExtension))
                    {
                        //声明二进制数组存放文件  数组的长度以文件的长度决定
                        byte[] fileBytes = new byte[file.ContentLength];
                        //将传入的文件转化为二进制的数组存入fileBytes
                        file.InputStream.Read(fileBytes, 0, file.ContentLength);
                        //InputStream IO流读取
                        //将二进制数组转化为内存流
                        System.IO.MemoryStream excelFileStream = new System.IO.MemoryStream(fileBytes);
                        //MemoryStream 内存流
                        //将内存流转化为工作簿
                        NPOI.SS.UserModel.IWorkbook workbook = new HSSFWorkbook(excelFileStream);
    
                        //判断工作簿里是否有工作表
                        //NumberOfSheets > 0 工作表的数量是否大于零
                        //Number 数量   sheets  工作表
                        if (workbook.NumberOfSheets>0)
                        {
                            //查询出 英雄所在阵营ID 英雄技能ID 伤害类型ID 攻击方式ID 英雄点券ID 英雄金币ID
                            List<A01_HeroSame> dbHeroSame = (from tbHeroSame in myModel.A01_HeroSame
                                                             select tbHeroSame).ToList();
                            List<A02_HeroType> dbHeroType = myModel.A02_HeroType.ToList();
                            List<A03_HeroSkill> dbHeroSkill = myModel.A03_HeroSkill.ToList();
                            List<A04_HeroCapability> dbHeroCapability = myModel.A04_HeroCapability.ToList();
                            List<A05_HeroBattle> dbHeroBattle = myModel.A05_HeroBattle.ToList();
                            List<A06_HeroMoney> dbHeroMoney = myModel.A06_HeroMoney.ToList();
                            List<A07_HeroGold> dbHeroGold = myModel.A07_HeroGold.ToList();
                            
    
                            //对象列表
                            List<HeroData> listHero = new List<HeroData>();
                            //获取第一个工作表  下标为零
                            NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt(0);
                            
    
                            //判断工作表中是否有数据
                            if(sheet.PhysicalNumberOfRows > 0)
                            {
                                //工作表有数据
                                
                                //定义DataTable
                                DataTable dtExcel = new DataTable();
                                //获取标题行---  第二行,索引为1;第一行是说明
                                NPOI.SS.UserModel.IRow rowHeader = sheet.GetRow(1);
    
                                //获取表格的列数
                                int cellCount = rowHeader.LastCellNum;//LastCellNum 最后一个单元格是多大就获取列数是多大
                                //获取表格行数
                                int rowCount = sheet.LastRowNum + 1;//因为有个导入说明,所以要加1
    
                                //用到两个for循环,因为行和列
                                //创建dataTable中的列,循环获取表头中各个单元格的值
    
                                //获取列
                                //FirstCellNum 从第一列开始读取
                                for (int i = rowHeader.FirstCellNum; i < cellCount; i++)
                                {
                                    //通过遍历行中的每一个单元格,获取表头中的各个单元格的值
                                    DataColumn dtColumn = new DataColumn(rowHeader.GetCell(i).StringCellValue);
                                    //将获取到的所有标题列数据放到datatable中;
                                    dtExcel.Columns.Add(dtColumn);
                                    //Columns  获取有所有列
                                }
                                //获取行
                                //(sheet.FirstRowNum) + 2 第一行是说明  第二行是表条(标题)第三行才是数据,所以要+2
                                for (int i = (sheet.FirstRowNum)+2; i < rowCount; i++)
                                {
                                    //获取行的数据
                                    NPOI.SS.UserModel.IRow row = sheet.GetRow(i);
                                    DataRow dtRow = dtExcel.NewRow();
                                    if(row != null)
                                    {
                                        //遍历excel中一行的所有单元格
                                        for (int  y = row.FirstCellNum;  y < cellCount; y++)
                                        {
                                            //行中的每一个单元格都不为空
                                            if(row.GetCell(y) != null) {
                                                dtRow[y] = row.GetCell(y).ToString();
                                            }
                                        }
                                    }
                                    //将数据装到DataTable中
                                    //将填入数据的dtRow添入dtExcel
                                    dtExcel.Rows.Add(dtRow);
                                    //Rows 获取所有行
                                }
                                int intSuccess = 0; //记录导入成功的条数
                                int intFail = 0;//记录导入失败的条数 
                                //数据的准确性
                                foreach (DataRow row in dtExcel.Rows)
                                {
                                    //创建studentVo对象保存每一条数据
                                    HeroData Hero = new HeroData();
                                    try
                                    {
                                        //英雄所在阵营 和 获取英雄所在阵营ID
                                        Hero.HeroSame = row["英雄所在阵营"].ToString().Trim();
                                        //通过dataTable中的HeroSame到dbHeroSame中查找相应的HeroSameID
                                        Hero.HeroSameID = dbHeroSame.Where(m => m.HeroSame.Trim() == Hero.HeroSame).SingleOrDefault().HeroSameID;
    
                                        Hero.HeroCapability = row["伤害类型"].ToString().Trim();
                                        Hero.HeroCapabilityID = dbHeroCapability.Where(m => m.HeroCapability.Trim() == Hero.HeroCapability).SingleOrDefault().HeroCapabilityID;
    
                                        Hero.HeroBattle = row["攻击方式"].ToString().Trim();
                                        Hero.HeroBattleID = dbHeroBattle.Where(m => m.HeroBattle.Trim() == Hero.HeroBattle).SingleOrDefault().HeroBattleID;
    
                                        Hero.HeroMoney = row["英雄点券"].ToString().Trim();
                                        var HeroMoney = Convert.ToDecimal(Hero.HeroMoney);
                                        Hero.HeroMoneyID = dbHeroMoney.Where(m => m.HeroMoney == HeroMoney).SingleOrDefault().HeroMoneyID;
    
                                        Hero.HeroGold = row["英雄金币"].ToString().Trim();
                                        var HeroGold = Convert.ToDecimal(Hero.HeroGold);
                                        Hero.HeroGoldID = dbHeroGold.Where(m => m.HeroGold == HeroGold).SingleOrDefault().HeroGoldID;
    
                                        Hero.HeroTitle = row["英雄昵称"].ToString().Trim();
                                        Hero.HeroName = row["英雄名字"].ToString().Trim();
                                        Hero.HeroAddTime = row["英雄加入时间"].ToString().Trim();
                                        var HeroAddTimeLS = Convert.ToDateTime(Hero.HeroAddTime);
                                        Hero.PassiveSkill = row["被动技能"].ToString().Trim();
                                        Hero.SkillQ = row["技能Q"].ToString().Trim();
                                        Hero.SkillW = row["技能W"].ToString().Trim();
                                        Hero.SkillE = row["技能E"].ToString().Trim();
                                        Hero.SkillR = row["技能R"].ToString().Trim();
    
                                        //将每一条数据都添加到对象列表中
                                        listHero.Add(Hero);
                                        intSuccess++;//记录成功的条数
                                    }
                                    catch (Exception)
                                    {
                                        intFail++;
                                        fancy.State = false;
                                        fancy.Text = "数据处理出错";
                                    }
                                }
                                //把数据保存到Session当中
                                Session["ImportExcel"] = listHero;
                                fancy.State = true;
                                fancy.Text = String.Format("文件中共有" + dtExcel.Rows.Count + "条英雄数据,导入成功" + intSuccess + "条,导入失败" + intFail + "条");
                            }
                            else
                            {
                                fancy.Text = "工作表中没有数据";
                            }
    
                        }
                        else
                        {
                            fancy.Text = "工作簿中没有工作表"; 
                        }
                    }
                    else
                    {
                        fancy.Text = "选择的文件类型不正确";
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    fancy.State = false;
                    fancy.Text = "上传失败,类型不对应;请检查是否有工作簿,是否有数据,是否按照模板填写";
                }
                return Json(fancy,JsonRequestBehavior.AllowGet);
            }
    

    以上是控制器这边完整的数据导入代码
    以上的代码只需要根据自己的需要进行更改套用就好

    展开全文
  • 网页excel数据批量导入数据库

    千次阅读 2011-05-31 09:35:00
    批量导入EXCEL数据提供进度条的问题的一个方案,原来单击导入-》选择位置-》确定预览-》确定导入,然后系统便开始导入数据,用的是同步的方法,这导致前台页面一直等待响应,且无法实现进度条(js单线程原因)...

    批量导入EXCEL数据提供进度条的问题的一个方案,原来单击导入-》选择位置-》确定预览-》确定导入,然后系统便开始导入数据,用的是同步的方法,这导致前台页面一直等待响应,且无法实现进度条(js单线程原因)。。如果将确定导入那一步改成js异步调用后台的导入功能,当导入结束后通知前台提示导入成功。同时增加一个定时器(可以用ajax定时器或js定时器+webservice+js)定期从数据库中读取增加的数据条数(需要一定条件比如某个工区新增的)并通过进度条显示。。这样后台运行导入程序,前台页面显示导入进程,用户体验就会比较好。。

    展开全文
  • 数据从网页中直接导入excel中,下面就上代码。 页面js中导出的方法: function exportExcel() { var queryPara = sy.serializeObject($('#agendaForm')); var url = BASE_URL+"exportExcel.do?queryPara=" ...

    把数据从网页中直接导入到excel中,下面就上代码。

    页面js中导出的方法:

    function exportExcel() {
    	var queryPara =  sy.serializeObject($('#agendaForm'));
    
    	var url = BASE_URL+"exportExcel.do?queryPara=" + JSON.stringify(queryPara) ;
    	window.location.href = url;
    }
    html页面的代码:

    <form id="agendaForm" name="agendaForm" method="post">
    
    				<table id="agendatable" class="table table-bordered">
    				
    				 <tr>
    	    	    <td align="right">开始时间  </td>
    	    	    <td  colspan="3">
    	    	    	<input id="aaId" name="aaId"  hidden/>
    	    	    	<input id="aiId" name="aiId" value="1" hidden/>
    	    	    	<input name="starttime"  value="starttime" style="width:400px;">
    	    	    </td>
    	    	  </tr>
    	    	   <tr>
    	    	    <td align="right">结束时间  </td>
    	    	    <td  colspan="3">
    	    	    	<input name="endtime"  value="endtime" style="width:400px;">
    	    	    </td>
    	    	  </tr>
    	    	   <tr>
    	    	    <td align="right">活动内容  </td>
    	    	    <td  colspan="3">
    	    	    	<input name="content" value="content" style="width:400px;">
    	    	   
    				</td>
    	    	  </tr>
    	    	  <tr>
    	    	    <td align="right">演讲嘉宾  </td>
    	    	    <td colspan="3"><input name="speaker"  value="speaker" style="width:400px;"></td>
    	    	   </tr>
    	    		</form>
    controller层

    @RequestMapping(value = "/exportExcel.do")
    	public void exportExcel(HttpServletRequest request,HttpServletResponse response) {
    	
    		String queryPara = request.getParameter("queryPara");
    		
    		JSONUtils.getMorpherRegistry().registerMorpher(
    				new DateMorpherEx(new String[] { "yyyy-MM-dd" },
    						(Date) null));
    		
    		JSONObject jo = JSONObject.fromObject(queryPara);
    		
    		ActivityAgenda activityAgenda  = (ActivityAgenda)JSONObject.toBean(jo,ActivityAgenda.class);
    		
    		/*if(jo.containsKey("time") && !StringUtils.isEmpty(jo.getString("time")))
    			activityAgenda.setTime(DateHandler.strToDate(jo.getString("time"), "yyyy-MM-dd"));*/
    		
    	      try {
    	    	  String excelFileName = new String((DateHandler.dateToStr(new Date(),"yyyyMMddhhmmss")+".xls").getBytes("gb2312"), "ISO8859-1" ) ;
    		      response.setContentType("octets/stream");
    		      response.addHeader("Content-Disposition", "attachment;filename="+excelFileName);
    //		     	  
    	         OutputStream out = response.getOutputStream();
    	         agendaService.exportExcel(activityAgenda, out);
    	         out.close();
    	         System.out.println("excel导出成功!");
    	      } catch (FileNotFoundException e) {
    	         // TODO Auto-generated catch block
    	         e.printStackTrace();
    	      } catch (IOException e) {
    	         // TODO Auto-generated catch block
    	         e.printStackTrace();
    	      }
    		
    	}
    service层:

    public void exportExcel(ActivityAgenda activityAgenda, OutputStream os) {
    		// TODO Auto-generated method stub
    		Map keyMap = new HashMap();
    		keyMap.put("queryQarameterSQL",this.setQueryQarameterSQL(activityAgenda));
    		
    		List<ActivityAgenda> list  = this.getListByKeyMap(keyMap);
    		
    		
    		ExportExcel<ActivityAgenda> exportExcel = new ExportExcel<ActivityAgenda>();
    		
    		exportExcel.exportExcel("导出议程信息", CnscecmsConst.ExcelConst.HEAD_AGENDA,CnscecmsConst.ExcelConst.FIELDNAMES_AGENDA, list, os,"yyyy-MM-dd");
    	}

    private String setQueryQarameterSQL(ActivityAgenda activityAgenda) {
    		// TODO Auto-generated method stub
    		String queryQarameterSQL = "AI_ID = " + activityAgenda.getAiId() +" ";
    		
    //		keyMap.put("activityId", activityAttendPersonsEx.getAiId());
    
    		if (!StringUtils.isEmpty(activityAgenda.getStarttime())) {
    
    			queryQarameterSQL += " and starttime like '%"
    			/*+ activityAgenda.getContent()*/ + "%' ";
    
    		}
    		if (!StringUtils.isEmpty(activityAgenda.getEndtime())) {
    
    			queryQarameterSQL += " and endtime like '%"
    			/*+ activityAgenda.getContent()*/ + "%' ";
    
    		}
    		if (!StringUtils.isEmpty(activityAgenda.getContent())) {
    
    			queryQarameterSQL += " and content like '%"
    					/*+ activityAgenda.getContent()*/ + "%' ";
    
    		}
    
    		if (!StringUtils.isEmpty(activityAgenda.getSpeaker())) {
    
    			queryQarameterSQL += " and speaker like '%"
    					/*+ activityAgenda.getSpeaker()*/ + "%' ";
    
    		}
    
    		if (!StringUtils.isEmpty(activityAgenda.getGuestIntroduction())) {
    
    			queryQarameterSQL += " and guest_Introduction like '%"
    					/*+ activityAgenda.getGuestIntroduction()*/ + "%' ";
    
    		}
    		return queryQarameterSQL;
    	}



    参数设置:

    public static final   String[] HEAD_AGENDA = {"Id","开始时间","结束时间","活动内容","演讲嘉宾","嘉宾介绍"};
    				
    public static final   String[] FIELDNAMES_AGENDA = {"aaId","starttime","endtime","content","speaker","guestIntroduction"};
    		
    exportExcel

     /**
        * 这是一个通用的方法,利用了JAVA的反射机制,可以将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上
        *
        * @param title
        *            表格标题名
        * @param headers
        *            表格属性列名数组
        * @param fieldNames
        *			定义需要导出的javabean的属性数组         
        * @param dataset
        *            需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的
        *            javabean属性的数据类型有基本数据类型及String,Date,byte[](图片数据)
        * @param out
        *            与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
        * @param pattern
        *            如果有时间数据,设定输出格式。默认为"yyy-MM-dd"
        */
       @SuppressWarnings("unchecked")
       public void exportExcel(String title, String[] headers,String[] fieldNames,
             Collection<T> dataset, OutputStream out, String pattern) {
          // 声明一个工作薄
          HSSFWorkbook workbook = new HSSFWorkbook();
          // 生成一个表格
          HSSFSheet sheet = workbook.createSheet(title);
          // 设置表格默认列宽度为15个字节
          sheet.setDefaultColumnWidth((short) 15);
        
          // 生成一个样式
          HSSFCellStyle style = workbook.createCellStyle();
          // 设置这些样式
          style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
          style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
          style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
          style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
          style.setBorderRight(HSSFCellStyle.BORDER_THIN);
          style.setBorderTop(HSSFCellStyle.BORDER_THIN);
          style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
          // 生成一个字体
          HSSFFont font = workbook.createFont();
          font.setColor(HSSFColor.VIOLET.index);
          font.setFontHeightInPoints((short) 12);
          font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
          
          // 把字体应用到当前的样式
          style.setFont(font);
          // 生成并设置另一个样式
          HSSFCellStyle style2 = workbook.createCellStyle();
          style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
          style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
          style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
          style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
          style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
          style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
          style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
          style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
          style2.setWrapText(true);//设置自动换行
          // 生成另一个字体
          HSSFFont font2 = workbook.createFont();
          font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
          // 把字体应用到当前的样式
          style2.setFont(font2);
         
          // 声明一个画图的顶级管理器
          HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
          // 定义注释的大小和位置,详见文档
          HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5));
          // 设置注释内容
          comment.setString(new HSSFRichTextString("可以在POI中添加注释!"));
          // 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容.
          comment.setAuthor("dean");
     
          //产生表格标题行
          HSSFRow row = sheet.createRow(0);
          for (short i = 0; i < headers.length; i++) {
             HSSFCell cell = row.createCell(i);
             
             cell.setCellStyle(style);
             HSSFRichTextString text = new HSSFRichTextString(headers[i]);
             cell.setCellValue(text);
          }
     
          //遍历集合数据,产生数据行
          Iterator<T> it = dataset.iterator();
          int index = 0;
          while (it.hasNext()) {
             index++;
             row = sheet.createRow(index);
             T t = (T) it.next();
             //利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
    //         Field[] fields = t.getClass().getDeclaredFields();
             
             for (short i = 0; i < fieldNames.length; i++) {
                HSSFCell cell = row.createCell(i);
                cell.setCellStyle(style2);
    //            Field field = fields[i];
                String fieldName = fieldNames[i];
                String getMethodName = "get"
                       + fieldName.substring(0, 1).toUpperCase()
                       + fieldName.substring(1);
                try {
                    Class tCls = t.getClass();
                    Method getMethod = tCls.getMethod(getMethodName,
                          new Class[] {});
                    Object value = getMethod.invoke(t, new Object[] {});
                    //判断值的类型后进行强制类型转换
                    String textValue = null;
    //              if (value instanceof Integer) {
    //                 int intValue = (Integer) value;
    //                 cell.setCellValue(intValue);
    //              } else if (value instanceof Float) {
    //                 float fValue = (Float) value;
    //                 textValue = new HSSFRichTextString(
    //                       String.valueOf(fValue));
    //                 cell.setCellValue(textValue);
    //              } else if (value instanceof Double) {
    //                 double dValue = (Double) value;
    //                 textValue = new HSSFRichTextString(
    //                       String.valueOf(dValue));
    //                 cell.setCellValue(textValue);
    //              } else if (value instanceof Long) {
    //                 long longValue = (Long) value;
    //                 cell.setCellValue(longValue);
    //              }
                    if (value instanceof Boolean) {
                       boolean bValue = (Boolean) value;
                       textValue = "男";
                       if (!bValue) {
                          textValue ="女";
                       }
                    } else if (value instanceof Date) {
                       Date date = (Date) value;
                       SimpleDateFormat sdf = new SimpleDateFormat(pattern);
                        textValue = sdf.format(date);
                    }  else if (value instanceof byte[]) {
                       // 有图片时,设置行高为60px;
                       row.setHeightInPoints(60);
                       // 设置图片所在列宽度为80px,注意这里单位的一个换算
                       sheet.setColumnWidth(i, (short) (35.7 * 80));
                       // sheet.autoSizeColumn(i);
                       byte[] bsValue = (byte[]) value;
                       HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0,
                             1023, 255, (short) 6, index, (short) 6, index);
                       anchor.setAnchorType(2);
                       patriarch.createPicture(anchor, workbook.addPicture(
                             bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));
                    } else{
                       //其它数据类型都当作字符串简单处理
                       textValue = value == null?"":value.toString();
                    }
                    //如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成
                    if(textValue!=null){
                       Pattern p = Pattern.compile("^//d+(//.//d+)?$");  
                       Matcher matcher = p.matcher(textValue);
                       if(matcher.matches()){
                          //是数字当作double处理
                          cell.setCellValue(Double.parseDouble(textValue));
                       }else{
                          HSSFRichTextString richString = new HSSFRichTextString(textValue);
                          HSSFFont font3 = workbook.createFont();
                          font3.setColor(HSSFColor.BLUE.index);
                          richString.applyFont(font3);
                          cell.setCellValue(richString);
                       }
                    }
                } catch (SecurityException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (NoSuchMethodException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } finally {
                    //清理资源
                }
             }
     
          }
          try {
             workbook.write(out);
          } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
          }
     
       }








    展开全文
  • 从网页导入表格到excel:打开Excel数据从网页导入,贴网址。 分两步,比较麻烦: 1. 根据关键字搜索需要的列:公式 =IF(COUNTIF(B2,"*"&"关键字"&"*")=1,1,0) B2是要搜索的单元格,要固定某行或者列在对应标号...
  • 本节课将为您演示,如何将网页中的表格,导入到工作表中。首先点击数据选项卡,显示数据功能面板。 2. 接着点击[获取外部数据]按钮,打开[获取外部数据]面板。 3. 在弹出的获取外部数据选项面板中,选择第二个[自...
  • 怎么能这个网页中直接获取到数据,并写入数据库中,只要能获取并写成入TXT文本中也行,我直接整理一下数据也可以。 http://www.inewhope.com/baojia.php 我现在的做法是 先手动打开EXCEL刷新数据 保存并关闭...
  • 1. Excel数据导入

    2019-08-12 21:57:43
    2. 从网页快速导入数据 步骤  ①单击菜单栏--数据--获取外部数据--自网站。  ②弹出新建WEB查询界面,输入网站地址,转到相应页面,然后点击导入按钮。  ③等待下载,具体时间以你网速而定。 ...
  • Excel自动获取网页数据

    万次阅读 2010-04-09 10:29:00
    利用Excle可以自动获取网页数据,譬如从网页中自动获取基金净值数据,取得所关注基金的净值,列出当日涨幅最高的基金。本文用简单的Web查询结合Excel公式的方法完成上述需求,当然也可以用VBA编写功能更加丰富的自动...
  • Excel2019(Office 2019)导入数据网页(文本txt)无法显示以前样式的问题(终极解决方案) 问题描述: 解决办法: 找到解决办法了,excel有个疑问解答的。 注意: “文本导入向导” 是旧功能,可能需要启用。 如果...
  • Excel导出数据的帮助类 ExcelHelper 导出到文件,导出一部分集合,DataTable中操作等 ExportExcel 主要功能如下1.将整个网页导出来Excel 2.将GridView数据导出Excel GridViewExport 主要功能:将整...
  • 原因:excel数据格式有问题 解决办法一:把x、y的数据格式换成两位小数 ...数据本身出现问题,比如从网页上直接复制的数据有负号,可能和实际的负号不同,替换一下即可,如“—”替换为“-” ...
  • matlab导入excel代码Visuo服务器 这是为,和之间(新加坡)开发的服务器的简化版本的源代码。 它收集和存储来自天空成像仪,气象站和无线电探空仪的数据,并提供一个Web界面,用于可视化和下载登录机制背后的数据。 ...
  • 在Java中,将数据导入Excel中时,一般都会想到用jxl或poi等工具。这些工具提供格式化功能,功能很强大...这里是从网页上,将数据库的数据导入excel一例://将表中数据导入excelpublic void exportToExcel(OutputStrea
  • matlab导入excel代码 数据科学家的工作市场和技能要求 求职者通常想知道他们对某些类型的工作需要什么样的技能,以及就业市场很大。 因此,创建一个显示给定作业的空间分布的系统很有用。 而且,给定工作所需的技能...
  • EXCEL数据分析

    2019-03-25 09:19:55
    EXCEL数据分析 1.EXCEL数据获取 ①数据导入 ...从网页加载 可获取大多数网站网页数据,需进一步进行数据清洗 ②数据快速录入 用于快速填充的自定义列表 填充柄快速填充+[ 右键菜单辅助] ...
  • Excel2016超绚功能—web端获取数据

    千次阅读 2017-08-23 13:41:43
    在平常办公中,我们有时候需要将网页数据导入到... 先看例子,我们需要将下面网页数据导入excel中进行数据分析 2. 首选准备excel2016,如果是excel2013,请在微软官网上下载power query,安装后,会出现在excel2013
  • (先第二步开始,如果第二步不行再用这一步)首先在桌面新建一个文本文件(以.txt结尾的文本文件),选中网页的表格后复制,然后粘贴在新建的文本文件中,显示为: S.No. CQL数据类型 用法 2. boolean 用于表示布尔...
  • 先导出 html 语言,再在浏览器中用 文件 - 用 word 编辑 或是 -用 Micro-Visual Studio 2008 编辑:word 编辑先导入到 word 中,再用 / 或是 空格键 什么的处理下,再在 excel 中把复制进来的文件内容选定,数据-...
  • #导入数据库 import requests import pandas as pd from selenium import webdriver import time import pyperclip from selenium.webdriver.common.keys import Keys #碱基位置参数信息提取 d1 = pd.read_excel('D...
  • Java 使用 Poi 导入 Excel 通用(一)

    千次阅读 2018-12-07 15:58:35
    上一篇【Java实现从网页上传导入excel数据到数据库】一文中利用poi 导入excel工具只是一个简版,今天利用反射机制重新写一个通用excel导入工具类,可供大家参考使用 实现思路: 利用java反射机制把excel读取出来...
  • 这里导入数据指的是Excel表格的数据哈,不要误解成别的数据了,这次呢就分析分析如何就一张Excel表格成功导入到数据库中并显示在网页上。 ① 引用外部文件 ASP.NET.MVC创建好的时候本身是不自带关于导入Excel表格...
  • SchemaMapper是一个数据集成类库,可促进具有不同模式定义的外部源进行数据导入过程。 它通过编写几行代码代替了创建许多集成服务包。 在源和目标之间映射列之后,它将来自不同数据源的表格数据导入到具有用户...
  • Excel清理数据的十大方法

    千次阅读 2018-05-16 16:12:16
    清理数据的基础知识你并不一定始终可控制数据库、文本文件或网页等外部数据导入数据格式和类型。通常需要先清理数据,才能分析数据。幸运的是,Excel 提供许多功能,可帮助用户获取所需精确格式...
  • 任务8: EXCEL基本操作之导入外部数据 任务9: EXCEL基本操作之设置单元格格式、条件格式 任务10: EXCEL基本操作之保护工作表、高级筛选 任务11: 数据验证 任务12: 合并计算之模拟运算 任务13: 合并计算之去重 ...
  • 本文为学习笔记的一些分享,主要是将从网页上进行数据的提取,同时进行保存 导入模块 import requests from lxml import etree import json import re import openpyxl 数据提取 url = ...
  • 从网页爬下来的大量数据需要清洗? 成堆的科学实验数据需要导入 Excel 进行分析? 有成堆的表格等待统计? 作为人生苦短的 Python 程序员,该如何优雅地操作 Excel? 得益于前人的辛勤劳作,Python 处理 Excel ...
  • 技巧72 在导入数据时创建参数查询 第三篇 数据整理和编辑 第8章 数据选定和处理 技巧73 选取单元格区域的高招 技巧74 轻松选择“特殊”区域 技巧75 快速插入多个单元格 技巧76 快速改变行列的次序 ...
  • 1、建表并导入数据 2、发布为网页 3、生成链接目录页面 整个过程可以不用键盘输入,应该不用3分钟。 excel部分数据内容: 开始。 1、建表与导入数据 control+I快捷键,或者项目——自动建表&导入外部...
  • EXCEL做回测的基本框架

    千次阅读 2019-11-28 12:03:56
    为了便于大家理解,我把通过EXCEL做的量化回测框架整理成一个...第二步:导入数据 数据来源的几种方式: 股票软件中导出数据; 财经网站下载CSV格式数据; 使用EXCEL直接爬取网页上的数据; 通过Tushare或Quand...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 237
精华内容 94
关键字:

excel从网页导入数据