2018-08-14 openpyxl小计

自从来到朗讯之后,由于经理有个小项目,所以一直在用openpyxl来处理excel,期间遇到了无数的坑坑洼洼啊,现在来总结一下
1.关于复制sheet表,我在网上查到用copy_worksheet(),但是此方法不可以改变表的位置,创建完之后在最后一个。然后我查了源码,发现openpyxl有个模块:copier。他有一个WorksheetCopy(source_sheet,target_sheet)对象接收两个参数,第一个是source_sheet,第二个是target_sheet,所以我们可以先create_sheet(sheetname,index)来创建target_sheet这样位置可以随便选.
copoer.WorksheetCopy(source_sheet,target_sheet).copy_worksheet()这样便可以随心所欲的复制了
2.之前处理有公式的excel,我想要读取里面的数据,但是读取之后发现是公式,这时你应该在load_workbook(*.xlsx,data_only=True),这样你便可以读取里面的数据了,如果你有的想要数据其他的想要公式,你可以用两种打开方式来操作。但是如果你保存的时候用的是data_only=False的方式,那么你想接着操作此excel必须要先打开一下保存(我也不知道为什么他没有保存),当然你如果在windows下操作你可以写一个程序单独跑一次来保存:
import win32com.client as wc
def just_open(filename):
xlApp = wc.Dispatch("Excel.Application")
xlApp.Visible = False
xlBook = xlApp.Workbooks.Open(filename)
xlBook.Save()
xlBook.Close()
只需要简单的打开保存一下就好
如果你在linux下操作,你有两张方法操作:
2.1 将excel表中的公式,对应在python中处理
2.2将excel的公式读取,然后写到与之对应的单元格中
3.得到指定值的下标的方法
from openpyxl.utils import get_column_letter, column_index_from_string
for cell in sheet_cal[3]:
if isinstance(cell.value, datetime.datetime):
if date == cell.value.date():
col_cal_num = column_index_from_string(cell.column)
这个是对日期的操作,但是你的如果是一般的字符串,可以直接得到
for row in worksheet.rows:
for cell in row:
if ** == cell.value:
print(cell.column)
cell.column得到的是字母下标,column_index_from_string()得到字母下标的数字

你可能感兴趣的:(2018-08-14 openpyxl小计)