openpyxl读取excel(openpyxl读取excel指定列)

197 2022-10-08 08:50

1. openpyxl读取excel指定列

openpyxl是一个用来读写xlsx文件的Python库,官方文档https://openpyxl.readthedocs.io/en/stable/tutorial.html.

在使用openpyxl前先要掌握三个对象,即:Workbook(工作簿,一个包含多个Sheet的Excel文件)、Worksheet(工作表,一个Workbook有多个Worksheet,用表名识别,如“Sheet1”,“Sheet2”等)、Cell(单元格,存储具体的数据对象)三个对象。


2. openpyxl读取单元格格式

Python办公自动化主要是批量化、自动化、定制化解决数据问题,目前主要分为三大块:自动化office、自动化机器人、自动化数据服务。

1、自动化office,包括对excel、word、ppt、email、pdf等常用办公场景的操作,

python都有对应的工具库,可以很方便的调用。

提供一些常见的核心库供大家参考使用。

excel:xlwings、xlrd、xlwt、openpyxl

word:Python-docx

ppt:pptx

email:smtplib(SMTP服务)、email(解析处理)、yagmail(全能)

pdf:pypdf2、pdfminer、pdfplumber

picture:PIL

学这些会撸python是前提,对于小白来说自学也不是件容易的事,需要花相当的时间去适应python的语法逻辑,而且要坚持亲手敲代码,不断练习。

2、自动化机器人,用来提高常规且高频的服务,比如微信客服、自动交易系统、实时信息抓取、QQ聊天机器人等。

例如

web自动化测试:selenium

模拟鼠标键盘:pymouse、pywinauto、pyautogui

微信自动化:wechatby

Python自动化办公其实并不难,但也需要有Python基础,起码得会写脚本,不然尽管有自动化接口也用不了。

很多人入了很长时间门,还是在门外徘徊,我觉得这是学习方法的问题。学习编程一定要多练习,基础+实战同步走,这样才能最快掌握Python。

可能你会问,看书看不进去怎么办,那就换条路子,你可以去看视频、看网络教程、逛github,都是很不错的方法.

3、自动化数据服务,主要是提供流式数据服务,从数据获取、数据处理、数据建模、数据可视化,到最终生成数据报告,通过python搭建起完整数据链条。

数据抓取:requests、scrapy

数据处理:pandas、numpy

数据建模:scipy、scikit-learn、statesmodel、keras

数据可视化:matplotlib、seaborn、bokeh、pyecharts

数据报表:dash

以python操作excel为例,使用xlwings生成自动化图表。

1、简单介绍xlwings

接下来实操演练:

1、准备一个表格

2、对表格进行各种操作

导入xlwings库,命名为xw

import xlwings as xw

建立与活动工作簿的连接

# 这里使用books方法,引用工作簿

wb = xw.books["商品清单.xlsx"]

type(wb)

xlwings.main.Book

查看工作簿的名字

wb.name

'商品清单.xlsx'

实例化工作表对象

sht = wb.sheets['表一']

查看表一中A1单元格的内容

# 标准用法

sht.range('A1').value

'品类'

# 简洁用法

sht['A1'].value

'品类'

# 索引用法

sht[0,0].value

'品类'

查看表一中A1-D8所有单元格的内容

sht.range('A1:D8').value

输出:

[['品类', '数量(件)', '单价(元)', '总价(元)'],

['坚果', 5.0, 30.0, 150.0],

['罐头', 9.0, 10.0, 90.0],

['牛肉', 3.0, 60.0, 180.0],

['果汁', 10.0, 9.0, 90.0],

['蜂蜜', 2.0, 80.0, 160.0],

['进口零食', 4.0, 70.0, 280.0],

['合计', 33.0, 43.166666666666664, 950.0]]

sht[:8,:4].value

输出:

[['品类', '数量(件)', '单价(元)', '总价(元)'],

['坚果', 5.0, 30.0, 150.0],

['罐头', 9.0, 10.0, 90.0],

['牛肉', 3.0, 60.0, 180.0],

['果汁', 10.0, 9.0, 90.0],

['蜂蜜', 2.0, 80.0, 160.0],

['进口零食', 4.0, 70.0, 280.0],

['合计', 33.0, 43.166666666666664, 950.0]]

