GVKun编程网logo

Openpyxl:只读模式,如何获取超链接(openpyxl可以读取xls文件吗)

6

本篇文章给大家谈谈Openpyxl:只读模式,如何获取超链接,以及openpyxl可以读取xls文件吗的知识点,同时本文还将给你拓展13:openpyxl读写xlsx文件、25.xlrd、xlwt和o

本篇文章给大家谈谈Openpyxl:只读模式,如何获取超链接,以及openpyxl可以读取xls文件吗的知识点,同时本文还将给你拓展13: openpyxl 读写 xlsx 文件、25.xlrd、xlwt和openpyxl模块的比较和使用、openpyxl、Openpyxl 1.8.5:使用openpyxl读取在单元格中键入的公式的结果等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Openpyxl:只读模式,如何获取超链接(openpyxl可以读取xls文件吗)

Openpyxl:只读模式,如何获取超链接(openpyxl可以读取xls文件吗)

如何解决Openpyxl:只读模式,如何获取超链接?

在常规(非只读模式)中,我可以使用以下方法从单元格获取超链接:

if not sheet.cell(row=i_row,column=i_col).hyperlink == None:
    print(cell.hyperlink.location)

但是当我以只读模式执行此操作时,出现错误(预期):

<class ''AttributeError''> ''ReadOnlyCell'' object has no attribute ''hyperlink''

有什么方法可以让我在只读模式下从单元格获取超链接?

我必须使用只读模式,因为我正在尝试解析工作簿中的辅助工作表(~200 行),其中主工作表是 ~100k 行,我不能一直花时间加载整个工作簿在处理之前。我的其余代码在只读模式下运行良好。

对可以解决类似问题的替代模块开放。如果没有 RO 模式,我的代码每个文件需要 4 秒,使用它需要 0.25 秒。

感谢您抽出宝贵时间。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

13: openpyxl 读写 xlsx 文件

13: openpyxl 读写 xlsx 文件

1.1 openpyxl 基本使用

  1、openpyxl 将 xlsx 读成 json 格式

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
import json
from openpyxl import load_workbook


def read_xlsx_to_json(file_home):
    wb = load_workbook(filename= file_home)
    sheet_ranges = wb[''Sheet1'']
    ws = wb[''Sheet1'']
    rows = ws.rows    #获取表格所有行和列,两者都是可迭代的
    thead = [col.value for col in rows.next()]  # 表格中第一行作为key
    data = []
    for row in rows:
        line = [col.value for col in row]
        tmp_dic = {}
        for index, val in enumerate(thead):
            tmp_dic[val] = line[index]
        data.append(tmp_dic)
    return json.dumps(data, ensure_ascii=False,indent=4)


# print read_xlsx_to_json(''dd.xlsx'')


''''''
[
    {
        "员工编号": null, 
        "部门名称": "HLT集团", 
        "手机号": 1393999934, 
        "角色": null, 
        "直属上级": null, 
        "职位": "CEO", 
        "企业微信唯一标识": null, 
        "相关部门": null, 
        "姓名": "王五", 
        "邮箱": "zhangsan@qq.com", 
        "职能": null, 
        "性别": "男"
    }, 
    {
        "员工编号": null, 
        "部门名称": "政府事业部", 
        "手机号": 61616116161616, 
        "角色": null, 
        "直属上级": "王五", 
        "职位": "首席运营官", 
        "企业微信唯一标识": null, 
        "相关部门": null, 
        "姓名": "李四", 
        "邮箱": "lisi@qq.com", 
        "职能": null, 
        "性别": "女"
    }
]
''''''
openpyxl 将 xlsx 读成 json 格式

  2、openpyxl 创建一个 xlsx 文件

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import json
from openpyxl import Workbook


# 创建 一个 xlsx 文件
def create_xlsx(data_list):
    wb = Workbook()  # 创建工作簿
    ws = wb.active  # 激活工作表
    ws1 = wb.create_sheet("Mysheet")  # 创建mysheet表
    ws.title = "New Title"  # 表明改为New Title
    ws.sheet_properties.tabColor = "1072BA"  # 颜色

    for row_index, row in enumerate(data_list):
        thead_list = data_list[0]  # [''id'', ''name'', ''sex'', ''age'']
        row_index += 1  # excel中 行是从 1 开始计算的

        for column_index, thead in enumerate(thead_list):
            column_index += 1  # excel中 行是从 1 开始计算的

            if row_index == 1:            #第一步: 填充第一行数据,表头(id  name  sex  age)
                d = ws.cell(row=1, column=column_index, value=thead)
            else:                         #第二步: 新建表中数据
                d = ws.cell(row=row_index, column=column_index, value=row[column_index-1])
        wb.save(''test.xlsx'')#保存


data_list = [
    [''id'',''name'',''sex'',''age''],
    [''1'',''张三'','''',''18''],
    [''2'',''李四'','''',''19''],
    [''3'',''王五'','''',''20''],
]
create_xlsx(data_list)
openpyxl 创建一个 xlsx 文件

      

  3、openpyxl 修改 第十列的值

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import json
from openpyxl import load_workbook


# 将表中第十行的值统一修改为 ‘new val’
def change_xlsx(file_home):
    wb = load_workbook(filename= file_home)
    sheet_ranges = wb[''Sheet1'']
    ws = wb[''Sheet1'']
    rows = ws.rows    #获取表格所有行和列,两者都是可迭代的
    for row, line in enumerate(rows):
        if row != 0:
            row += 1
            ws.cell(row=row, column=10).value = ''new val''
    wb.save(''f5.xlsx'')


change_xlsx(''dd.xlsx'')
openpyxl 修改第四列的值
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from openpyxl import load_workbook

file_home = ''f5.xlsx''
wb = load_workbook(filename= file_home)
sheet_ranges = wb[''Sheet1'']
ws = wb[''Sheet1'']

# 将第二行,第二列的值修改成 ''修改后的值''
ws.cell(row=2, column=2).value = ''修改后的值''
wb.save(''f6.xlsx'')
openpyxl 修改基本用法

  4、在 xlsx 文件后面添加新的内容(插入时按照数据顺序)

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import json, sys
from openpyxl import load_workbook


# 在xlsx文件最后添加新的数据,会按照顺序插入到xlsx文件对应位置
def append_xlsx(file_home, data_list):
    ''''''
    :param file_home: xlsx文件路径
    :param data_list: 插入的数据
    ''''''
    wb = load_workbook(filename= file_home)
    sheet_ranges = wb[''Sheet1'']
    ws = wb[''Sheet1'']
    print data_list
    ws.append(data_list)
    wb.save(''f7.xlsx'')


data_list = [''邮箱'', '''', ''手机号'', ''性别'']
append_xlsx(''dd.xlsx'',data_list)
在 xlsx 文件后面添加新的内容

 

25.xlrd、xlwt和openpyxl模块的比较和使用

25.xlrd、xlwt和openpyxl模块的比较和使用

xlrd、xlwt和openpyxl模块的比较:
1)xlrd:对xls、xlsx、xlsm文件进行读操作–读操作效率较高,推荐
2)xlwt:对xls文件进行写操作–写操作效率较高,但是不能执行xlsx文件
3)openpyxl:对xlsx、xlsm文件进行读、写操作–xlsx写操作推荐使用

 

一、xlrd:对xls、xlsx文件进行读操作
1.获取工作簿对象:xlrd.open_workbook()
workBook = xlrd.open_workbook(filemname):打开Excel文件读取数据
注:filemname为文件名以及路径,如果路径或者文件名有中文给前面加一个r表示原生字符。

import xlrd
filename=r''D:\360极速浏览器下载\文件阅读记录表.xls''
workBook=xlrd.open_workbook(filename)

2.获取工作表(sheet)对象
1)workBook.sheet_names():获取所有sheet页的名字,返回一个列表
2)sheetName = workBook.sheet_by_name(‘sheet1’):根据sheet页的名字获取指定表名的表,返回的是一个对象
3)sheetName = workbook.sheet_by_index(0):根据sheet索引获取对应sheet表(索引是从0开始的),返回的是一个对象

3.获取sheet的名称:name
sheetName.name:获取sheet的名称

4.获取行数和列数:nrows、ncols
sheetName.nrows:获取表格的总行数
sheetName.ncols:获取表格的总列数

5.获取整行或整列的值(数组):row_values、col_values
rows = sheetName.row_values(0)  # 获取第一行内容,返回一个列表
cols = sheetName.col_values(0)  # 获取第一列内容,返回一个列表

6.获取指定单元格的值:cell(a,b).value、row(1)[0].value
sheetName.cell(1,0).value:获取第2行第一列的单元格数据
sheetName.row(1)[0].value:获取第2行第一列的单元格数据

7.获取单元格内容的数据类型:ctype
sheetName.cell(1,0).ctype
注:返回为代表数据类型的值,编码分别代表:ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

二、xlwt:对xls文件进行写操作
1.新建工作簿:xlwt.Workbook()
workBook = xlwt.Workbook() :新建工作簿

2.在工作簿中新建sheet页:add_sheet()
table = workBook .add_sheet(‘Over’,cell_overwrite_ok=True) # 如果对同一单元格重复操作会发生overwrite Exception,cell_overwrite_ok为可覆盖
sheet = workBook .add_sheet(sheet_name):新增sheet表

import xlwt
wb=xlwt.Workbook(encoding=''utf-8'')  # 创建一个工作薄
sheet=wb.add_sheet(''文件阅读记录信息表'') # 创建一个工作表

3.向表格中写入数据:write(i,j,value)
sheet.write(i,j,value) :向单元格(i,j)写入数据value

4.保存工作簿:save()
workBook.save(path)


三、openpyxl:对xlsx文件进行写操作
1.新建工作簿:openpyxl.Workbook()
workBook = openpyxl.Workbook() :新建工作簿

2.在工作簿中新建sheet页:create_sheet()
sheet = workBook .create_sheet(sheet_name):新增sheet表:sheet_name

3.向表格中写入数据:cell(i,j,value) --索引从1计数
sheet= workBook .active :获得当前活跃的工作页,默认为第一个工作页
sheet.cell(i,j,value) :向单元格(i,j)第i行第j列写入数据value
注意:行号和列号都从1开始计数,即(1,1)为第一行第一列

4.保存工作簿:save()
workBook .save(path)

四、openpyxl:对xlsx文件进行读操作
1.获取工作簿对象:openpyxl.load_workbook()
workBook = openpyxl.load_workbook(filemname):读取xlsx文件
注:filemname为文件名以及路径,如果路径或者文件名有中文给前面加一个r表示原生字符。

2.获取工作表(sheet)对象
1)workBook.get_sheet_names():获取所有sheet页的名字(所有工作表名)
2)sheetName = workBook.get_sheet_by_name(‘sheet1’):根据sheet页的名字获取指定表名的表
3)sheetName = workBook.worksheets[0]:根据sheet索引获取对应sheet表

3.获取sheet的名称:title
sheetName.title:获取sheet的名称

4.获取行数和列数:max_row、max_column
sheetName.max_row:获取表格的总行数
sheetName.max_column:获取表格的总列数

5.获取整行或整列的值(数组):rows[i]、columns[i]
rows = sheetName.rows:获取每一行内容,这是一个生成器,里面是每一行数据,每一行数据由一个元组类型包裹
cols = sheetName.columns :获取每一列内容,同上
sheetName.rows[0]:获取第一行内容–索引从0计数
sheetName.columns[0]:获取第一列内容–索引从0计数

6.获取指定单元格的值:cell(a,b).value–索引从1计数
sheetName[‘A1’].value:获取第1行第一(A)列的单元格数据
sheetName.cell(1,1).value:获取第1行第一列的单元格数据
注:此处的行数和列数都是从1开始计数的,而在xlrd中是由0开始计数的

 

openpyxl

openpyxl

参考连接:https://openpyxl.readthedocs.io/en/stable/

openpyxl是一个Python库,用于读取/写入Excel  xlsx / xlsm / xltx / xltm文件

安装 pip install openpyxl

在文件中插入图片的文件(缩略图) 需要安装 PIL  模块 我在另一篇博客有提

写入的方式

wb = Workbook()   创建文件对象

ws = wb.active 获取第一个 sheet  对其名字以及单元格的格式都可以进行控制

单个单元格中写入数据(用处不大 可以用于修改数据)

ws[''A2'']=数字 字符串 时间

多个单元个写入 可使用列表进行写入

比如 : 要写入的数据为

file_data = [[''姓名'', ''性别'', ''写入时间'', ''得分'']

[''张三'', ''男'', ''2019-5.20'',  ''90'']

[''李四'', ''女'', ''2019-5-20'', ''98''] 

。。。]

from openpyxl import Workbook

def export_fract_excel(data: list, file_name):
  wb = Workbook()   # 创建文件
  ws = wb.active  # 创建 sheet
  #  列表导入

  for i in data:  
    ws.append(i)

  # 拼接导出名 可以自行拼接 可选
  name = ''''.join([random.choice(string.ascii_letters) for _ in range(2)])
  name = ''{}_{}.xlsx''.format(name,file_name)
  try:
    Bir_path = os.path.join(DefaultConfig.PATH, ''Bir'')
    if not os.path.exists(Bir_path):
    os.mkdir(Bir_path)
    file_name = os.path.join(Bir_path, name)
    wb.save(file_name )
    return file_name 
  except Exception as e:
    file_name = ''''
  return file_name 

def make_excel(file_data, file_name):

  now = datetime.now()
  fn = export_fract_excel(file_data, file_name)
  r = make_response(send_file(fn, as_attachment=True))
  return r

导出的数据格式

 

Openpyxl 1.8.5:使用openpyxl读取在单元格中键入的公式的结果

Openpyxl 1.8.5:使用openpyxl读取在单元格中键入的公式的结果

我在一张Excel工作表中打印一些公式:

wsOld.cell(row = 1, column = 1).value = "=B3=B4"

但是我不能将其结果用于实现其他一些逻辑,例如:

if((wsOld.cell(row=1, column=1).value)=''true''):    # copy the 1st row to another sheet

即使当我尝试在命令行中打印结果时,我最终也会打印公式:

>>> print(wsOld.cell(row=1, column=1))>>> =B3=B4

如何在单元格中而不是公式本身中获得公式的结果?

答案1

小编典典

openpyxl支持公式或公式的值。您可以data_only在打开工作簿时使用该标志选择哪个。但是,openpyxl不会也不会计算公式的结果。有一些像pycel这样的库,据称可以做到这一点。

我们今天的关于Openpyxl:只读模式,如何获取超链接openpyxl可以读取xls文件吗的分享就到这里,谢谢您的阅读,如果想了解更多关于13: openpyxl 读写 xlsx 文件、25.xlrd、xlwt和openpyxl模块的比较和使用、openpyxl、Openpyxl 1.8.5:使用openpyxl读取在单元格中键入的公式的结果的相关信息,可以在本站进行搜索。

本文标签: