GVKun编程网logo

计算Excel工作表而不打开它们(openpyxl或xlwt)(excel不进行计算)

19

在本文中,我们将详细介绍计算Excel工作表而不打开它们的各个方面,并为您提供关于openpyxl或xlwt的相关解答,同时,我们也将为您带来关于25.xlrd、xlwt和openpyxl模块的比较和

在本文中,我们将详细介绍计算Excel工作表而不打开它们的各个方面,并为您提供关于openpyxl或xlwt的相关解答,同时,我们也将为您带来关于25.xlrd、xlwt和openpyxl模块的比较和使用、Excel文件处理之xlrd、xlwt、xlutils、openpyxl、openpyxl 操作excel文档、openpyxl 获取excel 单元格 颜色的有用知识。

本文目录一览:

计算Excel工作表而不打开它们(openpyxl或xlwt)(excel不进行计算)

计算Excel工作表而不打开它们(openpyxl或xlwt)(excel不进行计算)

我制作了一个脚本,该脚本打开一个.xls文件,在其中写入一些新值,然后保存该文件。

后来,脚本再次将其打开,并希望在某些包含公式的单元格中找到答案。

如果我用openpyxl调用该单元格,则会得到公式(即:)"=A1*B1"。如果激活data_only,我什么也没得到。

有没有办法让Python计算.xls文件?(或者我应该尝试PyXll吗?)

答案1

小编典典

实际上,有一个使用Excel公式并使用Python对其求值的项目: Pycel。
Pycel使用Excel本身(通过COM)提取公式,因此在您的情况下,您将跳过该部分。
该项目可能有一些有用的东西可供您使用,但是我不能保证它的成熟度或完整性。
它并不是真正为普通大众开发的。

还有一个名为Koala的较新项目,该项目基于Pycel和OpenPyXL。

如果您不能使用Excel,但 可以
自己计算公式的结果(在Python代码中),另一种方法是将值和公式都写入一个单元格中(这样,当您读取文件时,可以只需拉出该值,根本不用担心公式)。在撰写本文时,我还没有在OpenPyXL中找到一种方法来做到这一点,但是XlsxWriter可以做到。从文档中:

XlsxWriter不会计算公式的值,而是将值0存储为公式结果。然后,它在XLSX文件中设置一个全局标志,说打开该文件时应重新计算所有公式和函数。这是Excel文档中建议的方法,并且通常可以与电子表格应用程序很好地配合使用。但是,不具备计算公式功能的应用程序(例如Excel
Viewer)或某些移动应用程序将仅显示0结果。

如果需要,还可以使用options值参数来指定公式的计算结果。当使用不计算公式值的非Excel应用程序时,这有时是必要的。计算出的值将添加到参数列表的末尾:

worksheet.write_formula(’A1’,’= 2 + 2’,num_format,4)

通过这种方法,当需要读取值时,可以使用OpenPyXL的data_only选项。(对于其他人,阅读此答案:如果您使用xlrd,则无论如何都只能使用该值。)

最后,如果您 确实
有Excel,那么您可能要做的最直接,最可靠的事情就是自动在Excel中打开和重新保存文件(以便它可以为您计算和编写公式的值)。xlwings是从Windows或Mac上执行此操作的简便方法。

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开始计数的

 

Excel文件处理之xlrd、xlwt、xlutils、openpyxl

Excel文件处理之xlrd、xlwt、xlutils、openpyxl

 

1读excel要用到xlrd模块(支持xls、xlsx)
import xlrd
filename="C:/Users/11/Desktop/2.xlsx"
book = xlrd.open_workbook(filename) #打开Excel文件读取数据
sheet =book.sheets()[0] #指定工作表
print book.nsheets #获取sheet总数
print sheet.nrows  #获取行数
print sheet.ncols   #获取列数
print(sheet.cell(1,2)) #获取单元格2行3列的值
print(sheet.row_values(0))   #获取第1行的值(返回数组)
print(sheet.col_values(0))    #获取第1列的值(返回数组)
 
指定工作表的三种方式:
sheet = book.sheets()[0]  
sheet = book.sheet_by_index(0)
sheet = book.sheet_by_name(''Sheet1'') #有的资料显示(u''Sheet1''),测试两种均可
 
 
 
2写excel要用到xlwt模块(支持xls)
import xlwt
book = xlwt.Workbook(encoding = ''ascii'')  #创建workbook
sheet = book.add_sheet(''sheet1'')   #创建表
sheet.write(1, 2, label = ''hello'') #往单元格2行3列写入内容
book.save("C:/Users/11/Desktop/temp/3/3.xls") #保存
 
encoding和label要对应:
比如encoding = ''utf8'' 对应 label = ''你好'',encoding = ''ascii'' 对应 label = ''hello''。
如果encoding = ''ascii'' 对应 label = ''你好'' 则会报错: ''ascii'' codec can''t decode byte 0xe5 in position ......
 
文件保存路径:
可以是相对路径,也可以是绝对路径。
如果路径中的文件夹不存在则报错: No such file or directory......
如果文件不存在会自动创建,已存在会覆盖处理(覆盖整个文件,不仅仅是sheet或者单元格)。
 
 
 
3修改excel可以用xlutils、openpyxl模块
3.1xlutils (支持xls)
import  xlrd
from xlutils.copy import copy
workbook=xlrd.open_workbook(''3.xls'')  
workbooknew=copy(workbook) #copy:将xlrd.Book转为xlwt.Workbook。
ws=workbooknew.get_sheet(0)  #注意此处用的是get_sheet,不同于xlrd模块指定工作表的三种方式。
ws.write(0,1,"changed12345")
workbooknew.save("3copy.xls")
 
xlutils是一个工具模块,一般只用到copy模块,用于修改另存Excel文件。具体实现步骤是:将需要更改的excel文件打开,用xlutils包的copy将excel文件拷贝一份,然后进行修改操作,最后保存。实际是在xlrd.Book和xlwt.Workbook之间建立了一个管道而已。
所以,xlutils修改当前文件的方法就是,最后保存的时候文件名同原名,即替换原文件:workbooknew.save("3.xls")。
 
xlutils也可以对xlsx格式进行操作,但是最后保存只支持xls格式。
 
3.2 openpyxl (支持xlsx)
from openpyxl import load_workbook
book = load_workbook(''333.xlsx'')
sheet=book.get_sheet_by_name(''Sheet2'')
sheet[''A1'']=''hello''
sheet[''A5'']=123
book.save(''333.xlsx'')
 
同xlutils相比好像只是少了copy环节,语法稍有不同,最后也是保存为同名文件才达到修改当前文件的目的。
 
如果load_workbook(''3.xls'')程序报错:InvalidFileException: openpyxl does not support the old .xls file format, please use xlrd to read this file, or convert it to the more recent .xlsx file format.
 
 
 
 
注意
现在已经Office2019了,如果还只支持2003版的xls格式就会被人抛弃。后面还有更便利的库推出。
 
在Excel中内容尾部存在若干个空格时,可能是人为产生,VBA会自动去重尾部空格,Python不会,需要strip()处理。
 
https://cloud.tencent.com/developer/article/1191080 **
 
 

openpyxl 操作excel文档

openpyxl 操作excel文档

1.打开已存在文档

import openyxl

wb = openpyxl.load_workbook(file_path)
ws = wb[sheet_name]

 

2.修改单元格数据

ws.cell(1,1).value = "test"

 

3.设置单元格样式(边框和字体)

from openpyxl.styles import Border, Side, Font, Alignment

border = Border(left=Side(style=''medium'',color=''FF000000''),right=Side(style=''medium'',color=''FF000000''))
font = Font(name=''新宋体'',size=10,bold=False,italic=False,vertAlign=None,underline=''none'',strike=False,color=''FF000000'')

ws.cell(1,1).border = border
ws.cell(1,1).font = font
# 自动换行
ws.cell(1,1).alignment = Alignment(wrapText=True)

 

4.将dataframe数据插入excel表中

from openpyxl.utils.dataframe import dataframe_to_rows
import pandas as pd

df = pd.DataFrame([[1,2,3],[1,2,3]],columns=[''a'',''b''])
for row in dataframe_to_rows(df, index=False, header=False):
    ws.append(row)

 

5.在excel中插入曲线图

from openpyxl.chart import (
    LineChart,
    Reference,
)
from openpyxl.chart.axis import DateAxis

line_chart = LineChart()
line_chart.title = "char_title"
line_chart.style = 13
# x y轴的名称
line_chart.y_axis.title = ''Y label''
line_chart.x_axis.title = ''X label''
# 图表所依据的数据位置
data = Reference(ws, min_col=2, min_row=1, max_col=2, max_row=10)
line_chart.add_data(data, titles_from_data=True)
# x轴坐标标签所依据的数据位置
x_labels = Reference(ws, min_col=1, min_row=2, max_row=10)
line_chart.set_categories(x_labels)
line_chart.width = 19
line_chart.height = 7
# 设置线条样式
line1 = line_chart.series[0]
line1.smooth = True # 线条光滑
line1.marker.symbol = "triangle"
line1.graphicalProperties.line.width = 20000 #线条粗细
# 插入图表的左上角位置
ws.add_chart(line_chart, "G2")

 

openpyxl 获取excel 单元格 颜色

openpyxl 获取excel 单元格 颜色

book = openpyxl.load_workbook(filedir)
sheet_ = book.get_sheet_by_name(book.get_sheet_names()[0])
sheet_.cell(i, 3).font.color.rgb # 获取 表格内字体颜色
sheet_.cell(i, 3).fill.fgColor.rgb # 获取表格 填充色 颜色

我们今天的关于计算Excel工作表而不打开它们openpyxl或xlwt的分享已经告一段落,感谢您的关注,如果您想了解更多关于25.xlrd、xlwt和openpyxl模块的比较和使用、Excel文件处理之xlrd、xlwt、xlutils、openpyxl、openpyxl 操作excel文档、openpyxl 获取excel 单元格 颜色的相关信息,请在本站查询。

本文标签: