精华内容
下载资源
问答
  • Java POI 超简洁的导出excel以及复制某一路径下的所有文件到指定路径 package com.qiya.springboot.controller; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; ...

    Java POI 超简洁的导出excel到指定路径 以及复制导出路径下的所有文件的excel到指定路径

    package com.qiya.springboot.controller;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFDataFormat;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    import org.apache.poi.hssf.usermodel.HSSFRichTextString;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.BorderStyle;
    import org.apache.poi.ss.usermodel.FillPatternType;
    import org.apache.poi.ss.usermodel.HorizontalAlignment;
    import org.apache.poi.ss.usermodel.IndexedColors;
    import org.apache.poi.ss.usermodel.VerticalAlignment;
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class ExportController {
    	// 下载文件的存放路径
    	private static final String rootFilePath = "F:/exportByJava/";
    	
    	@Autowired
    	private JdbcTemplate jdbcTemplate;
    	
    	/**
    	 * @return expResult
    	 * "/" == "\\"
    	 * 
    	 */
    	@RequestMapping("/exportUsers")
    	public boolean exportUsers(HttpServletRequest request, HttpServletResponse response) {
    		boolean expResult = false;
    		try {
    			HSSFWorkbook workbook = new HSSFWorkbook();
    			HSSFSheet sheet1 = workbook.createSheet("sheet1");
    			List<Map<String, Object>> usersList = jdbcTemplate
    					.queryForList("SELECT u.id,u.userName,u.userAge,u.userAddress FROM user u");
    			// 设置列宽
    			sheet1.setColumnWidth(0, 30*256);
    			// 合并单元格   参数说明:1:开始行 2:结束行  3:开始列 4:结束列
    			sheet1.addMergedRegion(new CellRangeAddress(0,0,0,3));
    			
    			String[] headers = {"ID", "用户名", "年龄", "地址"};
    			HSSFCellStyle style = workbook.createCellStyle();
    			style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm:ss"));
    			HSSFFont font = workbook.createFont();
    			font.setBold(true);
    			style.setFont(font);
    			style.setAlignment(HorizontalAlignment.CENTER);
    			style.setVerticalAlignment(VerticalAlignment.CENTER);
    			// 下两行共同构成了背景色
    			style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
    			style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    			style.setBorderTop(BorderStyle.THIN);
    			
    			// 第一行
    			HSSFRow row0 = sheet1.createRow(0);
    			HSSFCell row0cell0 = row0.createCell(0);
    			HSSFRichTextString text = new HSSFRichTextString("用户表");
    			row0cell0.setCellValue(text);
    			row0cell0.setCellStyle(style);
    			
    			// 第二行
    			HSSFRow row1 = sheet1.createRow(1);
    			for(int i=0;i<headers.length;i++){
    				HSSFCell cell = row1.createCell(i);
    				HSSFRichTextString text2 = new HSSFRichTextString(headers[i]);
    				cell.setCellValue(text2);
    				cell.setCellStyle(style);
    			}
    			
    			// 第三行及以后
    			int rowNum = 2;
    			for(Map<String, Object> uMap : usersList){
    				int rowNumCellN = 0;
    				HSSFRow rowRowNum = sheet1.createRow(rowNum);
    				for(String uMapKey : uMap.keySet()) {
    					for(;rowNumCellN < uMap.size();) {
    						rowRowNum.createCell(rowNumCellN).setCellValue(String.valueOf(uMap.get(uMapKey)));
    						rowNumCellN++;
    						break;
    					}
    				}
    				rowNum++;
    			}			
    			SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
    			SimpleDateFormat formatToday = new SimpleDateFormat("yyyyMMdd");
    			String date = format.format(new Date());			
    			String fileName = date+"_用户表.xls";
    			isDirExist(rootFilePath+formatToday.format(new Date()));
    			FileOutputStream outputStream = new FileOutputStream(rootFilePath+formatToday.format(new Date())+"/"+fileName);
    			workbook.write(outputStream); // 写入磁盘
    			outputStream.close();
    			workbook.close();
    			expResult = true;
    		} catch (Exception e) {
    			expResult = false;
    			e.printStackTrace();
    		}
    		return expResult;
    	}
    	
    	/**
    	 * @return 针对window.locatin.hef访问导出方法无法接收导出结果,
    	 * 		此方法用来调用exportUsers以显示导出结果,前台以ajax调用此方法
    	 * */
    	@PostMapping("/showExpRes")
    	public Map<String, Object> showExpRes(HttpServletRequest request,HttpServletResponse response) {
    		boolean res = exportUsers(request, response);
    		Map<String, Object> map = new HashMap<>();
    		map.put("res", res);
    		return map;
    	}
    	
    	/**
    	 * @return map
    	 * */
    	@PostMapping("/mvFile")
    	public Map<String, Object> mvFile(HttpServletRequest request) {
    		// windows中是反斜杠,java中是正斜杠  
    		// 最好不要用get方式传带路径的参数,避免很多错误
    		String fileDir = request.getParameter("fileDir");
    		System.out.println(fileDir);
    		Map<String, Object> resMap = new HashMap<>();
    		SimpleDateFormat formatToday = new SimpleDateFormat("yyyyMMdd");
    		// 待移动的文件夹
    		File file = new File(rootFilePath+formatToday.format(new Date()));
    		File[] fileArr = file.listFiles();
    		if(fileArr == null) {
    			return null;
    		}
    		try {
    			for(File mvfile: fileArr) {
    				FileInputStream in = new FileInputStream(mvfile);
    				FileOutputStream out = new FileOutputStream(new File(fileDir+"/"+mvfile.getName()));
    				byte[] buff = new byte[1024]; // 1kb = 1024Byte
    				System.out.println("移动的文件:"+fileDir+"/"+mvfile.getName());
    				int n = 0;
    				while((n = in.read(buff)) != -1) {
    					out.write(buff, 0, n);
    				}
    				out.flush();
    				in.close();
    				out.close();
    			}
    			resMap.put("success", "true");
    		} catch (Exception e) {
    			resMap.put("success", "false");
    			e.printStackTrace();
    		}		
    		return resMap;
    	}
    	
    	/**
    	 * @param 当前文件夹路径
    	 * */
    	public void isDirExist(String fileDir) {
    		File file = new File(fileDir);
    		if(!file.exists()) {
    			file.mkdir();
    		}
    	}
    	
    } 
    
    

    html只用看导出部分就行。。。

    <html>
    <head>
    <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="css/bootstrap-table.min.css">
    <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
    <script type="text/javascript" src="js/jquery-3.1.1.min.js"></script>
    <!-- popper.min.js 用于弹窗、提示、下拉菜单 -->
    <script type="text/javascript" src="js/bootstrap.min.js"></script>
    <script type="text/javascript" src="js/bootstrap-table.js"></script>
    <script type="text/javascript" src="js/bootstrap-table-zh-CN.min.js"></script>
    
    </head>
    <body>
    <div class="container">
    	
    	<!-- 信息框 -->	
    	<div class="form-group">
    		<button class="btn btn-success" id="heroInfo" 
    		title="详细信息" data-content="女 23岁" data-placement="bottom"></button>
    	</div><!-- 结束信息框 -->
    	
    	
    	<div id="toolbar" class="btn-group">
    		<button id="btn_add" type="button" class="btn btn-default" onclick="openAddModel()" >
                	<span class="glyphicon glyphicon-plus" aria-hidden="true"></span>新增
             </button>
             <button id="btn_edit" type="button" class="btn btn-default" onclick='updateUser()'>
                 <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
             </button>
             <button id="btn_delete" type="button" class="btn btn-default" onclick='delUser()'>
                 <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
             </button>
             <button type="button" class="btn btn-default" onclick="exportUsers()">            
                 <span class="glyphicon glyphicon-export" aria-hidden="true"></span>导出
             </button>             
        </div>
        <div style="float:right;margin-top: 10px;">
             <span><input type="text" id="unameCon" placeholder="请输入用户名进行查找(输入全名搜索速度更快哦!)"
             	style="width:300px; height: 34px;font-size: 12px;vertical-align:middle;border-radius:  4px;border: solid 1px #D0CDC7;" />
             </span>
             <button id="btn_search" type="button" class="btn btn-default" style="margin-left:0px" onclick="searchByCon()">
    	         	<span class="glyphicon glyphicon-search" aria-hidden="true"></span>搜索
    	     </button>
             	<button id="btn_reset" type="button" class="btn btn-default">
             	<span class="glyphicon glyphicon-refresh" aria-hidden="true"></span>重置
             </button> 
         </div> 
    	         
        <table id="allUsers"></table>
    	
    	<!-- 修改单个用户模态框 -->
    	<div class="modal fade" id="openUserInfoModal" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    		<div class="modal-dialog">
    			<div class="modal-content">
    				<div class="modal-header">
    					 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
    					 <h4 class="modal-title" id="myModalLabel">用户信息</h4>
    				</div>
    				<div class="modal-body">
    					<div class='table table-condensed'>
    						<div style="display:none;"><input type="text" name="id" id="uid" /></div>
    						<div class="form-group">用户名:<input type="text" name="name" id="unameModal" /></div>
    						<div class="form-group" id="unaemErrorMsgModal"></div>
    						<div class="form-group">&nbsp;&nbsp;&nbsp;&nbsp;龄:<input type="number" name="age" id="uageModal" /></div>
    						<div class="form-group" id="uageErrorMsgModal"></div>
    						<div class="form-group">&nbsp;&nbsp;&nbsp;&nbsp;址:<input type="text" name="address" id="uaddressModal" /></div>
    						<div class="form-group" id="uaddressErrorMsgModal"></div>
    					</div>
    				</div>
    				<div class="modal-footer">
    					<button type="button" class="btn btn-default" onclick="saveInfo()">保存</button>
    	                <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
                	</div>
    			</div>
    		</div>
    	</div> <!-- 结束单个用户信息框修改 -->
    </div>
    <div>
    	<button class="btn btn-info" onclick="mvFile()">移动excel到指定目录</button>
    	<input type = "text" id="filePath" style="width:300px; height: 34px;font-size: 12px;vertical-align:middle;border-radius:  4px;border: solid 1px #D0CDC7;" placeholder = "请填写存放路径"/>
    	<div id="showUserByPermission" style="width: 500px; margin-left: 100px;"></div>
    </div>
    <script>
    	$(function () {
    		doSearch();
    		$("#heroInfo").popover({
    			trigger: 'focus'
    		});
    	});
    	
    	function delUser(){
    		// 获取curPage=>redis
    		var page = $("#allUsers").bootstrapTable("getPage");
    		var users = $("#allUsers").bootstrapTable('getSelections');
    		if(users.length==0){
    			alert("请选择要删除的行!");
    			return;
    		}
    		var ids = "";
    		for(var i=0;i<users.length;i++){
    			if(i==users.length-1){
    				ids += users[i].id;
    			}else{
    				ids += users[i].id+"#";
    			}			
    		}
    		$.ajax({
    			url:"/nianyu/user/delUser?curPage="+page.pageNumber,
    			type:"post",
    			dataType:"json",
    			data:{
    				"ids":ids
    			},
    			success:function(data){		
    				var delFailCount = data.delFailCount;
    				var delSuccessCount= data.delSuccessCount;
    				var n = delSuccessCount-delFailCount;
    				if(delSuccessCount>0){
    					alert("删除成功!"+"删除成功"+delSuccessCount+"条!"+"删除失败"+delFailCount+"条!"); 
    					$("#allUsers").bootstrapTable('refresh');
    				}else{
    					alert("删除失败!"+"删除成功"+delSuccessCount+"条!"+"删除失败"+delFailCount+"条!");
    					$("#allUsers").bootstrapTable('refresh');
    				}
    			}
    		});
    		
    	}
    	
    	function updateUser(){
    		var users = $("#allUsers").bootstrapTable('getSelections');
    		if(users.length==0){
    			alert("请选择要修改的行!");
    			return;
    		}else if(users.length>1){
    			alert("不能一次修改多行!");
    			return;
    		}else{
    			$('#openUserInfoModal').modal("show");
    			// 判断是否进入修改的参数,很重要,困扰了两个多小时
    			istate = 0;
    			$.ajax({
    				url:"/nianyu/user/queryUserInfo?id="+users[0].id,
    				type:"post",
    				dataType:"json",
    				success:function(data){							
    					var user = data.res;
    					$('#uid').val(user.id);
    					$('#unameModal').val(user.userName);
    					$('#uageModal').val(user.userAge);
    					$('#uaddressModal').val(user.userAddress);
    				}
    			});
    		}		
    		
    	}
    	
    	function openAddModel(){
    		// 判断是否进入新增的参数,很重要,困扰了两个多小时
    		istate = 1;
    		$('#unameModal').val("");
    		$('#uageModal').val("");
    		$('#uaddressModal').val("");
    		$('#openUserInfoModal').modal("show");
    	}
    	
    	function saveInfo(){
    		// 获取curPage=>redis
    		var page = $("#allUsers").bootstrapTable("getPage");
    		$("#unaemErrorMsgModal").empty();
    		$("#uageErrorMsgModal").empty();
    		$("#uaddressErrorMsgModal").empty();
    		var uid = $('#uid').val();
    		var unameModal = $('#unameModal').val();
    		
    		var uageModal = $('#uageModal').val();
    		var uaddressModal = $('#uaddressModal').val();
    		if(!unameModal){
    			str = "<div class='alert alert-danger'>错误!用户名不能为空!</div>";
    			$("#unaemErrorMsgModal").append(str); 
    			return;
    		}else if(!uageModal){
    			str = "<div class='alert alert-danger'>错误!年龄不能为空!</div>";
    			$("#uageErrorMsgModal").append(str);
    			return;
    		}else if(!uaddressModal){
    			str = "<div class='alert alert-danger'>错误!地址不能为空!</div>";
    			$("#uaddressErrorMsgModal").append(str);
    			return;
    		}		
    		if(istate==1){
    			$.ajax({
    				url:"/nianyu/user/addUser?curPage="+page.pageNumber,
    				type:"post",
    				dataType:"json",
    				data:{
    					"userName":unameModal,
    					"userAge":uageModal,
    					"userAddress":uaddressModal
    				},
    				success:function(data){						
    					$("#allUsers").bootstrapTable('refresh');
    					$('#openUserInfoModal').modal('hide');
    					if("success"==data.res){
    						alert("保存成功!");
    					}else{
    						alert("保存失败!")
    					}
    				}
    			});
    		}else{			
    			$.ajax({
    				url:"/nianyu/user/updateUserInfo?curPage="+page.pageNumber,
    				type:"post",
    				dataType:"json",
    				data:{
    					"id":uid,
    					"userName":unameModal,
    					"userAge":uageModal,
    					"userAddress":uaddressModal		
    				},
    				success:function(data){	
    					$('#uid').val('');
    					$("#allUsers").bootstrapTable('refresh');
    					$('#openUserInfoModal').modal('hide');
    					if("success"==data.res){
    						alert("修改成功!");
    					}else{
    						alert("修改失败!")
    					}
    				}
    			});
    		}
    		
    	}
    	
    	// javascript加载bootstraptable
    	function doSearch(){
    		$("#allUsers").bootstrapTable({ 	// 对应table标签的id
    		      url: "/nianyu/user/queryUserInfoByPageRedis", 		  // 获取表格数据的url
    		      method: 'get',                      //请求方式(*)
    		      toolbar: '#toolbar',                //工具按钮用哪个容器
    		      striped: true,                      //是否显示行间隔色
    		      cache: false,                       //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
    		      pagination: true,                   //是否显示分页(*)
    		      sortable: false,                     //是否启用排序
    		      sortOrder: "asc",                   //排序方式
    		      sidePagination: "server",           //分页方式:client客户端分页,server服务端分页(*)
    		      pageNumber:1,                       //初始化加载第一页,默认第一页
    		      pageSize: 10,                       //每页的记录行数(*)
    		      pageList: [10],        //可供选择的每页的行数(*)
    		      search: false,                       //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大
    		      strictSearch: false,
    		      showColumns: false,                  //是否显示所有的列
    		      showRefresh: false,                  //是否显示刷新按钮
    		      minimumCountColumns: 2,             //最少允许的列数
    		      clickToSelect: true,                //是否启用点击选中行
    		      height: 543,                        //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度
    		      uniqueId: "ID",                     //每一行的唯一标识,一般为主键列
    		      showToggle:false,                    //是否显示详细视图和列表视图的切换按钮
    		      cardView: false,                    //是否显示详细视图
    		      detailView: false,                   //是否显示父子表	
    		      queryParams: function (params) {
    		    	  return {
    		              pageSize: params.limit, // 每页要显示的数据条数
    		              offset: params.offset, // 每页显示数据的开始行号
    		              sort: params.sort, // 要排序的字段
    		              sortOrder: params.order, // 排序规则
    		              userName:$("#unameCon").val(), 
    		          }
    		      },
    		      
    		      columns: [
    		          {
    		              checkbox: true, // 显示一个勾选框
    		              align: 'center' // 居中显示
    		          }, {
    		              field: 'number', 
    		              title: '序号',
    		              align: 'center', 
    		              valign: 'middle',
    		              formatter: function(value, row, index){
    		            	  // 在bootstrap-table.js 中增加getPage(),
    		            	  var page = $("#allUsers").bootstrapTable("getPage");
    		  				  return page.pageSize * (page.pageNumber - 1) + index + 1;
    		              }
    		          }, {
    		              field: 'id', 
    		              title: 'ID', // 表格表头显示文字
    		              align: 'center', // 左右居中
    		              valign: 'middle' // 上下居中
    		          }, {
    		              field: 'userName', // 返回json数据中的name
    		              title: '用户名', // 表格表头显示文字
    		              align: 'center', // 左右居中
    		              valign: 'middle' // 上下居中
    		          }, {
    		              field: 'userAge',
    		              title: '年龄',
    		              align: 'center',
    		              valign: 'middle'
    		          }, {
    		              field: 'userAddress',
    		              title: '地址',
    		              align: 'center',
    		              valign: 'middle'
    		          }/*  {
    		              title: "操作",
    		              align: 'center',
    		              valign: 'middle',
    		              width: 160, // 定义列的宽度,单位为像素px
    		              formatter: function (value, row, index) {
    		                  return '<button class="btn btn-primary btn-sm" onclick="del(\'' + row.stdId + '\')">删除</button>';
    		              }
    		          } */
    		      ],
    		      onLoadSuccess: function(){  //加载成功时执行
    		            console.info("加载成功");
    		      },
    		      onLoadError: function(){  //加载失败时执行
    		            console.info("加载数据失败");
    		      }
    
    		})
    		
    	}	
    	
    	function exportUsers(){
    //		window.location.href = "/nianyu/exportUsers";
    		$.ajax({
    			url:"/nianyu/showExpRes",
    			type:"post",
    			dataType:"json",
    			success:function(data){	
    				if(data.res) {
    					alert("导出成功!");
    				}else {
    					alert("导出失败!");
    				}
    			}
    		});
    	}
    	
    	function searchByCon(){
    		if($('#unameCon').val().length > 0 ){
    			$("#btn_edit").attr('disabled',true);
    			$('#btn_delete').attr('disabled',true);
    			$("#allUsers").bootstrapTable('refresh');
    		}else{
    			$("#btn_edit").attr('disabled',false);
    			$('#btn_delete').attr('disabled',false);
    			$("#allUsers").bootstrapTable('refresh');
    		}
    		
    	}
    	
    	function mvFile() {
    		var fileDir = $("#filePath").val();
    		$.ajax({
    			url: "/nianyu/mvFile",
    			type:"post",
    			dataType:"json",
    			data:{
    				"fileDir":fileDir
    			},
    			success:function(data){
    				if("true" == data.success) {
    					alert("移动成功!");
    				}else {
    					alert("移动失败!");
    				}
    				
    			}
    			
    		})
    	}
    	
    </script>
    </body>
    </html>
    
    
    展开全文
  • KETTLE中Excel输入

    2020-11-11 23:52:18
    双击Excel输入,进入到参数的配置界面 这配置页面我们可以看到有Excel文件的版本选项,和路径选项,下方的正则表达式,可以用来匹配一个路径下所有符合条件的文件,这个看个人的需求使用,选择表格类型的时候...

    KETTLE中Excel表输入

    1. 在选定好Excel文件输入功能模块后,我们将其拖入到转换页面当中
      在这里插入图片描述
    2. 双击Excel输入,进入到参数的配置界面
      在这里插入图片描述
      在这配置页面我们可以看到有Excel文件的版本选项,和路径选项,下方的正则表达式,可以用来匹配一个路径下所有符合条件的文件,这个看个人的需求使用,在选择表格类型的时候一定要选择正确,不然是读不到文件的。
    3. 在填写完表格类型、文件或目录后,点击增加即可,就会在选择的文件那里出现你所要操作的表格

    1. 完成上步操作后,在点击上方的工作表,然后点击获取表名,会出现如下界面
      在这里插入图片描述
      然后我们点击Sheet1即可,如果你的Excel表中有多个Sheet页就根据个人的需求进行选择,选择好Sheet页后,点击确定,按照上图中的顺序进行操作。
    2. 在获取到工作表后我们要获取到字段名,字段名一般就是Excel表格的第一行数据,每个单元格的数据作为字段名字。
      在这里插入图片描述
    3. 表数据和预览数据,第一个图Excel中的数据,第二个图为预览的数据
      在这里插入图片描述
      在这里插入图片描述
      可以看到预览的数据和Excel中的数据是保持一致的,到这里就证明我们的Excel输入的配置没有问题了,可以进行后续的相关操作到了。
    展开全文
  • 运用python语言,由用户输入文件所在路径,获取该指定路径中文件及文件夹,并写入到excel表格中
  • EXCEL中调用python实现输入输出 python对excel的支持已经做的非常棒, 但是工作难免遇到横向部门沟通问题, 并不是所有人都会使用python做数据处理, 下面用实际案例演示excel中如何调用python, 让你的excel变得智能...

    EXCEL中调用python实现输入输出

    python对excel的支持已经做的非常棒, 但是工作中难免遇到横向部门沟通问题, 并不是所有人都会使用python做数据处理, 下面用实际案例演示excel中如何调用python, 让你的excel变得智能化, 并与其他人分享!

    要求:

    excel中实现, 输入一个汽车ID, 点击按钮后自动获取汽车之家全国所有经销商的车型最低报价

    效果:

    右侧蓝框处输入车型ID, 点击"开始查询"自动返回全国所有经销商最低报价
    在这里插入图片描述

    分析:

    1. excel中输入ID, 传入python, 在python中爬取汽车之家上所需信息, 并返回excel
    2. 利用到xlwings库

    实现:

    第一步:

    安装xlwings库:
    pip install xlwings
    安装excel插件:
    xlwings addin install

    此时打开excel在选项卡中能看到xlwings标签
    在这里插入图片描述

    第二步:

    根据要求编写爬虫 getprice.py, 这里不详细展开;

    第三步:

    填写xlwings选项卡
    在这里插入图片描述
    interpreter:编译器, 填入python.exe路径
    PYTHONPATH:py文件路径, 填入上一步完成的getprice.py文件路径

    第四步:

    excel中alt + F11 调出VBA面板, 写宏:

    Sub getPrice()
    	RunPython ("from getprice import getprice; getprice()")
    End Sub
    

    在这里插入图片描述
    工具——引用 勾选xlwings在这里插入图片描述

    第五步:

    插入按钮:
    在这里插入图片描述
    右键单击按钮并指定宏:
    在这里插入图片描述
    这里我写了两个宏, 一个用于清空数据, 一个用于获取数据:
    在这里插入图片描述
    最后点击按钮测试,:
    在这里插入图片描述
    在右侧蓝框处输入信息, python自动运行并返回数据在excel中, 一键搞定需要整理的数据, excel成为了python的GUI…再也不用加班了!

    展开全文
  • Excel——快速获取文件路径

    千次阅读 2020-07-26 23:58:33
    (不包含文件名称与路径)INFO函数获取Excel当前文件路径任意单元格中输入公式=INFO("directory")即可返回当期工作簿电脑的存储路径。 (获取多个文件路径,通过系统实现,仅限于Windows)选中想要获取...
    1. (包含文件名称与格式)CELL函数获取Excel当前文件路径可以帮助我们查看当前Excel工作簿的路径:在任意空白单元格输入公式:【=CELL("filename")】,即可返回当期工作簿在电脑的存储路径。

    2. (不包含文件名称与路径)INFO函数获取Excel当前文件路径:在任意单元格中输入公式=INFO("directory")即可返回当期工作簿在电脑的存储路径。

    3. (获取多个文件路径,通过系统实现,仅限于Windows)选中想要获取路径的文件,选择系统左上方的【主页】——【复制路径】,然后在任意单元格中直接【Ctrl + V】就能显示复制的所有路径

    4. (获取多个文件路径,通过系统实现,适合任意系统)选中想要获取路径的文件,按住【Shift】键,右键选择【复制为路径】,然后在任意单元格中直接【Ctrl + V】就能显示复制的所有路径

     

    展开全文
  • 如何通过python快速输出数据库数据到excel扩展库 xlrd 读excle xlwt 写excle 直接度就能下载 下载后使用 import xlrd 就可excle文件了 打开文件: xls = xlrd.open_workbook(fileName)python怎么从excel中读取数据?...
  • 二、一劳永逸的办法:新建文件时,执行如下操作:工具——选项——拼写检查——自动更正选项——键入时自动套用格式——以键入至替换——(取消)internet及网络路径替换为超链接如果是word里面进行如下操作:...
  • 某一天,需要将路径下的文件名以Excel的形式发给同事,有56个,一个一个复制粘贴到Excel就太麻烦了,所以想到用python实现这个小功能。 工具用PyCharm,不需要手动新建excel,用python生成 需要导入第三方库:os和...
  • poi通过文件路径获取excel数据

    千次阅读 2018-12-14 12:53:01
    由于EXCEL是由前端直传到阿里云,所以只有一个上传后的文件路径。对于先下载读取删除的方式觉得十分耗时且无用,所以试图直接根据URL地址来读取流,生成EXCEL对象并读取数据。代码如下: public static void ...
  • clc;clear all;[numeric_data text_data rawdata] = xlsread('aaa.xls');headings = rawdata(1,:) % get headings fromfirst row�ta = cell2mat(rawdata(2:end,:)) % get numericdata from row 2 to ...读取Excel文...
  • 2、 这种输入方式,适合后台输出,不需要打开EXCEL文件,不需要选择输出路径,只是后台自己默默的记录EXCEL文件。 [cpp] CString sFile,sPath; CString strChuType = "-"; CString strChuStatus = "-"; ...
  • Ext3导出Excel,指定目标文件路径。。 Ext的Grid的bbar, 点击“导出”, 弹出一个窗口。 窗口如下所示: 目标文件:(一个文本框) 一个“浏览”按钮。 导出 取消 我想实现,...
  • KETTLE——EXCEL输入

    千次阅读 2019-01-23 20:42:37
    KETTLE表输出使用KETTLE表输出KETTLE EXCEL输入功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右...
  • 上面的语句,Path是新的缺省文件夹名称。Path可以包含驱动器名称。如果Path没有包括驱动名称,那么缺省文件夹将会更改为当前驱动。当前驱动不变。 假设缺省文件夹为“C:\DOS”,语句: ChDir "D:\MyFiles" 将...
  • Excel/VBA-学习路径图-Notepad++

    千次阅读 2017-09-08 21:35:36
    Excel/VBA 学习路径图-notepad++
  • 1264145713CAD外部参照怎样将绝对路径改为相对路径,不用重新可以的,用XR命令,弹出“外部参照管理器” 下面的“外部参照于”的框中输入相对对路径后“确定”->"重载“即可。 如外部参照名路径为”D:图纸\图...
  • kettle动态设置输入文件路径

    千次阅读 2015-06-27 10:18:34
    最好定义到数据库。 我的这个例子就是从数据库读取文件路径,文本文件的路径使用变量: 下边是一些截图。代码可以下载 [list] (1) [img]http://dl2.iteye.com/upload/attachment/0109/7935/444da46b-f059...
  • 转换,核心对象选择输入文件夹Excel输入,鼠标拖拽右侧空白处。 三、双击该Excel输入组件 1.文件选项卡,选择Excel使用的表格类型,如果类型选的不对,后面预览的时候就不会出来预览数据。 2.点击浏览...
  • 学习Java中用的Mac电脑 刚开始搞这个路径搞的头疼此记录一下 Mac 路径 都用 /Users/bulingbuling/Desktop/垃圾/01.jpg 分享记录一下第一次写的成功的复制图片 import java.io.FileInputStream; import java...
  • python 生成指定路径下所有excel文件的目录,并且可以跳转到指定sheet, 代码如下: import os from pathlib import Path import xlwt import datetime import xlrd def get_path(): while True: path = input(...
  • 2017-10-14 回答如何使用python将大量数据导出到excel中的小技巧(1) 问题描述:为了更好地展示数据,excel格式的数据文件往往比文本文件更具有优势,但是具体到python,该如何导出数据到excel呢?如果碰到需要...
  • 我最开始学做漏斗图是Tableau,发现怎么做都不是很好看(第1张图),后面用Excel试了下,发现竟然并不比Tableau差(第2张图),刷新了我对Excel图表的认知!!! 一、准备数据 插入辅助列,是为了保证每一行都是...
  • 【QuotationTool的代码实现】主要数据结构.md,我们介绍了如何针对的本项目的主要数据结构是什么,也就是把Excel表格里面的数据读出来,放到什么样的结构里面方便后续的处理。 下面我们接着介绍如何实现明细清单...
  • 想用vb.net实现一个读取excel数据存入sql server的功能,想将导入做成类似于这种效果的模块,选择路径和excel版本,点确认导入,我网上找了一些用vb.net实现excel导入到sql的例子,不过都是直接输入输入路径,想...
  • Excel已经成为商业活动不可或缺的工具。Excel本身不仅可以实现数据电子化,还可以通过VBA来实现数据自动化。随着Python语言的兴起,数据自动化显得更加方便和快捷。使用Python操作数据可能会是未来的一个趋势。...
  • Sub changeFile() '出错时直接跳到完成 On Error GoTo 100 Dim file As String Dim basePath As String ... basePath = InputBox("请输入路径") If basePath = "" Then MsgBox "请输入路径" Exit Sub En
  • poi导出excel,可以自定义保存路径

    千次阅读 2012-08-22 11:24:46
    poi导出excel比js导出excel安全性更好,使用poi导出excel时,先要导入poi-3.5-FINAL-20090928.jar包到你项目的lib目录下,我这里选择是3.5版的 1.action类 package com.szallway.phr2.portal.action; ...
  • 最近小弟的项目有需要读取word与excel的模块,研究了一下,把心得分享给大家.QQ图片20180413135257.jpg首先是布局文件android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation...
  • 导入:右击工作表,查看代码,然后打开的...执行:各单元格输入图片路径(可用dir /b /s E:\图片\*.jpg >E:\图片\picpath.txt得到图片路径),然后视图工具栏的宏中点击查看宏。 另外一种选择可能是HYPERLINK。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,221
精华内容 15,688
关键字:

如何在excel中输入路径