将表一B2单元格5改为7

sht.range('B2').value = 7

向表二中导入dataframe类型数据

第一步:连接表二

第二步:生成一个dataframe类型数据集

第三步:导入表二

sht_2 = wb.sheets['表二']

import pandas as pd

df = pd.DataFrame({'姓名':['小王','小张','小李'],'年龄':[23,26,19]})

df

导入:

sht_2.range('B1').value = df

向表二中导入numpy数组

import numpy as np

obj = np.array([[1,2,3],[4,5,6]])

obj

输出:

array([[1, 2, 3],

[4, 5, 6]])

导入:

sht_2.range('F1').value = obj

将excel中数据导出为DataFrame格式

sht_2.range('B1').options(pd.DataFrame, expand='table').value

用matplotlib绘图并将图片贴到excel上

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(4,4))

plt.plot([1,2,3,4,5])

sht_2.pictures.add(fig, name='MyPlot', update=True)

输出:

<Picture 'MyPlot' in <Sheet [商品清单.xlsx]表二>>

修改表三中A1单元格的宽和高

连接表三

sht_3 = wb.sheets['表三']

查看A1单元格的宽和高

# 查看列宽

sht_3.range('A1').column_width

8.11

# 查看行高

sht_3.range('A1').row_height

13.8

A1单元格高改为15.6,宽改为2.2

sht_3.range('A1').column_width = 2.2

sht_3.range('A1').row_height = 15.6

修改表三B1单元格颜色

# 查看B1单元格颜色

sht_3.range('B1').color

(255, 0, 0)

# 修改B1单元格颜色为黑色

sht_3.range('B1').color = (0,0,0)

写一个自动化的小脚本

def f():

sht_3.range("A1:AZ48").column_width = 1.1

sht_3.range('A1:AZ48').row_height = 7.8

list_1 = pd.read_csv('zaike.csv').values

for i,j in list_1:

sht_3[int(i),int(j)].color = (255,25,0)

f()

list_1 = []

for i in range(30):

for j in range(40):

c = sht_3[i,j].color

if c == (255,0,0):

list_1.append((i,j))

这些小例子都能跑,你可以放自己电脑上运行下,或者手敲每个代码,这样绝对能高效率掌握。

如果对python语法还不熟悉,最好先把框架熟悉一遍,多做些练习。


3. python openpyxl写入excel

代码示例:

import pandas as pd


'''

pip install openpyxl xlwt pandas

'''


def create_excel():


# 按行插入数据,可以再write_data中append([]),

write_data = [

['1212',1,2,3]

]

write_data.append(['1211',1111,2,3])

# 表头格式

excel_list = ['id','A','B','C']

df = pd.DataFrame(write_data,

columns=excel_list)


xlsx_path = 'data_excel.xlsx'

# 生成表格对象

writer = pd.ExcelWriter(xlsx_path)

# 写数据,sheet_name:Excel名

df.to_excel(writer, sheet_name='完整性统计', index=False)


df2 = pd.DataFrame(write_data,

columns=excel_list)

df2.to_excel(writer, sheet_name='表2', index=False)


# 按列插入数据

df3 = pd.DataFrame({

'id':[123,122,121],

'姓名':['丁一','丁二','丁三'],

'年龄':[18,18,18]

}, columns=['id','姓名','年龄'])


df3.to_excel(writer, sheet_name='性别年龄', index=False)

# 保存数据

writer.save()


4. 打开excel文件需要用到openpyxl库中的模块是

谢邀,我一般来说使用pandas(极力推荐)萊垍頭條

写入excel的结果:其实用pandas不仅仅可以转化成excel,还有很多其他的类型,本人用的最多的是转化成csv文件,毕竟就算是excel2016版的也仅能保存160多万行数据。这里给出一些pandas可以转化的文件类型用python处理excel文件主要是第三方模块库xlrd、xlwt、xluntils和pyExcelerator,除此之外,python处理excel还可以用win32com和openpyxl模块。萊垍頭條


5. openxlpy读取excel 数值

用access自动获取excel里的数据的方法就是通过代码的方式导入。如果是对手动导入比较清楚的话,这个实现起来不难。请参考下面的介绍来实现:首先,新建一个工程,在工程中引用如下对象ADO对象(用于连接ACCESS数据库,可用其它方式) 添加一个窗体(from1),在窗体上添加如下控件: 两个文本框,用来显示EXCEL文件路径和ACCESS路径; 四个扭钮,两个用来游览,另两个是导入和退出; 两个通用对话框控件,用来打开ACCESS和EXCEL文件,一个进度条控件,用来显示导入进程。 该实例的导入是将ACCESS数据库中表的字段名单独存放在另外一个表中,导入时按表中所存字段名的顺序进行导入,不是按EXCEL表的顺序导入,请大家注意.这样在实际中是很实用的.因为好多时候EXCEL表中字段顺序和ACCESS中字段顺序有可能不是一致的.代码如下:Dim vOption ExplicitPrivate Sub cmdLoad_Click()Dim excel_app As ObjectDim excel_sheet As ObjectIf txtExcelFile.Text = "" ThenMsgBox "请选择EXCEL表"ElseDim new_value As StringLabel2.Caption = "正在导入,请稍候..." Screen.MousePointer = vbHourglass DoEvents '' Create the Excel application. Set excel_app = CreateObject("Excel.Application") '' Uncomment this line to make Excel visible. excel_app.Visible = True '' Open the Excel spreadsheet. excel_app.Workbooks.open FileName:=txtExcelFile.Text '' Check for later versions. If Val(excel_app.Application.Version) >= 8 Then Set excel_sheet = excel_app.ActiveSheet Else Set excel_sheet = excel_app End If Dim u ''求EXCEL表中记录的条数,以便控制进度条u = 1Do If Trim$(excel_sheet.Cells(u, 1)) = "" Then Exit Do u = u + 1 Loop bar.Max = u - 1 strSQL = "select * from TestValues" yourRecord.open strSQL, myConn, adOpenDynamic, adLockOptimistic ''打开记录集 Dim sql As String sql = "select * from fields order by xue" myRecord.open sql, myConn, adOpenDynamic, adLockBatchOptimistic ''打开字段记录集 myRecord.MoveFirst '' Get data from the Excel spreadsheet and insert '' it into the TestValues table.Dim v ''导入记录,用了两层循环 v = 1 Do If Trim$(excel_sheet.Cells(v, 1)) = "" Then Exit Do ''外层,如果EXCEL表中读取到空行,结束yourRecord.AddNew Dim i For i = 1 To myRecord.RecordCount '' Get the next value. new_value = Trim$(excel_sheet.Cells(v, i)) '' See if it''s blank. ''If Len(new_value) = 0 Then Exit Do '' Insert the value into the database.Dim bb As String bb = myRecord("name") yourRecord(bb) = new_value myRecord.MoveNext Next i bar.Value = v v = v + 1 myRecord.MoveFirst Loop yourRecord.Update '' Comment the rest of the lines to keep '' Excel running so you can see it. '' Close the workbook without saving. excel_app.ActiveWorkbook.Close False '' Close Excel. excel_app.Quit Set excel_sheet = Nothing Set excel_app = Nothing myRecord.CloseyourRecord.CloseSet myRecord = NothingSet yourRecord = NothingLabel2.Caption = "导入完毕" Screen.MousePointer = vbDefault MsgBox "共导入" & Format$(v - 1) & "条记录" End If End SubPrivate Sub Command1_Click()Unload MeEnd SubPrivate Sub Command2_Click(Index As Integer)''寻找ACCESS数据库CommonDialog1.Filter = "ACCESS 文件(*.mdb)|*.mdb"CommonDialog1.CancelError = TrueCommonDialog1.ShowOpentxtAccessFile.Text = CommonDialog1.FileNameEnd SubPrivate Sub Command3_Click()''寻找excel数据库CommonDialog2.Filter = "excel 文件(*.xls)|*.xls"CommonDialog2.CancelError = TrueCommonDialog2.ShowOpentxtExcelFile.Text = CommonDialog2.FileNameEnd SubPrivate Sub Form_Load()Call Module1.lianjietxtAccessFile.Text = datapath End Sub模块(module1)中的代码如下:Public myConn As New ADODB.Connection ''定义连接字符串Public myRecord As New ADODB.Recordset ''定义记录集(字段)Public yourRecord As New ADODB.Recordset ''定义记录集(数据)Public cntoad As Boolean ''是否正常连接Public ml ''姓名字段所在列Public strSQL ''查询字符串Public MyDatabase As Database ''定义数据库名Public MyTable As TableDef, MyField As Field ''定义表名和字段名Public xuehao ''读取字段序号Public goshiRecord As New ADODB.Recordset ''定义记录集(公式)Public hxfyn As BooleanPublic hxfbds '' 公式或条件Public duan ''要统计的字段Public islinshi As Boolean ''是否为临时公式Public leiRecord As New ADODB.Recordset ''定义记录集(工资类别)Public datapath As String ''数据库路径及名Public table As String ''工资表名Public lei As String '' 工资类别Public Sub lianjie() ''打开数据库On Error Resume NextmyConn.CloseDim mySQL As String ''设定连接字符串 mySQL = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;" mySQL = mySQL + "Data Source=" & datapath myConn.ConnectionString = mySQL ''设定连接 myConn.open ''打开连接 myRecord.ActiveConnection = myConn ''设定RecordSeet的连接对象为Connection myRecord.CursorLocation = adUseClientgoshiRecord.ActiveConnection = myConn ''设定RecordSeet的连接对象为ConnectiongoshiRecord.CursorLocation = adUseClient yourRecord.ActiveConnection = myConn ''设定RecordSeet的连接对象为Connection yourRecord.CursorLocation = adUseClientEnd Sub


6. python读取excel指定列

用python读取excel中的一列数据步骤如下:

1、首先打开dos命令窗,安装必须的两个库,命令是:pip3 install xlrd;Pip3 install xlwt。

2、准备好excel。

3、打开pycharm,新建一个excel.py的文件,首先导入支持库import xlrdimport xlwt。

4、要操作excel,首先得打开excel,使用open_workbook(‘路径’),要获取行与列,使用nrows(行),ncols(列),获取具体的值,使用cell(row,col).value。

5、要在excel里写入值,就要使用write属性,重点说明写入是用到xlwt这个支援库,思路是先新建excel,然后新建页签B,然后将一组数据写入到B,最后保存为excel.xls。


7. openpyxl读取excel指定列sheet

  在有关大数据分析Python API的本教程中,我们将学习如何从远程网站检索数据以进行数据科学项目。像baidu,Twitter和Facebook之类的网站都通过其应用程序编程接口(API)向程序员提供某些数据。要使用API,你需要向远程Web服务器发出请求,然后检索所需的数据。

  但是,为什么要使用API而不是可以下载的静态数据集呢?API在以下情况下很有用:

  a.数据变化很快。股票价格数据就是一个例子。重新生成数据集并每分钟下载一次并没有实际意义-这会占用大量带宽,而且速度很慢。

  b.您需要一小部分更大的数据。Reddit评论就是一个例子。如果您只想在Reddit上发表自己的评论该怎么办?下载整个Reddit数据库,然后仅过滤您自己的注释并没有多大意义。

  c.涉及重复计算。Spotify的API可以告诉您音乐的流派。从理论上讲,您可以创建自己的分类器,并使用它对音乐进行分类,但您将永远不会拥有Spotify所拥有的数据。

  在上述情况下,API是正确的解决方案。对于本数据科学教程,我们将查询一个简单的API,以检索有关国际空间站(ISS)的数据。使用API可以节省我们自己进行所有计算的时间和精力。

  大数据分析Python中的API请求

  API托管在Web服务器上。当您www.google.com在浏览器的地址栏中键入内容时,您的计算机实际上是在向www.google.com服务器询问网页,然后该网页返回到您的浏览器。

  API的工作方式几乎相同,除了您的程序要求数据而不是您的Web浏览器询问网页之外。这些数据通常以JSON格式返回(有关更多信息,请参阅有关使用JSON数据的教程)。

  为了获取数据,我们向Web服务器发出请求。然后,服务器将回复我们的数据。在大数据分析Python中,我们将使用请求库来执行此操作。在此大数据分析Python API教程中,我们将为所有示例使用大数据分析Python 3.4。

  请求类型

  有许多不同类型的请求。最常用的一个GET请求用于检索数据。

  我们可以使用一个简单的GET请求从OpenNotify API 检索信息。

  OpenNotify具有多个API端点。端点是用于从API检索不同数据的服务器路由。例如,/commentsReddit API上的端点可能会检索有关注释的信息,而/users端点可能会检索有关用户的数据。要访问它们,您可以将端点添加到API 的基本URL中。

  我们将在OpenNotify上看到的第一个端点是iss-now.json端点。该端点获取国际空间站的当前纬度和经度。如您所见,检索此数据不适用于数据集,因为它涉及服务器上的一些计算,并且变化很快。

  您可以在此处查看OpenNotify上所有端点的列表。

  OpenNotify API 的基本网址是http://api.open-notify.org,因此我们将其添加到所有端点的开头。



  状态码

  我们刚刚发出的请求的状态码为200。向Web服务器发出的每个请求都返回状态代码。状态代码指示有关请求发生的情况的信息。以下是与GET请求相关的一些代码:



  a)200 -一切正常,结果已返回(如果有)

  b)301—服务器正在将您重定向到其他端点。当公司切换域名或更改端点名称时,可能会发生这种情况。

  c)401-服务器认为您未通过身份验证。当您没有发送正确的凭据来访问API时就会发生这种情况(我们将在以后的文章中讨论身份验证)。

  d)400-服务器认为您提出了错误的请求。当您没有正确发送数据时,可能会发生这种情况。

  e)403 —您尝试访问的资源被禁止—您没有正确的权限查看它。

  f)404 -在服务器上找不到您尝试访问的资源。

  现在http://api.open-notify.org/iss-pass,根据API文档,向不存在的端点发出GET请求。

  击中正确的终点

  iss-pass不是有效的端点,因此我们得到了一个404状态码作为相应。.json正如API文档所述,我们忘记在最后添加。

  现在,我们将向发出GET请求http://api.open-notify.org/iss-pass.json。



  查询参数

  您将在上一个示例中看到,我们得到了一个400状态码,表示请求错误。如果您查看OpenNotify API的文档,我们会发现ISS Pass端点需要两个参数。

  当ISS下次通过地球上的给定位置时,将返回ISS Pass端点。为了对此进行计算,我们需要将位置的坐标传递给API。为此,我们传递了两个参数-纬度和经度。

  为此,我们可以在params请求中添加可选的关键字参数。在这种情况下,我们需要传递两个参数:

  1)lat —我们想要的位置的纬度。

  2)lon —我们想要的位置的经度。

  我们可以使用这些参数制作字典,然后将它们传递给requests.get函数。

  我们还可以通过将查询参数添加到url中来直接做同样的事情,如下所示:http://api.open-notify.org/iss-pass.json?lat=40.71&lon=-74。

  将参数设置为字典几乎总是可取的,因为requests它可以处理一些事情,例如正确设置查询参数的格式。

  我们将使用纽约市的坐标进行请求,然后查看得到的答复。



  b'{n "message": "success", n "request": {n "altitude": 100, n "datetime": 1441417753, n "latitude": 40.71, n "longitude": -74.0, n "passes": 5n }, n "response": [n {n "duration": 330, n "risetime": 1441445639n }, n {n "duration": 629, n "risetime": 1441451226n }, n {n "duration": 606, n "risetime": 1441457027n }, n {n "duration": 542, n "risetime": 1441462894n }, n {n "duration": 565, n "risetime": 1441468731n }n ]n}'

  b'{n "message": "success", n "request": {n "altitude": 100, n "datetime": 1441417753, n "latitude": 40.71, n "longitude": -74.0, n "passes": 5n }, n "response": [n {n "duration": 329, n "risetime": 1441445639n }, n {n "duration": 629, n "risetime": 1441451226n }, n {n "duration": 606, n "risetime": 1441457027n }, n {n "duration": 542, n "risetime": 1441462894n }, n {n "duration": 565, n "risetime": 1441468731n }n ]n}'

  使用JSON数据

  您可能已经注意到,响应的内容之前是a string(尽管它显示为bytes对象,但是我们可以使用轻松地将内容转换为字符串response.content.decode("utf-8"))。

  字符串是我们将信息来回传递给API的方式,但是很难从字符串中获取我们想要的信息。我们如何知道如何解码返回的字符串并在大数据分析Python中使用它?我们如何altitude从字符串响应中找出ISS的含义?

  幸运的是,有一种名为JavaScript Object Notation(JSON)的格式。JSON是一种将列表和字典之类的数据结构编码为字符串的方法,以确保它们易于被机器读取。JSON是将数据来回传递给API的主要格式,大多数API服务器将以JSON格式发送其响应。

  json套件随附大数据分析Python强大的JSON支持。该json软件包是标准库的一部分,因此我们无需安装任何程序即可使用它。我们既可以将列表和字典转换为JSON,也可以将字符串转换为列表和字典。就我们的ISS Pass数据而言,它是一个字典,编码为JSON格式的字符串。

  json库有两种主要方法:

  1)dumps —接收一个大数据分析Python对象,并将其转换为字符串。

  2)loads —接收JSON字符串,并将其转换为大数据分析Python对象。



  从API请求获取JSON

  通过使用.json()响应上的方法,您可以将响应的内容作为大数据分析Python对象获取。



  {'response': [{'risetime': 1441456672, 'duration': 369}, {'risetime': 1441462284, 'duration': 626}, {'risetime': 1441468104, 'duration': 581}, {'risetime': 1441474000, 'duration': 482}, {'risetime': 1441479853, 'duration': 509}], 'message': 'success', 'request': {'latitude': 37.78, 'passes': 5, 'longitude': -122.41, 'altitude': 100, 'datetime': 1441417753}}

  内容类型

  服务器不仅会在生成响应时发送状态码和数据。它还发送包含有关如何生成数据以及如何对其进行解码的信息的元数据。这存储在响应头中。在大数据分析Python中,我们可以使用headers响应对象的属性来访问它。

  标头将显示为字典。在标题中,content-type是目前最重要的键。它告诉我们响应的格式以及如何对其进行解码。大数据分析Python API入门教程https://www.aaa-cg.com.cn/data/2308.html对于OpenNotify API,格式为JSON,这就是为什么我们可以json更早地使用包对其进行解码的原因。



  寻找太空中的人数

  OpenNotify还有一个API端点astros.json。它告诉你当前有多少人在太空中。相应的格式可以在这里找到。


  9

  {'number': 9, 'people': [{'name': 'Gennady Padalka', 'craft': 'ISS'}, {'name': 'Mikhail Kornienko', 'craft': 'ISS'}, {'name': 'Scott Kelly', 'craft': 'ISS'}, {'name': 'Oleg Kononenko', 'craft': 'ISS'}, {'name': 'Kimiya Yui', 'craft': 'ISS'}, {'name': 'Kjell Lindgren', 'craft': 'ISS'}, {'name': 'Sergey Volkov', 'craft': 'ISS'}, {'name': 'Andreas Mogensen', 'craft': 'ISS'}, {'name': 'Aidyn Aimbetov', 'craft': 'ISS'}], 'message': 'success'}

  大数据分析Python API数据科学教程:后续步骤

  现在,您已经完成了大数据分析Python API教程,现在应该可以访问简单的API并发出get请求了。requests在我们的dataquest API和抓取课程中,还有其他几种类型,您可以了解更多信息以及与API身份验证一起使用。

  建议的其他后续步骤是阅读请求文档,并使用Reddit API。有一个名为PRAW 的程序包,它使在大数据分析Python中使用Reddit API更加容易,但是建议requests首先使用它来了解一切的工作原理。

https://www.toutiao.com/i6832146415016215043/


8. python openpyxl读取excel数据

openpyxl是一个第三方库,可以处理xlsx格式的Excel文件。

openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件,xls和xlsx之间转换容易, 注意:如果文字编码是“gb2312” 读取后就会显示乱码,请先转成Unicode。

openpyxl模块有三大类(首字母大写):

1.Workbook

是对工作簿的抽象(工作簿,一个excel文件包含多个sheet。)

2.Worksheet

是对表格的抽象(工作表,一个workbook有多个,表名识别,如“sheet1”,“sheet2”等。)

3.Cell

是对单元格的抽象(单元格,存储数据对象)


顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
点击我更换图片