精华内容
下载资源
问答
  • 点击蓝字发送【目录】送你200篇独家Excel精华教程全套Excel视频,限时特价,扫码观看!如果我对你说,我可以将一个连续区域中的值,快速粘贴到筛选后不连续的区域中,你信吗?例如要将下图右侧连续的“目标值”列...
    点击蓝字8557a625e79a51374f7c8ce968eafab3.png发送【目录】送你200篇独家Excel精华教程

    d6b92b992301c176185768b8ad978e7c.png

    0592e9261b1eac41e660558af4f7c8e7.png

    全套Excel视频,限时特价,扫码观看!

     如果我对你说,我可以将一个连续区域中的值,快速粘贴到筛选后不连续的区域中,你信吗?例如要将下图右侧连续的“目标值”列粘贴到筛选过后不连续的“目标粘贴区域”列中。 

    621c2c7d267d43765ee10841ac542aab.png

     刚好今天呢,我在公司做了一个实验,问了同事们上图这样的问题,同事们给我的回答都是出奇的一致,好像是商量好似的,都说“怎么可能啊,谁都知道筛选后的区域,是无法直接再复制粘贴数据过去的”,我:“额…一个白眼,自行体会”。 相信这也是大多数人的看法,不过方法还是有的。 是不是有点小好奇,这是怎么做到的?想学的话,就继续往下看吧。温馨提示:加入下面QQ群:362177791,下载教程配套的课件练习操作。

    be1768a27cead0b6519f037be0f076c0.png

    为了有对比性,我们先来试一下大家都会的ctrl+c、ctrl+v,直接复制粘贴后的效果: 

    688d8e1bc33c006049610cd51a1279e2.png

     什么鬼?只显示了一个数字,那其他数字呢?让我们把筛选结果全部展开来看一下。(如下图所示) 

    a7fd1291878005ec71a744ede0d6605f.png

    哦,原来隐藏掉的部分也会被复制粘贴啊! 试验结论:此路不通。 看来还真没有那么容易,要好好动动脑筋才行。所谓思路才是王道,有时候思路比方法更重要,让我们一起来好好分析一下吧: 我们的目标:需要把一列连续的数据,直接复制粘贴到筛选后的区域中。其中被筛选掉的部分不需要被复制粘贴到。 目前的障碍:无法直接进行复制粘贴,被筛选掉的数据也会被复制粘贴到。 想办法解决:既然不能直接复制粘贴,那我们不妨换一种思路,从复制粘贴的定式思维里跳出来,重新审视这个问题。仔细分析,其实这也是个“查找”的问题啊,我们直接把那几个数查找过来不就成了! 等一下,什么,查找?这路子一下子就变宽了。查找有一系列给力的函数,比如(V)LOOKUP、INDEX等,其中VLOOKUP不能直接使用,因为不满足它的查找条件,除非使用辅助列在两个区域左边各加一列相同字段,如1/2/3等,就可以实现。但是太麻烦,不能满足我们想立马粘贴的需求。 那看看INDEX吧,哎呀哈,貌似还可以。INDEX的语法是:INDEX(array,row_num,column_num)用于在给定的单元格区域中,返回特定行列交叉处单元格的值或引用。关于INDEX详细的使用方法,小伙伴们可以参考之前的教程《INDEX:函数中的精确制导导弹,最强大的瘸子》,此处不做赘述了。 我们来应用一下,得出了第一个数,但还不能直接往下拉得到后面的结果。 

    31d9a12bb03cb17926939714792d609c.png

    这该怎么解决呢?我们先把这个函数剥开,会发现查找区域$C$12:$C$14是固定的,列数也是固定的1列,只有行数是不固定的,所以只要把行数搞定就可以了。 现在开始专攻行数。行数是个变量,本例中的行数分别为1、2、3,如果我能用一个函数,让它直接返回行数1、2、3,而且可以忽略隐藏行不计,那就好了。 真有这样的函数吗?答案是,当然有! 那就是大名鼎鼎的SUBTOTAL函数。为什么说它大名鼎鼎,因为SUBTOTAL函数是excel中唯一一个能忽略隐藏单元格,统计用户可见单元格的函数,具有不可替代性。正好是我们今天所需要的。 SUBTOTAl的语法是SUBTOTAL(function_num,ref1,ref2,...),function_num所对应的功能参数有很多,整理后如下图所示。关于SUBTOTAL详细的使用方法,小伙伴们可以参考之前的教程《学会这个Excel“万能”函数,节省你一半的时间!》,在此就不细说了。 

    477d0c12412a09a50eb737499c392929.png

     因为是统计筛选后的结果,所以选择参数103或者3都是可以的。若不是统计筛选后的结果而是统计隐藏行后的结果,就只能用103了。接下来本例会用参数103来进行演示和说明。 我们将上面的INDEX公式中,代表行数的“1”用SUBTOTAL替换,就是=INDEX($C$12:$C$14,SUBTOTAL(103,$B$3:B3),1),结果如下,大功告成。 

    2e95b0d9aefc2431f51ad2d879358841.png

    为了方便大家更好的理解,带大家来操作一下,可以跟着一起做哦,请看下方动图。 

    b929bb571283db6ba795baa6e114d2bc.gif

    以上就是今天的内容,我们将看似不可能的事情变成了可能,最重要的就是学会动脑筋,然后运用excel解决问题。小伙伴们赶紧打开excel,来练习一下吧。扫一扫添加老师微信

    ae54fbd3afbb7303c36524c427d59b8c.png

    在线咨询Excel课程

    d35bdd84c6d6ec8c99266fc8dab87ce7.png

    Excel教程相关推荐

    请用Excel迷你图,因为可以一眼十表快速了解多组数据,领导最爱INDEX:函数中的精确制导导弹,最强大的瘸子Excel教程:财务岗必会Excel技能!数字小写金额转大写的妙招!【1元秒杀】Excel、Word、PPT、PS、去水印、视频剪辑等视频教程
    展开全文
  • 注意:由于公司需要大量导出数据成excel表格,因此在网上找了方法,亲测有效. 声明:该博客参考于https://blog.csdn.net/long530439142/article/details/79002792,谢谢哥们提供方法。 1、在pom.xml中添加poi-...

    注意:由于公司需要大量导出数据成excel表格,因此在网上找了方法,亲测有效.

    声明:该博客参考于https://blog.csdn.net/long530439142/article/details/79002792,谢谢哥们提供方法。

     

    1、在pom.xml中添加poi-ooxml组件

    <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.9</version>
    </dependency>

     

    2、excel自定义数据格式

    package com.cn.commodity.dto;
    
    import java.io.Serializable;
    import java.util.List;
    
    public class ExcelData implements Serializable {
        private static final long serialVersionUID = 4444017239100620999L;
    
        // 表头
        private List<String> titles;
    
        // 数据
        private List<List<Object>> rows;
    
        // 页签名称
        private String name;
    
        public List<String> getTitles() {
            return titles;
        }
    
        public void setTitles(List<String> titles) {
            this.titles = titles;
        }
    
        public List<List<Object>> getRows() {
            return rows;
        }
    
        public void setRows(List<List<Object>> rows) {
            this.rows = rows;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }

     

    3、ExcelUtils 工具类

    package com.cn.commodity.utils;
    import com.cn.commodity.dto.ExcelData; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder; import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; import java.util.List; import java.awt.Color; import java.net.URLEncoder; public class ExcelUtils { public static void exportExcel(HttpServletResponse response, String fileName, ExcelData data) throws Exception { // 告诉浏览器用什么软件可以打开此文件 response.setHeader("content-Type", "application/vnd.ms-excel"); // 下载文件的默认名称 response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(fileName, "utf-8")); exportExcel(data, response.getOutputStream()); } public static void exportExcel(ExcelData data, OutputStream out) throws Exception { XSSFWorkbook wb = new XSSFWorkbook(); try { String sheetName = data.getName(); if (null == sheetName) { sheetName = "Sheet1"; } XSSFSheet sheet = wb.createSheet(sheetName); writeExcel(wb, sheet, data); wb.write(out); } catch(Exception e){ e.printStackTrace(); }finally{ //此处需要关闭 wb 变量 out.close(); } } private static void writeExcel(XSSFWorkbook wb, Sheet sheet, ExcelData data) { int rowIndex = 0; rowIndex = writeTitlesToExcel(wb, sheet, data.getTitles()); writeRowsToExcel(wb, sheet, data.getRows(), rowIndex); autoSizeColumns(sheet, data.getTitles().size() + 1); } private static int writeTitlesToExcel(XSSFWorkbook wb, Sheet sheet, List<String> titles) { int rowIndex = 0; int colIndex = 0; XSSFFont titleFont = wb.createFont(); titleFont.setFontName("simsun"); titleFont.setColor(IndexedColors.BLACK.index); XSSFCellStyle titleStyle = wb.createCellStyle(); titleStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); titleStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); titleStyle.setFillForegroundColor(new XSSFColor(new Color(182, 184, 192))); titleStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); titleStyle.setFont(titleFont); setBorder(titleStyle, BorderStyle.THIN, new XSSFColor(new Color(0, 0, 0))); Row titleRow = sheet.createRow(rowIndex); colIndex = 0; for (String field : titles) { Cell cell = titleRow.createCell(colIndex); cell.setCellValue(field); cell.setCellStyle(titleStyle); colIndex++; } rowIndex++; return rowIndex; } private static int writeRowsToExcel(XSSFWorkbook wb, Sheet sheet, List<List<Object>> rows, int rowIndex) { int colIndex = 0; XSSFFont dataFont = wb.createFont(); dataFont.setFontName("simsun"); dataFont.setColor(IndexedColors.BLACK.index); XSSFCellStyle dataStyle = wb.createCellStyle(); dataStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); dataStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); dataStyle.setFont(dataFont); setBorder(dataStyle, BorderStyle.THIN, new XSSFColor(new Color(0, 0, 0))); for (List<Object> rowData : rows) { Row dataRow = sheet.createRow(rowIndex); colIndex = 0; for (Object cellData : rowData) { Cell cell = dataRow.createCell(colIndex); if (cellData != null) { cell.setCellValue(cellData.toString()); } else { cell.setCellValue(""); } cell.setCellStyle(dataStyle); colIndex++; } rowIndex++; } return rowIndex; } private static void autoSizeColumns(Sheet sheet, int columnNumber) { for (int i = 0; i < columnNumber; i++) { int orgWidth = sheet.getColumnWidth(i); sheet.autoSizeColumn(i, true); int newWidth = (int) (sheet.getColumnWidth(i) + 100); if (newWidth > orgWidth) { sheet.setColumnWidth(i, newWidth); } else { sheet.setColumnWidth(i, orgWidth); } } } private static void setBorder(XSSFCellStyle style, BorderStyle border, XSSFColor color) { style.setBorderTop(border); style.setBorderLeft(border); style.setBorderRight(border); style.setBorderBottom(border); style.setBorderColor(XSSFCellBorder.BorderSide.TOP, color); style.setBorderColor(XSSFCellBorder.BorderSide.LEFT, color); style.setBorderColor(XSSFCellBorder.BorderSide.RIGHT, color); style.setBorderColor(XSSFCellBorder.BorderSide.BOTTOM, color); } }

     

    4、写一个Controller,在本地生成文件

    package com.cn.commodity.controller;
    
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    import javax.servlet.http.HttpServletResponse;
    
    import com.cn.commodity.dto.ExcelData;
    import com.cn.commodity.utils.ExcelUtils;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/excel")
    public class ExcelController {
        @RequestMapping(value = "/export", method = RequestMethod.GET)
        public void excel(HttpServletResponse response) throws Exception {
            ExcelData data = new ExcelData();
            data.setName("hello");
            List<String> titles = new ArrayList();
            titles.add("a1");
            titles.add("a2");
            titles.add("a3");
            data.setTitles(titles);
    
            List<List<Object>> rows = new ArrayList();
            List<Object> row = new ArrayList();
            row.add("11111111111");
            row.add("22222222222");
            row.add("3333333333");
            rows.add(row);
    
            data.setRows(rows);
    
    
            //生成本地
                File f = new File("F:\\test.xlsx");
                FileOutputStream out = new FileOutputStream(f);
                ExcelUtils.exportExcel(data, out);
                out.close();
           /* SimpleDateFormat fdate=new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
            String fileName=fdate.format(new Date())+".xls";
            ExcelUtils.exportExcel(response,fileName,data);*/
        }
    }

     

    本人实测有效,如有问题,欢迎留言!

    转载于:https://www.cnblogs.com/ywjfx/p/10192441.html

    展开全文
  • Excel中读入若干方剂【列】及其组成药物【行】,第一行为表头,第一列为编号,从第二行与第二列开始为具体表格内容【若表格格式不同,则可自行更改参数】,运行结果为①统计出现次数最多的药物,②统计同时出现...

        前一阵帮别人做的一个小程序,主要用于中药的药剂分析,从Excel中读入若干方剂【列】及其组成药物【行】,第一行为表头,第一列为编号,从第二行与第二列开始为具体表格内容【若表格格式不同,则可自行更改参数】,运行结果为①统计出现次数最多的药物,②统计同时出现次数最多的药物组合,③制作TF表。因个人觉得一些想要读入Excel文件并分析一些内容的同学可能用得上,遂分享一下。新手献丑,勿喷。

    定义部分:

    struct drug												//药品结构体
    {
    	string drugName;									//药品名称
    	int drugTime;										//药品出现次数
    };
    struct drug2											//两种药品结构体
    {
    	string drug2Name1;									//药品名称1
    	string drug2Name2;									//药品名称2
    	int drug2Time;										//药品出现次数
    };
    int i, j, k;											//循环变量
    int tempInt, tempMax, tempNum;							//整型——临时变量
    int drugNum;											//药物总数
    int top = 30;											//出现次数top数
    bool smFlag;											//药品相同标志
    bool sm2Flag;											//药品2相同标志
    drug tempDrug;											//药品结构体——临时变量
    drug2 tempDrug2;										//药品结构体2——临时变量
    string tempStr;											//字符串——临时变量
    string linePrescRead;									//读入的一行方剂数据
    vector<vector<string>> listPrescRead;					//读入的方剂表格
    vector<drug> drugVec;									//药品出现次数向量
    vector<drug2> drug2Vec;									//两种药品共同出现的次数向量
    vector<drug2> drug2Vec2;								//两种药品共同出现的次数向量
    vector<string> drugTop;									//出现次数最多的n种药品向量
    vector<string> listPrescComp;							//用于对比的药物数据

    函数部分:

            ifstream inFile("data.csv", ios::in);					//定义文件读入流以读入文件
    	ofstream outFile;										//定义文件输出流以输出文件
    															
    	UpdateData(TRUE);
    	top = m_editIntTopNum;									//从编辑框控件中获取需要取的药物数量
    	UpdateData(FALSE);
    
    	//将从data.csv读入的字符串放入二维Vector中
    	while (getline(inFile, linePrescRead))					//打印整行字符串
    	{
    		listPrescComp.push_back(linePrescRead);
    		stringstream ss(linePrescRead);
    		vector<string> tempVec;								//向量——临时变量
    		while (getline(ss, tempStr, ','))					//按行读取,按照逗号分隔
    		{
    			tempVec.push_back(tempStr);
    		}
    		listPrescRead.push_back(tempVec);					//将一行方剂数据读入向量
    	}
    	int rows = listPrescRead.size();						//方剂的条目数
    	for (i = 1; i < rows; i++)
    	{
    		for (j = 1; j < listPrescRead[i].size(); j++)
    		{
    			smFlag = 0;
    			for (k = 0; k < drugVec.size(); k++)
    			{
    				if (listPrescRead[i][j] == drugVec[k].drugName)
    				{
    					smFlag = 1;
    					drugVec[k].drugTime++;
    				}
    			}
    			if (!smFlag)
    			{
    				tempDrug.drugName = listPrescRead[i][j];
    				tempDrug.drugTime = 1;
    				drugVec.push_back(tempDrug);
    			}
    		}
    	}
    	drugNum = drugVec.size();
    	for (i = 0; i < drugNum - 1 ; i++)
    	{
    		for (j = i + 1; j < drugNum; j++)
    		{
    			if (drugVec[i].drugName != "" && drugVec[j].drugName != "")
    			{
    				tempDrug2.drug2Name1 = drugVec[i].drugName;
    				tempDrug2.drug2Name2 = drugVec[j].drugName;
    				tempDrug2.drug2Time = 0;
    				drug2Vec.push_back(tempDrug2);
    			}
    		}
    	}
    	for (i = 1; i < rows; i++)
    	{
    		for (j = 0; j < drug2Vec.size(); j++)
    		{
    			if (listPrescComp[i].find(drug2Vec[j].drug2Name1) != -1 && listPrescComp[i].find(drug2Vec[j].drug2Name2) != -1)
    			{
    				drug2Vec[j].drug2Time++;
    			}
    		}
    	}
    	for (i = 0; i < drug2Vec.size(); i++)
    	{
    		if (drug2Vec[i].drug2Time != 0)
    		{
    			drug2Vec2.push_back(drug2Vec[i]);
    		}
    	}
    	for (i = 0; i < drugVec.size(); i++)
    	{
    		for (j = i + 1; j < drugVec.size(); j++)
    		{
    			if (drugVec[i].drugTime < drugVec[j].drugTime)
    			{
    				tempDrug.drugName = drugVec[i].drugName;
    				tempDrug.drugTime = drugVec[i].drugTime;
    				drugVec[i] = drugVec[j];
    				drugVec[j] = tempDrug;
    			}
    		}
    	}
    	for (i = 0; i < drug2Vec2.size(); i++)
    	{
    		for (j = i + 1; j < drug2Vec2.size(); j++)
    		{
    			if (drug2Vec2[i].drug2Time < drug2Vec2[j].drug2Time)
    			{
    				tempDrug2.drug2Name1 = drug2Vec2[i].drug2Name1;
    				tempDrug2.drug2Name2 = drug2Vec2[i].drug2Name2;
    				tempDrug2.drug2Time = drug2Vec2[i].drug2Time;
    				drug2Vec2[i] = drug2Vec2[j];
    				drug2Vec2[j] = tempDrug2;
    			}
    		}
    	}
    	outFile.open("Freq1_Form.csv", ios::out | ios::trunc);
    	for (i = 0; i < drugNum; i++)
    	{
    		if (drugVec[i].drugName != "")
    		{
    			outFile << drugVec[i].drugName << "," << drugVec[i].drugTime << endl;
    		}
    	}
    	outFile.close();
    	outFile.open("Freq2_Form.csv", ios::out | ios::trunc);
    	for (i = 0; i < drug2Vec2.size(); i++)
    	{
    		outFile << drug2Vec2[i].drug2Name1 + "  " + drug2Vec2[i].drug2Name2 << "," << drug2Vec2[i].drug2Time << endl;
    	}
    	outFile.close();
    	if (top > drugNum)
    	{
    		UpdateData(TRUE);
    		m_editCsrResult = "要取的药物数量过多,请重新输入!";
    		UpdateData(FALSE);
    	}
    	else 
    	{
    		top++;
    		for (i = 0; i < top; i++)
    		{
    			tempMax = 0;
    			for (j = 0; j < drugNum; j++)
    			{
    				if (drugVec[j].drugTime > tempMax)
    				{
    					tempMax = drugVec[j].drugTime;
    					tempNum = j;
    				}
    			}
    			drugTop.push_back(drugVec[tempNum].drugName);
    			drugVec[tempNum].drugTime = -1;
    		}
    		vector<vector<string> >listPrescWrit(rows, vector<string>(top));	//输出的方剂表格
    		for (i = 0; i < rows; i++)
    		{
    			listPrescWrit[i][0] = listPrescRead[i][0];
    		}
    		for (i = 1; i < top; i++)
    		{
    			listPrescWrit[0][i] = drugTop[i];
    		}
    		for (i = 1; i < rows; i++)
    		{
    			for (j = 1; j < top; j++)
    			{
    				if (listPrescComp[i].find(drugTop[j]) != -1)
    				{
    					listPrescWrit[i][j] = "T";
    				}
    				else
    				{
    					listPrescWrit[i][j] = "F";
    				}
    			}
    		}
    		outFile.open("TorF_Form.csv", ios::out | ios::trunc);
    		for (i = 0; i < rows; i++)
    		{
    			for (j = 0; j < top - 1; j++)
    			{
    				outFile << listPrescWrit[i][j] << ",";
    			}
    			outFile << listPrescWrit[i][top - 1] << endl;
    		}
    		outFile.close();
    		UpdateData(TRUE);
    		m_editCsrResult = "程序运行完毕!";
    		UpdateData(FALSE);
    	}

    UpdateData是MFC中使用,不用则去掉。


    展开全文
  • 那我就一下面积个问题对xlrd...♦python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。今天就先来说一下xlrd模块:一、安装xlrd模块♦ 到python官网下载http://pypi.python.org/pypi/...

    那我就一下面积个问题对xlrd模块进行学习一下:

    1.什么是xlrd模块?

    2.为什么使用xlrd模块?

    3.怎样使用xlrd模块?

    1.什么是xlrd模块?

    ♦python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。

    今天就先来说一下xlrd模块:

    一、安装xlrd模块

    ♦ 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境。

    ♦或者在cmd窗口 pip install xlrd

    二、使用介绍

    1、常用单元格中的数据类型

    ♦ 0. empty(空的),1 string(text), 2 number, 3 date, 4 boolean, 5 error, 6 blank(空白表格)

    2、导入模块

    import xlrd

    3、打开Excel文件读取数据

    data = xlrd.open_workbook(filename)#文件名以及路径,如果路径或者文件名有中文给前面加一个r拜师原生字符。

    4、常用的函数

    ♦ excel中最重要的方法就是book和sheet的操作

    1)获取book中一个工作表

    copycode.gif

    table = data.sheets()[0] #通过索引顺序获取

    table = data.sheet_by_index(sheet_indx)) #通过索引顺序获取

    table = data.sheet_by_name(sheet_name)#通过名称获取

    以上三个函数都会返回一个xlrd.sheet.Sheet()对象

    names = data.sheet_names() #返回book中所有工作表的名字

    data.sheet_loaded(sheet_name or indx) # 检查某个sheet是否导入完毕

    copycode.gif

    如:

    1401386-20180526122931818-1803444923.png

    2)行的操作

    copycode.gif

    nrows = table.nrows #获取该sheet中的有效行数

    table.row(rowx) #返回由该行中所有的单元格对象组成的列表

    table.row_slice(rowx) #返回由该列中所有的单元格对象组成的列表

    table.row_types(rowx, start_colx=0, end_colx=None) #返回由该行中所有单元格的数据类型组成的列表

    table.row_values(rowx, start_colx=0, end_colx=None) #返回由该行中所有单元格的数据组成的列表

    table.row_len(rowx) #返回该列的有效单元格长度

    copycode.gif

    1401386-20180526123705280-1972571862.png

    3)列(colnum)的操作

    copycode.gif

    ncols = table.ncols #获取列表的有效列数

    table.col(colx, start_rowx=0, end_rowx=None) #返回由该列中所有的单元格对象组成的列表

    table.col_slice(colx, start_rowx=0, end_rowx=None) #返回由该列中所有的单元格对象组成的列表

    table.col_types(colx, start_rowx=0, end_rowx=None) #返回由该列中所有单元格的数据类型组成的列表

    table.col_values(colx, start_rowx=0, end_rowx=None) #返回由该列中所有单元格的数据组成的列表

    copycode.gif

    如:

    1401386-20180526124235132-576278541.png

    4)单元格的操作

    copycode.gif

    table.cell(rowx,colx) #返回单元格对象

    table.cell_type(rowx,colx) #返回单元格中的数据类型

    table.cell_value(rowx,colx) #返回单元格中的数据

    table.cell_xf_index(rowx, colx) # 暂时还没有搞懂

    copycode.gif

    ♦单元格:单元格是表格中行与列的交叉部分,它是组成表格的最小单位,可拆分或者合并。单个数据的输入和修改都是在单元格中进行的

    如:

    1401386-20180526125023186-1354342188.png

    注意:注意作用域问题,之前获取的sheet之后,都在获取到这个sheet值后,在进行,行和列以及单元格的操作。

    问题现象:

    ♦1、使用open()函数、xlrd.open_workbook()函数打开文件,文件名若包含中文,会报错找不到这个文件或目录。

    ♦2、获取sheet时若包含中文,也会报错。

    copycode.gif

    #打开文件

    file = open(filename,'rb')

    #打开excel文件

    workbook = xlrd.open_workbook(filename)

    #获取sheet

    sheet = workbook.sheet_by_name(sheetname)

    copycode.gif

    解决方案:

    ♦对参数进行转码即可。如:

    filename = filename.decode('utf-8')

    ♦也试过unicode函数,不过,在ride中运行时出现了报错,所以不赞成使用。

    filename = unicode(filename,'utf-8')

    2.为什么使用xlrd模块?

    ♦在UI自动化或者接口自动化中数据维护是一个核心,所以此模块非常实用。

    3.怎样使用xlrd模块?

    我们来举一个从Excel中读取账号和密码的例子并调用:

    ♦1.制作Excel我们要对以上输入的用户名和密码进行参数化,使得这些数据读取自Excel文件。我们将Excel文件命名为data.xlsx,其中有两列数据,第一列为username,第二列为password。

    1401386-20180526151631034-1349221613.png

    ♦2.读取Excel代码如下

    copycode.gif

    #-*- coding:utf-8 -*-

    import xlrd,time,sys,unittest #导入xlrd等相关模块

    class Data_Excel(unittest.TestCase):# 封装在Data_Excel类里面方便后面使用

    file_addrec = r'C:\Users\liqiang22230\Desktop\date.xlsx' #定义date.xlsx数据维护Excel的路径文件

    def open_excel(self,file = file_addrec):#file = file_addrec #注意在class中def中一定要带self

    try:#检验文件有没有被获取到

    self.data =xlrd.open_workbook(file)

    return self.data

    except Exception :

    print(file)

    print('eero')

    def excel_table_byindex(self,file = file_addrec,colnameindex=0,by_index='用户表'):

    #把这个读取Excel中封装在excel_table_byindex函数中,这时需要三个参数1.文件2.sheet名称,列所在的行数

    self.data = xlrd.open_workbook(file)#获取Excel数据

    self.table = self.data.sheet_by_name(by_index)#使用sheet_by_name获取sheet页名叫用户表的sheet对象数据

    self.colnames = self.table.row_values(colnameindex)#获取行数下标为0也就是第一行Excel中第一行的所有的数据值

    self.nrows = self.table.nrows #获得所有的有效行数

    list = []#总体思路是把Excel中数据以字典的形式存在字符串中一个字典当成一个列表元素

    for rownum in range(1,self.nrows):

    row = self.table.row_values(rownum)#获取所有行数每一行的数据值

    if row:

    app = {}#主要以{'name': 'zhangsan', 'password': 12324.0},至于字典中有多少元素主要看有多少列

    for i in range(len(self.colnames)):

    #在这个Excel中,列所在的行有两个数据,所以没循环一行就以这两个数据为键,行数的值为键的值,保存在一个字典里

    app[self.colnames[i]] = row[i]

    list.append(app)

    print(list)

    return list

    a = Data_Excel()

    a.excel_table_byindex()

    if __name__=="__main__":

    unittest.main()

    copycode.gif

    执行结果如下:

    Testing started at 15:47 ...

    [{'name': 'zhangsan', 'password': 12324.0}, {'name': 'zhangsan', 'password': 12324.0}, {'name': 'lisi', 'password': 923848.0}, {'name': 'lisi', 'password': 923848.0}, {'name': 'wangmazi', 'password': 213123.0}, {'name': 'wangmazi', 'password': 213123.0}]

    Process finished with exit code 0

    Empty test suite.

    ♦3.调用Excel代码如下:

    copycode.gif

    def Login(self):

    listdata = excel_table_byindex("E:\\data.xlsx",0)#传入两个参数1.文件路径2.第一行所在下标

    if (len(listdata) <= 0 ):#判断list列表中是否有数据

    assert 0 , u"Excel数据异常"

    for i in range(0 , len(listdata) ):#循环出list中所有的字典

    self.driver = webdriver.Chrome()

    self.driver.get("http://www.effevo.com")

    assert "effevo" in self.driver.title

    #点击登录按钮

    self.driver.find_element_by_xpath(".//*[@id='home']/div/div[2]/header/nav/div[3]/ul/li[2]/a").click()

    time.sleep(1)

    self.driver.find_element_by_id('passname').send_keys(listdata[i]['username'])#切出list下标下标为i的字典键为username的值

    self.driver.find_element_by_id('password').send_keys(listdata[i]['password'])#切出list下标下标为i的字典键为password的值

    self.driver.find_element_by_xpath(".//*[@id='content']/div/div[6]/input").click()

    time.sleep(2)

    self.driver.close()

    # 一段完整的代码,循环登录,取Excel中的用户名和密码去执行

    import xlrd

    import timefrom selenium import webdriver

    class Data_Excel(): #封装在Data_Excel类里面方便后面使用

    file_addrec = r"E:\data-excel.xlsx" #定义的数据文件

    def open_excel(self,file = file_addrec):

    #检查文件有没有被打开

    try:

    self.data = xlrd.open_workbook(file)

    except:

    print (file+"error")

    def excel_table_byindex(self,file=file_addrec,colnameindex=0,by_index='用户表'):

    # 把这个读取Excel中封装在excel_table_byindex函数中,这时需要三个参数1.文件2.sheet名称3,列所在的行数

    self.data = xlrd.open_workbook(file) # 打开文件,获取Excel数据

    self.table = self.data.sheet_by_name(by_index) # 获取sheet工作表,使用sheet_by_name获取sheet页名叫用户表的sheet对象数据

    self.colnames = self.table.row_values(colnameindex) # 获取行数下标为0也就是第一行Excel中第一行的所有的数据值

    self.nrows = self.table.nrows # 获得所有的有效行数

    list = [] # 总体思路是把Excel中数据以字典的形式存在字符串中一个字典当成一个列表元素

    for rownum in range(1, self.nrows): #去除定义的首行

    row = self.table.row_values(rownum) # 获取所有行数每一行的数据值

    # print(row)

    # print(self.colnames)

    if row:

    app = {} # 主要以{'name': 'zhangsan', 'password': 12324.0},至于字典中有多少元素主要看有多少列

    for i in range(len(self.colnames)):

    # 在这个Excel中,列所在的行有两个数据,所以没循环第一行就以这两个数据为键,行数的值为键的值,保存在一个字典里

    app[self.colnames[i]] = row[i]

    list.append(app)

    # print(list)

    return list

    def Login(self):

    listdata = Data_Excel().excel_table_byindex(r"E:\data-excel.xlsx", 0) # 传入两个参数1.文件路径2.第一行所在下标

    if (len(listdata) <= 0): # 判断list列表中是否有数据

    assert 0, u"Excel数据异常"

    for i in range(0, len(listdata)): # 循环出list中所有的字典

    self.driver = webdriver.Chrome()

    self.driver.get("http://www.effevo.com")

    assert "工作云 - WorkYun - 团队协作 项目-缺陷-文档 管理工具" in self.driver.title

    # 点击登录按钮

    self.driver.find_element_by_css_selector(".pull-left li:nth-child(1)>[class='login-in']").click()

    time.sleep(1)

    self.driver.find_element_by_id('passname').send_keys(listdata[i]['name']) # 切出list下标下标为i的字典键为username的值

    self.driver.find_element_by_id('password').send_keys(str(listdata[i]['password'])) # 切出list下标下标为i的字典键为password的值

    self.driver.find_element_by_xpath(".//*[@id='content']/div/div[6]/input").click()

    time.sleep(2)

    self.driver.close()

    if __name__ == "__main__":

    a = Data_Excel()

    listdata = a.excel_table_byindex(r"E:\data-excel.xlsx", 0) # 传入两个参数1.文件路径2.第一行所在下标

    if (len(listdata) <= 0): # 判断list列表中是否有数据

    assert 0, u"Excel数据异常"

    for i in range(0, len(listdata)): # 循环出list中所有的字典

    driver = webdriver.Chrome()

    driver.get("http://www.effevo.com")

    assert "工作云 - WorkYun - 团队协作 项目-缺陷-文档 管理工具" in driver.title

    # 点击登录按钮

    driver.find_element_by_css_selector(".pull-left li:nth-child(1)>[class='login-in']").click()

    time.sleep(1)

    driver.find_element_by_id('passname').send_keys(listdata[i]['name']) # 切出list下标下标为i的字典键为username的值

    driver.find_element_by_id('password').send_keys(

    str(listdata[i]['password'])) # 切出list下标下标为i的字典键为password的值

    driver.find_element_by_xpath(".//*[@id='content']/div/div[6]/input").click()

    time.sleep(2)

    driver.close()

    展开全文
  • 原标题:用什么Phthon, Excel也可以网抓表格最近python非常的火,动不动就秒杀excel,特别是从网上抓取数据十分吸人眼球。其实,Excel中的power query功能也可以网抓,甚至表格。兰色今天就带大家一起试上一...
  • python写个数据到excel表格的一个单元格中 往excel单元格中写一个数字很简单,但是如何写进个有格式的数据呢,假如我们想写入一个点坐标:(56,25) 解决思路 可以先将数据强制格式format 转换为特定格式的字符...
  • Excel 2003 操作电子表格软件Excel是用于数据处理的软件,它可以对由行和列构成的二维表格总的数据进行管理,能运算、分析、输出结果,并能制作出图文并茂的工作表格。电子表格中的每 一个单元格可以存储的数据并不...
  • js建立excel表格 介绍 (Introduction) I am going to show you the different ways you can build a football league table in Excel. Some of the methods are old school but others utilise Excel’s new ...
  • 3、环境变量 4、INI 文件项 5、ODBC 驱动程序、数据源和翻译程序 6、.NET 和 Win32 程序集 7、服务 8、文件关联、MIME 类型 9、文件、文件夹、注册表项和值的访问权限 - 搜索、下载并安装运行环境 - 在模块和...
  • 使用canvas画类似excel表格

    千次阅读 2019-01-30 11:32:18
    先把表格分成3个canvas来画, 因为 excel表的左边和上面都是跟随内容来移动 通过oniscroll 事件来进行联动 如果需要再进行导出excel ,可以使用JsonExportExcel插件, 如果你需要在移动某个小表格之后出现弹框,可以使用...
  • 最近接到任务要录入数据到数据库中,是将Execl表格中的数据导入到ACCESS数据文件中,对于技术人员,怎么可能会甘心复制粘贴,凑巧前段时间一直在研究按键精灵(主要是游戏太累手了),忽然眼前一亮,呵呵,几百条的...
  • 在Python的CommandLine中输入:【四大基本运算】a1=100a2=3print( a1+a2 )print ( a1-a2)print ( a1 * a2)print ( a1 / a2 )#上面是加减,乘除 ,此行不用输入你可以想像成a1变量是单元格a1,a2变量是单元格a2print ...
  • 在Python的CommandLine中输入:【四大基本运算】a1=100a2=3print( a1+a2 )print ( a1-a2)print ( a1 * a2)print ( a1 / a2 )#上面是加减,乘除 ,此行不用输入你可以想像成a1变量是单元格a1,a2变量是单元格a2print ...
  • 使用Excel中自带的VBA制作工具写的一个宏程序,可通过自动读取一些表格的数据来得到结果,代码是基础性的,包含变量命名循环语句函数调用等等
  • 本来想接着写关于web的东西,不过老师突然留了个作业,就是将几百条word上面的数据转化成表格的形式. 但是很尴尬的是…我居然不会用word… 不过,咱们好歹也是学过python的人,写一个这样的脚本很简单. 一.处理的数据的...
  • 在VB中制作报表一般来讲有三种方法: 1、直接使用VB6.0中自带的Data Report 来做,这种方法有很大的局限性,对于比较规则的报表,但对于比较复杂的报表,比如说一张报表,上部分是人员的工资,下部分是人员的各日的...
  • 最近做了一个需求,要求导出一个采购合同的Excel表格,这个表格样式比较。由于是合同,这个Excel表格里面有好多格式要求,比如结尾处签字那部分就有格式要求。这里介绍种采用FreeMarker的api来生成Excel文件的方案...
  • 今天给大家总结一下,ftl模板生成复杂Excel表格之一:动态合并单元格! 本说明只是根据当前工作需要,临时使用freemarker的ftl模板,如有不足之处还望各位朋友不吝赐教! 一.页面展示部分 本次需求是需要制作采购...
  • hello,大家好,我是wangzirui32,今天来教大家如何写一个Excel表格转Markdown表格的小程序,开始学习吧! 1. 第三方库准备 首先,安装pandas: pip install pandas 再安装openpyxl: pip install openpyxl 没有...
  • 一,从excel表格中提取所有学生姓名,班级,成绩数据 二,按要求筛选学生名单,优秀学生选成绩前20名,如有并列,也制作奖状;进步奖学生取进步率前20名,如有并列,也制作奖状,进步率为:(本周成绩-上周成绩)/...
  • 在设计项目的过程中,有一个页面需要制作一个导出按钮,将页面中的表格数据导出到本地储存中,但在导出的过程中需要一个模版进行对表格数据的接收,对我而言Excel表格便是最优的数据接收模版。 那么,如何在项目的...
  • 做账不用在苦恼表格制作,企业财务管理全套Excel模板给你!领取包含:差旅费报销单、成本分析、成本预测、筹资决策的分析、筹资决策分析模型存货明细表、单变量及双变量运算、单据、计件工资、日常费用统计表、资产...
  • 应用软件:Office2010 ...将Excel表格输入成如下样式: 选择B7单元格,点击数据分析,选择随机数发生器: 接下来进行如下设置: 由于投掷硬币只有正面反面两种可能性,故变量个数设置为1(0,1两种,1代表正面)
  • 导出数据到Excel表格

    2019-05-17 08:16:23
    开发工具与关键技术:VS , ASP.NET.MVC;...首先获取当前表格数据的筛选条件, var AcademeID = $("#searchAcademeID").val(); var GradeID = $("#searchGradeID").val(); var ClassID = $("#searchClass...
  • pb中操作excel表格函数

    2020-09-10 13:16:51
    Ole_object.Workbooks.add//新建一个Excel文件 Ole_object.Workbooks.Open("FileName")//打开一个已存在Excel文件 Ole_object.ActiveWorkBook.Sheets("SheetName").Select//选择文件中一个工作表 Ole_object....
  • 因此我们可以直接将Excel表格转换为lua文件,这样就可以高效、方便地在Lua中使用策划配置的数据了。在本篇博客中,马三将会和大家一起,用C#语言实现一个Excel表格转lua的转表工具——Xls2Lua,并搭配一个通用的...
  • 这尤其在游戏开发中体现的最为明显,策划的数据文档大多是一些Excel表格,且不说这些表格在游戏中读取的速度,但就论占用内存来说,同样的数据量Excel表格所占用的内存要远远大于CSV,因此将Excel转换成CSV势在必行...
  • 首先要 感谢:DonaldW、jameyli 、JumboWu 他们的分享。以下内容是在 根据他们的 文章 弄。... http://blog.csdn.net/u010019717工作原理流程:1、xls2protobuf_v3.py将表格数据转成:*.proto(描述文件) *.b

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,531
精华内容 1,812
关键字:

多变量excel表格制作