python 操作excel的几个第三方库

首先,说一下我遇到的问题:
从系统中下载下来的excel,是数据透视表,通过xlrd、openpyxl、pandas,都不能获取到下边那个表格的数据,最后xlwings成功了。
分析原因:
下载下来的excel,除非手动打开再关闭时,弹出是否保存变更(什么也没改,至于为什么会这样,我也不知道),点击保存后才能取到。
之所以xlwings能成功,或许是因为这个能模拟手动打开excel吧。
在这里插入图片描述
1.xlrd

import xlrd
#打开excel
excel=xlrd.open_workbook("C://Users//18210//Downloads//WWReport_20200831085747.xlsx")
#选择Sheet
table=excel.sheet_by_index(0)
# table=excel.sheet_by_name('WW Report Data')
# 获取总行数
nrows=table.nrows
print(nrows)
# 获取总列数
ncols=table.ncols
print(ncols)
# 获取指定单元格的值
getVol = table.cell_value(21,2)
print(getVol)

在这里插入图片描述
2.openpyxl

from openpyxl import load_workbook
#打开excel
f1='C:\\Users\\18210\\Downloads\\WWReport_20200831085747.xlsx'
wb = load_workbook(f1)
ws = wb.active
# 获取总列数
nrows=ws.max_row
ncols=ws.max_column
print(nrows)
print(ncols)
getVol = ws.cell(22,4).value
print(getVol)

在这里插入图片描述
3.pandas

import pandas
url='C:\\Users\\18210\\Downloads\\WWReport_20200831085747.xlsx'
sheetname = 'P&L Overview'   #sheet名称
data = pandas.read_excel(url,sheet_name=sheetname)
# d = data.head()   #显示前五行
lines = data.iloc[22].values  # iloc索引 返回列表除标题外的第一行数据
# rows = data.loc[:,'A'].values  #loc标签,返回列表第一列数据
print(lines)

在这里插入图片描述
4.xlwings

import xlwings as xw
#指定不显示地打开Excel,读取Excel文件
app = xw.App(visible=False, add_book=False)
path = 'C:\\Users\\18210\\Downloads\\WWReport_20200831085747.xlsx'
# wb = xw.Book(path)
wb = app.books.open(path) # 打开Excel文件
ws = wb.sheets[0]# 选择第0个表单
# 获取表单使用信息:
info = ws.used_range
nrows = info.last_cell.row
print(nrows)
ncols = info.last_cell.column
print(ncols)
# data = ['北京', '上海']
# ws.range('A19').value = data
vol = ws.range('E22').value
print(vol)
wb.save()
# 关闭工作簿
wb.close()
# 退出当前活动excel程序
app.quit()

在这里插入图片描述
但是获取的总行数和总列数好像不对,具体还不知道是哪的问题

因为每次下载的excel 列数不同,所以xlwings和xlrd一起用了

import xlwings as xw
import os
import xlrd

def read_excel(file_path):
    # 指定不显示地打开Excel,读取Excel文件
    #file_path= 'C:\\Users\\18210\\Downloads\\WWReport_20200831085747.xlsx'
    app = xw.App(visible=False, add_book=False)
    wb = app.books.open(file_path)  # 打开Excel文件
    wb.save()
    wb.close()
    app.quit()
    # 打开excel
    excel = xlrd.open_workbook(file_path)
    table = excel.sheet_by_index(0)
    # nrows = table.nrows
    # print(nrows)
    ncols = table.ncols
    print(ncols)
    # 获取指定单元格的值
    getVol = table.cell_value(21, ncols - 1)
    getRev = table.cell_value(25, ncols - 1)
    getGP = table.cell_value(28, ncols - 1)
    return getVol,getRev,getGP

猜你喜欢

转载自blog.csdn.net/zhaoweiya/article/details/108321791