想了解使用pythonxlrd从Excel单元格获取公式的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于python获取excel单元格内容的相关问题,此外,我们还将为您介绍关于excel2
想了解使用python xlrd从Excel单元格获取公式的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于python获取excel单元格内容的相关问题,此外,我们还将为您介绍关于excel2016单元格里的公式怎么显示 显示excel单元格中公式的设置方法、Python - 解析 Excel 文件 / xlrd 和 openpyxl 之间的差异(日期系统和单元格值类型)、Python 3使用xlrd+xlwt读取/写入Excel数据、Python Excel 操作 | xlrd+xlwt 模块笔记的新知识。
本文目录一览:- 使用python xlrd从Excel单元格获取公式(python获取excel单元格内容)
- excel2016单元格里的公式怎么显示 显示excel单元格中公式的设置方法
- Python - 解析 Excel 文件 / xlrd 和 openpyxl 之间的差异(日期系统和单元格值类型)
- Python 3使用xlrd+xlwt读取/写入Excel数据
- Python Excel 操作 | xlrd+xlwt 模块笔记
使用python xlrd从Excel单元格获取公式(python获取excel单元格内容)
我必须将 算法从Excel工作表移植到python代码, 但必须对 Excel文件中的算法 进行 反向工程 。
Excel工作表非常复杂,它包含许多单元格,在这些单元格中有引用其他单元格的公式(也可以包含公式或常数)。
我的想法是使用python脚本分析工作表,以构建一种单元格之间的依存关系表,即:
A1取决于B4,C5,E7公式:“ = sqrt(B4)+ C5 * E7”
A2取决于B5,C6公式:“ = sin(B5)* C6”
…
所述xlrd蟒模块允许读取XLS工作簿但此刻我可以访问到 的值
的单元,而不是的 公式 。
例如,使用以下代码,我可以简单地获取单元格的值:
import xlrd#open the .xls filexlsname="test.xls"book = xlrd.open_workbook(xlsname)#build a dictionary of the names->sheets of the booksd={}for s in book.sheets(): sd[s.name]=s#obtain Sheet "Foglio 1" from sheet names dictionarysheet=sd["Foglio 1"]#print value of the cell J141print sheet.cell(142,9)
无论如何,似乎没有办法从 .cell(…)
方法返回的Cell对象中获取公式。他们在文档中说可以获取该公式的字符串版本(英文,因为在Excel文件中没有存储有关函数名称转换的信息)。他们谈论
Name 和 Operand 类中的公式(表达式),无论如何我都无法理解如何通过必须包含它们的 Cell 类实例来获取这些类的实例。
您能否建议一个从单元格获取公式文本的代码段?
答案1
小编典典[免责声明]:我是的作者/维护者xlrd
。
公式文本的文档参考中涉及“名称”公式。阅读文档开头附近的“命名引用,常量,公式和宏”部分。这些公式在工作表范围或全书范围与名称相关联;它们与单个单元格无关。示例:PI
映射到=22/7
,SALES
映射到=Mktng!$A$2:$Z$99
。编写名称-
公式反编译器以支持检查已定义名称的更简单和/或常见用法。
一般而言,公式有几种:单元格,共享和数组(都直接或间接与单元格关联),名称,数据验证和条件格式。
从字节码到文本反汇编通用公式是一个“正在进行中”的过程。请注意,假设它可用,那么您将需要解析文本公式以提取单元格引用。正确地解析Excel公式并非易事。与HTML一样,使用正则表达式看起来很简单,但不起作用。最好直接从公式字节码中提取引用。
还要注意,基于单元格的公式可以引用名称,而名称公式可以同时引用单元格和其他名称。因此,有必要从基于单元格和名称的公式中提取单元格和名称引用。获得有关共享公式的信息可能对您很有用;否则解析以下内容:
B2 =A2B3 =A3+B2B4 =A4+B3B5 =A5+B4...B60 =A60+B59
您需要自己推断B3:B60
公式之间的相似性。
在任何情况下,以上任何一种方法都不可能在不久的xlrd
将来可用-优先事项位于其他地方。
excel2016单元格里的公式怎么显示 显示excel单元格中公式的设置方法
excel是我们常用的办公软件,我们为了办公效率会在表格里加入一些公式,那么excel2016单元格里的公式怎么显示?下面小编带来显示excel单元格中公式的设置方法,希望对大家有所帮助
excel是我们常用的办公软件,我们为了办公效率会在表格里加入一些公式,那么excel2016单元格里的公式怎么显示?下面小编带来显示excel单元格中公式的设置方法,希望对大家有所帮助。
显示excel单元格中公式的设置方法:
首先我们打开一个表格
然后点击上方的功能选项卡
在右侧找到显示公司的命令,点击显示公式命令。
然后我们在下方的单元格中就可以看到单元格中的公式了
如果单元格显示不全的话,我们可以拖动单元格来调节大小
总结
以上是小编为你收集整理的excel2016单元格里的公式怎么显示 显示excel单元格中公式的设置方法全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
Python - 解析 Excel 文件 / xlrd 和 openpyxl 之间的差异(日期系统和单元格值类型)
如何解决Python - 解析 Excel 文件 / xlrd 和 openpyxl 之间的差异(日期系统和单元格值类型)?
由于 xlrd 已弃用 xlsx 文件的解析,我被迫将我的 excel 文件解析器从 xlrd 迁移到 openpyxl。
截至目前,我发现不清楚如何确定日期系统格式,以及使用 openpyxl 确定给定单元格值的数据类型。
我想知道在 openpyxl 和 xlrd 中获取这些值的等效方法。
例如,我可以看到:
使用 book.datemode
在 xlrd 中获取工作簿的日期系统在 xlrd 中获取单元格值的数据类型是通过 cell.ctype == xlrd.XL_CELL_EMPTY/XL_CELL_TEXT/XL_CELL_NUMBER 等等
我一直在查看 openpyxl 文档 here,但目前对如何做我想做的事情没有太多运气。
这是我目前的代码:
from openpyxl import load_workbook
from ext.falcon.errors import HTTPError
book = load_workbook(self._file.read())
sheet = book.active
for row in range(sheet.rows):
rows.append(pythonize_xl_row(sheet.row(row),book.datemode)) # date system issue
def pythonize_xl_row(row,datemode):
result = []
for i,cell in enumerate(row):
if cell.ctype in [xlrd.XL_CELL_EMPTY,xlrd.XL_CELL_BLANK]: # cell value issue
value = ""
elif cell.ctype == xlrd.XL_CELL_TEXT: # cell value issue
value = cell.value.strip()
elif cell.ctype == xlrd.XL_CELL_NUMBER: # cell value issue
value = str(cell.value)
if value.endswith(".0"):
value = str(int(cell.value))
elif cell.ctype == xlrd.XL_CELL_DATE: # cell value issue
value = xlrd.xldate.xldate_as_datetime(cell.value,datemode).strftime(
"%Y-%m-%d %H:%M:%s"
)
elif cell.ctype == xlrd.XL_CELL_BOOLEAN: # cell value issue
value = str(cell.value == 1)
else:
raise HTTPError(
400,"Invalid cell type at row {}: {}".format(i,cell.ctype)
)
result.append(value)
return result
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
Python 3使用xlrd+xlwt读取/写入Excel数据
开发前置环境
- 安装Python(如Python 3.7)
- 安装Office办公软件(或WPS Office)
- 安装开发工具(如PyCharm,下载地址:https://www.jetbrains.com/pycharm/download)
1 xlrd模块读取Excel
xlrd为Python第三方模块,用来读取Excel表格数据(仅支持.xls格式)。
1.1 xlrd常用函数
import xlrd
# 读取Excel文件
data = xlrd.open_workbook("data1.xls")
# print(data.sheet_loaded(0)) # 加载索引为0的工作表 True
# data.unload_sheet(0) # 卸载
# print(data.sheet_loaded(0)) # 未被加载,False
# print(data.sheet_loaded(1)) # True
print(data.sheets()) # 获取全部sheet [Sheet 0:<Sheet1>, Sheet 1:<Sheet2>, Sheet 2:<Sheet3>]
print(data.sheets()[0]) # 获取指定索引的工作表对象 Sheet 0:<Sheet1>
print(data.sheet_by_index(0)) # 根据索引获取工作表 Sheet 0:<Sheet1>
print(data.sheet_by_name('Sheet1')) # 根据名字sheetname(区分大小写)获取工作表 Sheet 0:<Sheet1>
print(data.sheet_names()) # 获取所有工作表的name ['Sheet1', 'Sheet2', 'Sheet3']
# 查看共有多少个工作表
print(len(data.sheet_names())) # 返回所有工作表的名称组成的list的长度 3
print(data.nsheets) # 返回excel工作表的数量 3
data1.xls——Sheet1:
1.2 xlrd操作Excel行
import xlrd
data = xlrd.open_workbook("data1.xls")
# 操作excel行
sheet1 = data.sheet_by_index(0) # 获取第一个工作表
print(sheet1.nrows) # 获取sheet下的有效行数 11
sheet2 = data.sheet_by_index(1) # 获取第2个工作表
print(sheet2.nrows) # 获取sheet下的有效行数 10
print(sheet1.row(0)) # 输出第一行数据
# [text:'1月份销售额明细表', empty:'', empty:'', empty:'', empty:'', empty:'', empty:'']
print(sheet1.row(1)) # 输出第2行数据,返回该行单元格对象组成的列表
# [text:'日期', text:'货号', text:'颜色', text:'尺码', text:'原价', text:'折扣', text:'备注']
print(sheet1.row_types(1)) # 获取单元格的数据类型,返回指定行数据的数据类型
# (xlrd单元格数据类型表示:0:empty,1:string,2:number,3:date,4:boolean,5:error)
# array('B', [1, 1, 1, 1, 1, 1, 1])
print(sheet1.row(1)[2]) # 获取单元格的数据类型 text:'颜色'
print(sheet1.row(1)[2].value) # 获取单元格value 颜色
print(sheet1.row_values(1)) # 得到指定行单元格的值 ['日期', '货号', '颜色', '尺码', '原价', '折扣', '备注']
print(sheet1.row_len(1)) # 得到单元格的长度 7
1.3 xlrd操作Excel列
import xlrd
data = xlrd.open_workbook("data1.xls")
# 操作excel列
sheet1 = data.sheet_by_index(0) # 获取第一个工作表
print(sheet1.ncols) # 获取工作表有效列数
print(sheet1.col(1)) # 该列单元格对象组成的列表
# [empty:'', text:'货号', text:'X0001', text:'X0002', text:'X0003', text:'X0004', text:'X0005', text:'X0006', text:'X0007', text:'X0008', text:'X0009']
print(sheet1.col(1)[2]) # text:'X0001'
print(sheet1.col(1)[2].value) # X0001
print(sheet1.col_values(1)) # 返回该列所有单元格的value组成的列表
# ['', '货号', 'X0001', 'X0002', 'X0003', 'X0004', 'X0005', 'X0006', 'X0007', 'X0008', 'X0009']
print(sheet1.col_types(1)) # 获取该列单元格的数据类型 [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
1.4 xlrd操作Excel单元格
import xlrd
data = xlrd.open_workbook("data1.xls")
# 操作excel单元格
sheet1 = data.sheet_by_index(0) # 获取第一个工作表
print(sheet1.cell(1,2)) # text:'颜色'
# 获取单元格数据类型
print(sheet1.cell_type(1,2)) # 1
print(sheet1.cell(1,2).ctype) # 1
# 获取单元格的值
print(sheet1.cell(1,2).value) # 获取第二行,第三列单元格的值 颜色
print(sheet1.cell_value(1,2)) # 颜色
2 xlwt写入Excel
xlwt为Python第三方模块,用来写入Excel表格数据(仅支持.xls格式)。
2.1 xlwt写入Excel步骤
- 创建工作簿
- 创建工作表
- 填充工作表内容
- 保存文件
import xlwt
# 第一步:创建工作簿
wb = xlwt.Workbook()
# 第二步:创建工作表
ws = wb.add_sheet("CNY")
# 第三步:填充数据
ws.write_merge(0, 1, 0, 5, "2019年货币兑换表")
# 写入货币数据
data = (("Date", "英镑", "人民币", "港币", "日元", "美元"),
("01/01/2019", 8.722551, 1, 0.877885, 0.062722, 6.8759),
("02/01/2019", 8.634922, 1, 0.875731, 0.062773, 6.8601))
for i,item in enumerate(data):
for j,val in enumerate(item):
ws.write(i+2, j, val)
# 创建第二个工作表
wsImage = wb.add_sheet("image")
# 写入图片
wsImage.insert_bitmap("2021-07-01_172956.bmp", 0, 0)
# 第四步:保存
wb.save("2019-CNY.xls")
执行效果:
2.2 写入格式化(添加样式)
import xlwt
titleStyle = xlwt.XFStyle() # 初始化样式
titleFont = xlwt.Font()
titleFont.name = "宋体"
titleFont.bold = True # 加粗
titleFont.height = 11*20 # 字号
titleFont.colour_index = 0x08 # 字体颜色
titleStyle.font = titleFont
# 单元格对齐方式
cellAlign = xlwt.Alignment()
cellAlign.horz = 0x02 # 水平居中
cellAlign.vert = 0x01 # 垂直居中
titleStyle.alignment = cellAlign
# 边框
borders = xlwt.Borders()
borders.right = xlwt.Borders.DASHED
borders.bottom = xlwt.Borders.DottED
titleStyle.borders = borders
# 背景颜色
dataStyle = xlwt.XFStyle()
bgColor = xlwt.Pattern()
bgColor.pattern = xlwt.Pattern.soLID_PATTERN
bgColor.pattern_fore_colour = 22 # 背景颜色
dataStyle.pattern = bgColor
# 第一步:创建工作簿
wb = xlwt.Workbook()
# 第二步:创建工作表
ws = wb.add_sheet("CNY")
# 第三步:填充数据
ws.write_merge(0, 1, 0, 5, "2019年货币兑换表", titleStyle) # 合并单元格,1~2行,1~6列
# 写入货币数据
data = (("Date", "英镑", "人民币", "港币", "日元", "美元"),
("01/01/2019", 8.722551, 1, 0.877885, 0.062722, 6.8759),
("02/01/2019", 8.634922, 1, 0.875731, 0.062773, 6.8601))
for i,item in enumerate(data):
for j,val in enumerate(item):
if j==0:
ws.write(i+2, j, val, dataStyle)
else:
ws.write(i+2, j, val)
# 创建第二个工作表
wsImage = wb.add_sheet("image")
# 写入图片
wsImage.insert_bitmap("2021-07-01_172956.bmp", 0, 0)
# 第四步:保存
wb.save("2019-CNY.xls")
执行效果:
3. 实战:基于xlrd模块实现考试系统题库管理
3.1 Excel导入试题到数据库的操作步骤
- 通过xlrd模块读取Excel数据
- 通过pyMysqL模块连接数据库
- 组装数据、执行插入操作
- 关闭数据库连接
建表sql:
DROP TABLE IF EXISTS `question`;
CREATE TABLE `question` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`subject` varchar(255) DEFAULT NULL COMMENT '题目',
`questionType` varchar(255) DEFAULT NULL COMMENT '题型',
`optionA` varchar(255) DEFAULT NULL COMMENT '选项A',
`optionB` varchar(255) DEFAULT NULL COMMENT '选项B',
`optionC` varchar(255) DEFAULT NULL COMMENT '选项C',
`optionD` varchar(255) DEFAULT NULL COMMENT '选项D',
`score` int(11) DEFAULT NULL COMMENT '分值',
`answer` varchar(255) DEFAULT NULL COMMENT '正确答案',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHaraCTER SET = utf8;
MysqLhelper.py:
import pyMysqL
class dbhelper():
def __init__(self,host,port,user,passwd,db,charset="utf8"):
self.host=host
self.port=port
self.user=user
self.passwd=passwd
self.db=db
self.charset=charset
#创建一个链接
def connection(self):
#1. 创建连接
self.conn = pyMysqL.connect(host=self.host, port=self.port, user=self.user, passwd=self.passwd, db=self.db,charset=self.charset)
#2. 创建游标
self.cur = self.conn.cursor()
#关闭链接
def closeconnection(self):
self.cur.close()
self.conn.close()
#查询一条数据
def getonedata(self,sql):
try:
self.connection()
self.cur.execute(sql)
result=self.cur.fetchone()
self.closeconnection()
except Exception:
print(Exception)
return result
#查询多条数据
def getalldata(self,sql):
try:
self.connection()
self.cur.execute(sql)
result=self.cur.fetchall()
self.closeconnection()
except Exception:
print(Exception)
return result
#添加/修改/删除
def executedata(self,sql):
try:
self.connection()
self.cur.execute(sql)
self.conn.commit()
self.closeconnection()
except Exception:
print(Exception)
#批量插入
def executemanydata(self,sql,vals):
try:
self.connection()
self.cur.executemany(sql,vals)
self.conn.commit()
self.closeconnection()
except Exception as e:
print(e)
data2.xls:
excelproject.py:
import xlrd
data = xlrd.open_workbook("data2.xls")
sheet = data.sheet_by_index(0) # 获取到工作表
questionList = [] # 构建试题列表
# 试题类
class Question:
pass
for i in range(sheet.nrows):
if i>1:
obj = Question() # 构建试题对象
obj.subject = sheet.cell(i, 1).value # 题目
obj.questionType = sheet.cell(i, 2).value # 题型
obj.optionA = sheet.cell(i, 3).value # 选项A
obj.optionB = sheet.cell(i, 4).value # 选项B
obj.optionC = sheet.cell(i, 5).value # 选项C
obj.optionD = sheet.cell(i, 6).value # 选项D
obj.score = sheet.cell(i, 7).value # 分值
obj.answer = sheet.cell(i, 8).value # 正确答案
questionList.append(obj)
print(questionList)
# 导入操作 pyMysqL pip install
from MysqLhelper import *
# 1.连接到数据库
db = dbhelper('127.0.0.1', 3306, "root", "123456", "test")
# 插入语句
sql = "insert into question(subject, questionType, optionA, optionB, optionC, optionD, score, answer) values (%s, %s, %s, %s, %s, %s, %s, %s)"
val = [] # 空列表来存储元组
for item in questionList:
val.append((item.subject, item.questionType, item.optionA, item.optionB, item.optionC, item.optionD, item.score, item.answer))
#print(val)
db.executemanydata(sql, val)
执行效果:
Python Excel 操作 | xlrd+xlwt 模块笔记
Python 的pandas
模块使用xlrd
作为读取 excel 文件的默认引擎。但是,xlrd
在其最新版本(从 2.0.1 版本开始)中删除了对 xls 文件以外的任何文件的支持。
xlsx files are made up of a zip file wrapping an xml file.
Both xml and zip have well documented security issues, which xlrd was not doing a good job of handling. In particular, it appeared that defusedxml and xlrd did not work on Python 3.9, which lead people to uninstall defusedxml as a solution, which is absolutely insane, but then so is sticking with xlrd 1.2 when you could move to openpyxl.
从官方的邮件中,说的应该是 xlsx 本身是由一个 zip 文件和 xml 的头文件构成的,但是 xml 和 zip 都有详细记录的安全问题,特别是,defusedxml
和xlrd
似乎在 Python 3.9 上不起作用,这导致人们卸载defusedxml
作为解决方案,这绝对是疯了,但是,当然了,您也可以转移到openpyxl
,或者仍然坚持使用xlrd 1.2
。
$ conda search xlrd
Loading channels: done
# Name Version Build Channel
xlrd 1.0.0 py27_0 conda-forge
xlrd 1.0.0 py27_1 conda-forge
xlrd 1.0.0 py35_0 conda-forge
xlrd 1.0.0 py35_1 conda-forge
xlrd 1.0.0 py36_0 conda-forge
xlrd 1.0.0 py36_1 conda-forge
xlrd 1.1.0 py27_1 pkgs/main
xlrd 1.1.0 py27ha77178f_1 pkgs/main
xlrd 1.1.0 py35_1 pkgs/main
xlrd 1.1.0 py35h45a0a2a_1 pkgs/main
xlrd 1.1.0 py36_1 pkgs/main
xlrd 1.1.0 py36h1db9f0c_1 pkgs/main
xlrd 1.1.0 py37_1 pkgs/main
xlrd 1.1.0 py_2 conda-forge
xlrd 1.2.0 py27_0 pkgs/main
xlrd 1.2.0 py36_0 pkgs/main
xlrd 1.2.0 py37_0 pkgs/main
xlrd 1.2.0 py_0 conda-forge
xlrd 1.2.0 py_0 pkgs/main
xlrd 1.2.0 pyh9f0ad1d_1 conda-forge
xlrd 2.0.1 pyhd3eb1b0_0 pkgs/main
xlrd 2.0.1 pyhd8ed1ab_3 conda-forge
上面的问题将导致您在使用pandas
调用 xlsx excel 上的read_excel
函数时收到一个错误,即不再支持 xlsx filetype。

-
安装 openpyxl 模块:这是另一个仍然支持 xlsx 格式的 excel 处理包。 在
pandas
中把默认的 engine 由原来的xlrd
替换成openpyxl
。
# Install openyxl
pip install openpyxl
# set engine parameter to "openpyxl"
pd.read_excel(path, engine = ''openpyxl'')
接下来,介绍一下 Python 读写 Excel 需要导入的xlrd
(读),xlwd
(写)模块的一些常用操作。
1. xlrd 模块
1.1 Excel 文件处理
打开 excel 文件
import xlrd
excel = xlrd.open_workbook("data.xlsx")
获取并操作 sheet 工作表
sheet_names = excel.sheet_names() # 返回book中所有工作表的名字, [''Sheet1'', ''Sheet2'', ''Sheet3'']
excel.sheet_loaded(sheet_name or indx) # 检查某个sheet是否导入完毕
# 以下三个函数都会返回一个 xlrd.sheet.Sheet() 对象
sheet = excel.sheet_by_index(0) # 通过索引获取,例如打开第一个 sheet 表格
sheet = excel.sheet_by_name("sheet1") # 通过名称获取,如读取 sheet1 表单
sheet = excel.sheets()[0] # 通过索引顺序获取
sheet.row_values(0) #获取第一行的数据
sheet.col_values(0) #获取第一列的数据
sheet.nrows #获取总共的行数
sheet.ncols #获取总共的列数
遍历所有行
for i in range(0, sheet.nrows):
row_list = sheet.row_values(i) # 每一行的数据在row_list数组里
1.2 日期处理
import datetime
from xlrd import xldate_as_datetime
xldate_as_datetime(43346.0, 0).strftime(''%Y/%m/%d'')
# ''2018/09/03''
2. xlwt 模块
2.1 创建 Book 工作簿(即 excel 工作簿)
import xlwt
workbook = xlwt.Workbook(encoding = ''utf-8'') # 创建一个workbook并设置编码形式
2.2 添加 sheet 工作表
worksheet = workbook.add_sheet(''My Worksheet'') # 创建一个worksheet
2.3 向工作表中添加数据并保存
worksheet.write(1,0, label = ''this is test'') # 参数对应行, 列, 值
workbook.save(''save_excel.xls'') # 保存
Python 中常见的 TypeError 是什么?
2021-04-16

Python 列表、字典、元组的一些小技巧
2021-03-30

如何卸载 python setup.py install 安装的包?
2020-05-15

生物信息学 Python 入门之源码安装
2019-09-29

Python 文件与目录操作方法总结
2019-02-17

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
关于使用python xlrd从Excel单元格获取公式和python获取excel单元格内容的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于excel2016单元格里的公式怎么显示 显示excel单元格中公式的设置方法、Python - 解析 Excel 文件 / xlrd 和 openpyxl 之间的差异(日期系统和单元格值类型)、Python 3使用xlrd+xlwt读取/写入Excel数据、Python Excel 操作 | xlrd+xlwt 模块笔记的相关信息,请在本站寻找。
本文标签: