python复制和编辑excel

合集下载

excel 中python用法

excel 中python用法

一、介绍Excel是一款广泛使用的电子表格软件,Python是一种流行的编程语言。

结合Excel和Python的使用可以提高数据处理的效率和灵活性。

本文将介绍在Excel中使用Python的方法和技巧。

二、Python插件安装1. 打开Excel并进入“文件”菜单。

2. 选择“选项”。

3. 在选项对话框中,选择“加载项”。

4. 点击“Excel加载项”下的“转到”按钮。

5. 在“添加-Ins”对话框中,点击“浏览”。

6. 找到并选择Python插件的安装文件,点击“打开”。

7. 完成安装并重启Excel。

三、使用Python进行数据处理1. 在Excel中新建一个工作表。

2. 在需要进行数据处理的单元格输入Python函数,例如“=Py.COUNTIF(A1:A10,">5")”。

3. 按下Enter键,Excel会调用Python插件执行该函数,并在单元格中显示结果。

四、Python函数示例1. 使用Python的COUNTIF函数统计大于5的数据个数。

2. 使用Python的SUM函数计算数据的总和。

3. 使用Python的AVERAGE函数计算数据的平均值。

4. 使用Python的IF函数进行条件判断。

5. 使用Python的VLOOKUP函数进行数据查找。

五、Python脚本执行1. 在Excel中打开一个工作表。

2. 点击“开发人员”选项卡。

3. 选择“插入”下的“ActiveX 控件”。

4. 在工作表中插入一个按钮控件,右键点击该按钮并选择“属性”。

5. 在“单击”事件中绑定Python脚本文件。

6. 点击按钮执行Python脚本,实现自定义的数据处理逻辑。

六、Python图表生成1. 在Excel中选择需要生成图表的数据范围。

2. 点击“插入”选项卡中的“插入统计图表”按钮。

3. 在弹出的对话框中选择“Python图表”。

4. 根据需要选择图表类型和样式,点击确定生成图表。

使用python操作excel

使用python操作excel

使⽤python操作excel使⽤python操作excelpython操作excel主要⽤到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。

安装xlrd模块#pip install xlrd使⽤介绍常⽤单元格中的数据类型 empty(空的) string(text) number date boolean error blank(空⽩表格) empty为0,string为1,number为2,date为3,boolean为4, error为5(左边为类型,右边为类型对应的值)导⼊模块import xlrd打开Excel⽂件读取数据data = xlrd.open_workbook(filename[, logfile, file_contents, ...])#⽂件名以及路径,如果路径或者⽂件名有中⽂给前⾯加⼀个r标识原⽣字符。

#filename:需操作的⽂件名(包括⽂件路径和⽂件名称);若filename不存在,则报错FileNotFoundError;若filename存在,则返回值为xlrd.book.Book对象。

常⽤的函数 excel中最重要的⽅法就是book和sheet的操作# (1)获取book中⼀个⼯作表names = data.sheet_names()#返回book中所有⼯作表的名字table = data.sheets()[0]#获取所有sheet的对象,以列表形式显⽰。

可以通过索引顺序获取,table = data.sheet_by_index(sheet_indx))#通过索引顺序获取,若sheetx超出索引范围,则报错IndexError;若sheetx在索引范围内,则返回值为xlrd.sheet.Sheet对象table = data.sheet_by_name(sheet_name)#通过名称获取,若sheet_name不存在,则报错xlrd.biffh.XLRDError;若sheet_name存在,则返回值为xlrd.sheet.Sheet对象以上三个函数都会返回⼀个xlrd.sheet.Sheet()对象data.sheet_loaded(sheet_name or indx)# 检查某个sheet是否导⼊完毕,返回值为bool类型,若返回值为True表⽰已导⼊;若返回值为False表⽰未导⼊# (2)⾏的操作nrows = table.nrows#获取该sheet中的有效⾏数table.row(rowx)#获取sheet中第rowx+1⾏单元,返回值为列表;列表每个值内容为:单元类型:单元数据table.row_slice(rowx[, start_colx=0, end_colx=None])#以切⽚⽅式获取sheet中第rowx+1⾏从start_colx列到end_colx列的单元,返回值为列表;列表每个值内容为:单元类型:单元数据table.row_types(rowx, start_colx=0, end_colx=None)#获取sheet中第rowx+1⾏从start_colx列到end_colx列的单元类型,返回值为array.array类型。

Python处理Excel效率高十倍(下篇)通篇硬干货,再也不用加班啦

Python处理Excel效率高十倍(下篇)通篇硬干货,再也不用加班啦

Python处理Excel效率高十倍(下篇)通篇硬干货,再也不用加班啦《用Python处理Excel表格》下篇来啦!身为工作党或学生党的你,平日里肯定少不了与Excel表格打交道的机会。

当你用Excel处理较多数据时,还在使用最原始的人工操作吗?现在教你如何用Python处理Excel,从此处理表格再也不加班,时间缩短数十倍!上篇我们进行了一些事前准备,目的是用Python提取Excel表中的数据。

而这一篇便是在获取数据的基础上,对Excel表格的实操处理。

操作创建新的excel第9行代码用来指定创建的excel的活动表的名字:·不写第9行,默认创建sheet·写了第9行,创建指定名字的sheet表import osimport openpyxlpath = r'C:\Users\asuka\Desktop'os.chdir(path) # 修改工作路径workbook = openpyxl.Workbook()sheet = workbook.activesheet.title = '1号sheet'workbook.save('1.xlsx') 修改单元格、excel另存为第9行代码,通过给单元格重新赋值,来修改单元格的值第9行代码的另一种写法sheet['B1'].value = 'age'第10行代码,保存时如果使用原来的(第7行)名字,就直接保存;如果使用了别的名字,就会另存为一个新文件import osimport openpyxlpath = r'C:\Users\asuka\Desktop'os.chdir(path) # 修改工作路径workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值sheet = workbook.active # 获取活动表sheet['A1'] = 'name'workbook.save('test.xlsx')添加数据插入有效数据使用append()方法,在原来数据的后面,按行插入数据import osimport openpyxlpath = r'C:\Users\asuka\Desktop'os.chdir(path) # 修改工作路径workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值sheet = workbook.active # 获取活动表print('当前活动表是:' + str(sheet))data = [ ['素子',23], ['巴特',24], ['塔奇克马',2]]for row in data: sheet.append(row) # 使用append 插入数据workbook.save('test.xlsx')插入空行空列·insert_rows(idx=数字编号, amount=要插入的行数),插入的行数是在idx行数的下方插入·insert_cols(idx=数字编号, amount=要插入的列数),插入的位置是在idx列数的左侧插入import osimport openpyxlpath = r'C:\Users\asuka\Desktop'os.chdir(path) # 修改工作路径workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值sheet = workbook.active # 获取活动表print('当前活动表是:' + str(sheet))sheet.insert_rows(idx=3, amount=2)sheet.insert_cols(idx=2,amount=1)workbook.save('test.xlsx')删除行、列·delete_rows(idx=数字编号, amount=要删除的行数)·delete_cols(idx=数字编号, amount=要删除的列数)import osimport openpyxlpath = r'C:\Users\asuka\Desktop'os.chdir(path) # 修改工作路径workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值sheet = workbook.active # 获取活动表print('当前活动表是:' + str(sheet))sheet.delete_rows(idx=10) # 删除第10行sheet.delete_cols(idx=1, amount=2) # 删除第1列,及往右共2列workbook.save('test.xlsx')移动指定区间的单元格(move_range)move_range(“数据区域”,rows=,cols=):正整数为向下或向右、负整数为向左或向上import osimport openpyxlpath = r'C:\Users\asuka\Desktop'os.chdir(path) # 修改工作路径workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值sheet = workbook.active # 获取活动表print('当前活动表是:' + str(sheet))sheet.move_range('D11:F12',rows=0,cols=-3) # 移动D11到F12构成的矩形格子workbook.save('test.xlsx')字母列号与数字列号之间的转换核心代码from openpyxl.utils import get_column_letter, column_index_from_string# 根据列的数字返回字母print(get_column_letter(2)) # B# 根据字母返回列的数字print(column_index_from_string('D')) # 4举个例子:import osimport openpyxlfrom openpyxl.utils import get_column_letter, column_index_from_stringpath = r'C:\Users\asuka\Desktop'os.chdir(path) # 修改工作路径workbook = openpyxl.load_workbook('2.xlsx') # 返回一个workbook数据类型的值sheet = workbook.active # 获取活动表print('当前活动表是:' + str(sheet))# 根据列的数字返回字母print(get_column_letter(2)) # B# 根据字母返回列的数字print(column_index_from_string('D')) # 4字体样式查看字体样式import osimport openpyxlimport openpyxl.stylespath = r'C:\Users\asuka\Desktop'os.chdir(path) # 修改工作路径workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值sheet = workbook.active # 获取活动表print('当前活动表是:'+str(sheet))cell = sheet['A1']font = cell.fontprint('当前单元格的字体样式是')print(, font.size, font.bold, font.italic, font.color)'''当前活动表是:<Worksheet '1号sheet'>当前单元格的字体样式是等线11.0 False False <openpyxl.styles.colors.Color object>Parameters:rgb=None, indexed=None, auto=None, theme=1, tint=0.0, type='theme'''' 修改字体样式openpyxl.styles.Font(name=字体名称,size=字体大小,bold=是否加粗,italic=是否斜体,color=字体颜色)其中,字体颜色中的color是RGB的16进制表示import osimport openpyxlimport openpyxl.stylespath = r'C:\Users\asuka\Desktop'os.chdir(path) # 修改工作路径workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值sheet = workbook.active # 获取活动表print(sheet)cell = sheet['A1']cell.font = openpyxl.styles.Font(name='微软雅黑', size=20, bold=True, italic=True, color='FF0000')workbook.save('test.xlsx')再者,可以使用for循环,修改多行多列的数据,在这里介绍了获取的方法import osimport openpyxlimport openpyxl.stylespath = r'C:\Users\asuka\Desktop'os.chdir(path) # 修改工作路径workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值sheet = workbook.active # 获取活动表print(sheet)cell = sheet['A']for i in cell: i.font = openpyxl.styles.Font(name='微软雅黑', size=20, bold=True, italic=True, color='FF0000')workbook.save('test.xlsx')设置对齐格式Alignment(horizontal=水平对齐模式,vertical=垂直对齐模式,text_rotation=旋转角度,wrap_text=是否自动换行)水平对齐:'distributed’,'justif y’,'center’,'left’,'centerContinuous’,'right,'general’垂直对齐:'bottom’,'distributed’,'justify’,'center’,'top’import osimport openpyxl.stylespath = r'C:\Users\asuka\Desktop'os.chdir(path) # 修改工作路径workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值sheet = workbook.active # 获取活动表print('当前活动表是:' + str(sheet))cell = sheet['A1']alignment = openpyxl.styles.Alignment(horizontal='center', vertical='center', text_rotation=0, wrap_text=True)cell.alignment = alignmentworkbook.save('test.xlsx')当然,你仍旧可以调用for循环来实现对多行多列的操作import osimport openpyxl.stylespath = r'C:\Users\asuka\Desktop'os.chdir(path) # 修改工作路径workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值sheet = workbook.active # 获取活动表print('当前活动表是:' + str(sheet))cell = sheet['A']alignment = openpyxl.styles.Alignment(horizontal='center', vertical='center',text_rotation=0, wrap_text=True)for i in cell: i.alignment = alignment workbook.save('test.xlsx')设置行高列宽设置行列的宽高:·row_dimensions[行编号].height = 行高·column_dimensions[列编号].width = 列宽import osimport openpyxlimport openpyxl.stylespath = r'C:\Users\asuka\Desktop'os.chdir(path) # 修改工作路径workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值sheet = workbook.active # 获取活动表print('当前活动表是:' + str(sheet))# 设置第1行的高度sheet.row_dimensions[1].height = 50# 设置B列的卷度sheet.column_dimensions['B'].width = 20workbook.save('test.xlsx')设置所有单元格(显示的结果是设置所有,有数据的单元格的)from openpyxl import load_workbookfrom openpyxl.utils import get_column_letterimport osos.chdir(r'C:\Users\asuka\Desktop')workbook = load_workbook('1.xlsx')print(workbook.sheetnames) # 打印所有的sheet表ws = workbook[workbook.sheetnames[0]] # 选中最左侧的sheet表width = 2.0 # 设置宽度height = width * (2.2862 / 0.3612) # 设置高度print('row:', ws.max_row, 'column:', ws.max_column) # 打印行数,列数for i in range(1, ws.max_row + 1): ws.row_dimensions[i].height = heightfor i in range(1, ws.max_column + 1): ws.column_dimensions[get_column_letter(i)].width = widthworkbook.save('test.xlsx')合并、拆分单元格合并单元格有下面两种方法,需要注意的是,如果要合并的格子中有数据,即便python没有报错,Excel打开的时候也会报错。

用python库openpyxl操作excel,从源excel表中提取信息复制到目标excel表中

用python库openpyxl操作excel,从源excel表中提取信息复制到目标excel表中

⽤python库openpyxl操作excel,从源excel表中提取信息复制到⽬标excel表中现代⽣活中,我们很难不与excel表打交道,excel表有着易学易⽤的优点,只是当表中数据量很⼤,我们⼜需要从其他表册中复制粘贴⼀些数据(⽐如⾝份证号)的时候,我们会越来越倦怠,毕竟我们不是机器,没法长时间做某种重复性的枯燥操作。

想象这样⼀个场景,我们有个⼏千⾏的表要填,需要根据姓名输⼊其对应的⾝份证号,但之前我们已经做过⼀个类似的表,同样的⼀些⼈的姓名跟⾝份证号是完整的,那么我们就需要通过⼀个个查找姓名,然后把⾝份证号码复制到我们当前要做的表⾥去。

当我⽇复⼀⽇重复着这些操作的时候,我都很想有⼀个⾃动化⼯具来完成这种操作,把做为⼈的我从这种⾮⼈的折磨⾥解脱出来,最后还是想到了python,因为这样我能很少的关注语⾔内部的⼀些细节,从⽽专注于解决这个问题。

其安装命令为 pip install openpyxl(在线安装)或者 easy_install openpyxl。

openpyxl的操作可以分四步,第⼀步载⼊现有workbook或者创建workbook到内存,分别使⽤from openpyxl import load_workbookfrom openpyxl import Workbook#载⼊现有workbook中wb1=load_workbook('lalala.xlsx')"""在源表数据量很⼤的时候,这⾥我们可以使⽤openpyxl的read_only模式载⼊源表,这样做的好处是不⽤把整个表都载⼊内存"""wb1=load_workbook(filename='lalala.xlsx',read_only=True)#创建workbookwb2 = Workbook()第⼆步就是操作excel表中的sheet了,通过Workbook()创建的workbook默认活动的sheet名称为Sheet,可以通过python交互命令⾏进⾏验证。

python使用xlrd模块读写Excel文件的方法

python使用xlrd模块读写Excel文件的方法

python使⽤xlrd模块读写Excel⽂件的⽅法本⽂实例讲述了python使⽤xlrd模块读写Excel⽂件的⽅法。

分享给⼤家供⼤家参考。

具体如下:⼀、安装xlrd模块⼆、使⽤介绍1、导⼊模块复制代码代码如下:import xlrd2、打开Excel⽂件读取数据复制代码代码如下:data = xlrd.open_workbook('excelFile.xls')3、使⽤技巧获取⼀个⼯作表复制代码代码如下:table = data.sheets()[0] #通过索引顺序获取table = data.sheet_by_index(0) #通过索引顺序获取table = data.sheet_by_name(u'Sheet1')#通过名称获取获取整⾏和整列的值(数组)复制代码代码如下:table.row_values(i)table.col_values(i)获取⾏数和列数复制代码代码如下:nrows = table.nrowsncols = table.ncols循环⾏列表数据复制代码代码如下:for i in range(nrows ):print table.row_values(i)单元格复制代码代码如下:cell_A1 = table.cell(0,0).valuecell_C4 = table.cell(2,3).value使⽤⾏列索引复制代码代码如下:cell_A1 = table.row(0)[0].valuecell_A2 = table.col(1)[0].value简单的写⼊复制代码代码如下:row = 0col = 0# 类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 errorctype = 1 value = '单元格的值'xf = 0 # 扩展的格式化table.put_cell(row, col, ctype, value, xf)table.cell(0,0) #单元格的值'table.cell(0,0).value #单元格的值'三、Demo代码Demo代码其实很简单,就是读取Excel数据。

python处理excel实例

python处理excel实例

python处理excel实例Python是一种强大的编程语言,可以用于各种各样的任务,包括数据处理。

Excel是一个广泛使用的电子表格应用程序,用于处理和管理数据。

Python可以与Excel相结合,提供更高效和灵活的数据处理方式。

下面是一些Python处理Excel的实例:1.读取Excel文件: Python可以使用pandas包中的read_excel 函数读取Excel文件。

下面是一个简单的读取Excel文件的代码示例: import pandas as pd#读取Excel文件data = pd.read_excel('file.xlsx')print(data)2.写入Excel文件: Python也可以使用pandas包中的to_excel 函数将数据写入Excel文件。

下面是一个简单的写入Excel文件的代码示例:import pandas as pd#创建数据data = {'姓名': ['张三', '李四', '王五'], '年龄': [20, 25, 30]}#将数据转换为DataFrame格式df = pd.DataFrame(data)#将DataFrame写入Excel文件df.to_excel('file.xlsx', index=False)3.修改Excel文件: Python可以使用openpyxl包中的load_workbook函数打开Excel文件,并使用它的方法修改文件。

下面是一个简单的修改Excel文件的代码示例:from openpyxl import load_workbook#加载Excel文件wb = load_workbook('file.xlsx')#获取工作表ws = wb.active#修改单元格ws['A1'] = '姓名'ws['B1'] = '年龄'#保存文件wb.save('file.xlsx')这些实例只是Python处理Excel的基础知识,还有很多其他的功能和技巧可以使用。

python处理excel实例

python处理excel实例

python处理excel实例Python是一种功能强大的编程语言,可以用来处理各种数据类型,包括Excel文件。

Python处理Excel文件的能力极强,可以进行数据提取、数据处理、数据分析等多方面操作。

下面是一个Python处理Excel文件的实例:1. 导入所需的库```pythonimport openpyxl```2. 读取Excel文件```pythonwb = openpyxl.load_workbook('example.xlsx')```这个代码块会打开名为example.xlsx的Excel文件,并将其存储在变量wb中。

3. 选择工作表```pythonsheet = wb['Sheet1']```这个代码块会选择名为Sheet1的工作表,并将其存储在变量sheet中。

4. 读取单元格数据cell_value = sheet['A1'].value```这个代码块会读取A1单元格的数据,并将其存储在变量cell_value中。

5. 读取行数据```pythonrow_values = []for row in sheet.iter_rows(min_row=2, max_col=3):row_values.append([cell.value for cell in row])```这个代码块会读取工作表中第2行到最后一行、第1列到第3列的数据,并将其存储在列表row_values中。

6. 读取列数据```pythoncolumn_values = []for column in sheet.iter_cols(min_row=2, max_row=4):column_values.append([cell.value for cell in column]) ```这个代码块会读取工作表中第2列到第4列、第1行到最后一行的数据,并将其存储在列表column_values中。

python读取excel指定列数据并写入到新的excel方法

python读取excel指定列数据并写入到新的excel方法
row_data=sh.row_values(i) #获取第i行第3列数据 #sh.cell_value(i,3) #---------写出文件到excel-------print "-----正在写入 "+str(i)+" 行" sheet.write(i,1, label = sh.cell_value(i,3)) #向第1行第1列写入获取到的值 sheet.write(i,2, label = sh.cell_value(i,5)) #向第1行第2列写入获取到的值 book.save("C:\\Users\\st\\Desktop\\test\\demo1.xls")
以上这篇python读取excel指定列数据并写入到新的excel方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也 希望大家多多支持。
sh=bk.sheet_by_name("Sheet1") except:
print "代码出错" nrows=sh.nrows #获取行数 book = Workbook(encoding='utf-8') sheet = book.add_sheet('Sheet1') #创建一个sheet for i in range(1,nrows):
这篇文章主要介绍了如何基于python代码实现高精度免费ocr工具文中通过示例代码介绍的非常详细对大家的学习或者工作具有一定的参考学习价值需要的朋友可以参考下
pythoቤተ መጻሕፍቲ ባይዱ读取 excel指定列数据并写入到新的 excel方法
如下所示:
#encoding=utf-8 import xlrd from xlwt import * #------------------读数据--------------------------------fileName="C:\\Users\\st\\Desktop\\test\\20170221131701.xlsx" bk=xlrd.open_workbook(fileName) shxrange=range(bk.nsheets) try:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#coding=utf-8import osimport os.pathimport sysfrom xlrd import open_workbookfrom xlutils.copy import copyfrom g315.config import confimport chardetimport rep=pile(r'(?i){{(.*?)}}')source_file_mold = os.path.join(conf.APP_DIR, "public/excel/source/module.xls") target_file_mold = os.path.join(conf.APP_DIR, "public/excel/target/result.xls")import xlrdimport xlwtfrom xlrd import open_workbook,cellnameabsfrom xlutils.copy import copydef copy_xf(rdbook,rdxf):"""clone a XFstyle from xlrd XF class,the code is copied from xlutils.copy module """wtxf = xlwt.Style.XFStyle()## number format#wtxf.num_format_str = rdbook.format_map[rdxf.format_key].format_str## font#wtf = wtxf.fontrdf = rdbook.font_list[rdxf.font_index]wtf.height = rdf.heightwtf.italic = rdf.italicwtf.struck_out = rdf.struck_outwtf.outline = rdf.outlinewtf.shadow = rdf.outlinewtf.colour_index = rdf.colour_indexwtf.bold = rdf.bold #### This attribute is redundant, should be driven by weight wtf._weight = rdf.weight #### Why "private"?wtf.escapement = rdf.escapementwtf.underline = rdf.underline_type ##### wtf.???? = rdf.underline #### redundant attribute, set on the fly when writing wtf.family = rdf.familywtf.charset = rdf.character_set = ## protection#wtp = wtxf.protectionrdp = rdxf.protectionwtp.cell_locked = rdp.cell_lockedwtp.formula_hidden = rdp.formula_hidden## border(s) (rename ????)#wtb = wtxf.bordersrdb = rdxf.borderwtb.left = rdb.left_line_stylewtb.right = rdb.right_line_stylewtb.top = rdb.top_line_stylewtb.bottom = rdb.bottom_line_stylewtb.diag = rdb.diag_line_stylewtb.left_colour = rdb.left_colour_indexwtb.right_colour = rdb.right_colour_indexwtb.top_colour = rdb.top_colour_indexwtb.bottom_colour = rdb.bottom_colour_indexwtb.diag_colour = rdb.diag_colour_indexwtb.need_diag1 = rdb.diag_downwtb.need_diag2 = rdb.diag_up## background / pattern (rename???)#wtpat = wtxf.patternrdbg = rdxf.backgroundwtpat.pattern = rdbg.fill_patternwtpat.pattern_fore_colour = rdbg.pattern_colour_indexwtpat.pattern_back_colour = rdbg.background_colour_index## alignment#wta = wtxf.alignmentrda = rdxf.alignmentwta.horz = rda.hor_alignwta.vert = rda.vert_alignwta.dire = rda.text_direction# wta.orie # orientation doesn't occur in BIFF8! Superceded by rotation ("rota").wta.rota = rda.rotationwta.wrap = rda.text_wrappedwta.shri = rda.shrink_to_fitwta.inde = rda.indent_level# wta.merg = ????#return wtxfdef fill_value(position_sheet={},cell_value=""):"""replace the position({{varible}}) of the cellvalue with the varible's value"""if cell_value:m=p.search(cell_value)#查询是否存在{{?p<name>}}while m:var_name=m.groups()[0]print "var_name:",var_nametry:value = position_sheet.get(var_name) #读取第一个参数的值except Exception, e:error= u"模板文件:%(source_file)s的第%(index)s个sheet中的参数{{%(var_name)s}}在position中找不到对应的key" % \{"source_file":os.path.split(source_file)[1],"index":i+1,"var_name":var_name}print errorreturn dict(error=error,e=e)if value and not isinstance(value, unicode):value= value.decode("utf-8")print 'value', valueif not value:breakcell_value=p.sub(value,cell_value,count=1)#用这个值替换cell_value中的该{{参数}}m=p.search(cell_value)#检查是否还有参数return cell_valuedef excel_create(source_file="",position=[{}],target_file=""):'''根据source_file传入的excel模板文件路径,使用position中map对模板中的{{varible}}中的varible字段进行数据填充,生成新的文件放入file_pathsource_file:模板文件名;非空路径为:/public/excel/source/<name>.xls,空值默认模板:/public/excel/source/module.xls,position:[{key:value,key1:value1,key2:value2,...},#模板excel的sheet[0]内的参数map {key:value,key1:value1,key2:value2,...},#模板excel的sheet[1]内的参数map{key:value,key1:value1,key2:value2,...},#模板excel的sheet[...]内的参数map]file_path:生成的文件路径以及文件名;空值为默认路径:public/excel/target/result.xls '''warning=""if target_file:result_file=os.path.join(conf.APP_DIR, "public/excel/target", target_file) else:result_file=target_file_moldif source_file:source_file=os.path.join(conf.APP_DIR, "public/excel/source", source_file) else:source_file=source_file_moldtry:rb = open_workbook(source_file,on_demand=True,formatting_info=True) except:error= u"the (%s) is not a correct path!" % source_filereturn dict(error=error)wb = copy(rb)shxrange = range(rb.nsheets)while len(shxrange)>len(position):warning= u"the length of position's map is lesser than the number of the module Excel's sheets!"position.append({})for i in shxrange:ws = wb.get_sheet(i)sheet = rb.sheet_by_index(i)for rowx in range(0,sheet.nrows):for colx in range(0,sheet.ncols):#get the cell valuecellvalue=sheet.cell_value(rowx,colx)#get the cell typecelltype=sheet.cell_type(rowx,colx)if celltype == xlrd.XL_CELL_DATE:try:showval = xlrd.xldate_as_tuple(cellvalue, rb.datemode)except xlrd.XLDateError:e1, e2 = sys.exc_info()[:2]showval = "%s:%s" % (e1.__name__, e2)elif celltype == xlrd.XL_CELL_ERROR:showval = xlrd.error_text_from_code.get(cellvalue, 'Unknown error code 0x%02x' % cellvalue)else:showval = cellvalue#get stylexf=rb.xf_list[sheet.cell_xf_index(rowx,colx)]wtxf=copy_xf(rb,xf)#fill value(replace the varible in the cell_value)if showval:m=p.search(showval)#查询是否存在{{?p<name>}}while m:var_name=m.groups()[0]try:if var_name in position[i].keys():value = position[i].get(var_name,"") #读取第一个参数的值print "begin||",var_name,":",value,chardet.detect(value)# assert value is Trueif value:if not isinstance(value, unicode):value= value.decode("utf-8")else:value=""print "decode||",var_name,":",valueprint "-----------------------------------"else:raise Exceptionexcept Exception, e:error= u"the param:{{%(var_name)s}} in sheet(%(index)s) of the template:%(source_file)s can't be found in position's keys list" % \{"source_file":os.path.split(source_file)[1],"index":i+1,"var_name":var_name}print error,ereturn dict(error=error.encode('utf-8'))showval=p.sub(value,showval,count=1)#用这个值替换cell_value 中的该{{参数}}m=p.search(showval)#检查是否还有参数ws.write(rowx,colx,showval,wtxf)wb.save(result_file)return dict(target_file=os.path.join("/public/excel/target",target_file),warning=warning)def _test():#open the excel filerb=open_workbook("test1.xls",on_demand=True,formatting_info=True)for attr in ("biff_version","codepage","countries","encoding","colour_map","font_list","format_list","format_map","user_name","nsheets"):print "%s=%s" %(attr, rb.__getattribute__(attr))#show the loaded status for sheetsfor sheet_name in rb.sheet_names():print "%s loaded = %s" %(sheet_name, rb.sheet_loaded(sheet_name))#get the sheet1sheet=rb.sheet_by_index(0)print "%s has %d rows, %d cols" %(, sheet.nrows, sheet.ncols)print "Shoe the file content"for rowx in range(0,sheet.nrows):for colx in range(0,sheet.ncols):#get the cell valuecellvalue=sheet.cell_value(rowx,colx)#get the cell typecelltype=sheet.cell_type(rowx,colx)#init the showable valueshowvalue=""if celltype == xlrd.XL_CELL_DATE:try:showval = xlrd.xldate_as_tuple(cellvalue, rb.datemode)except xlrd.XLDateError:e1, e2 = sys.exc_info()[:2]showval = "%s:%s" % (e1.__name__, e2)elif celltype == xlrd.XL_CELL_ERROR:showval = xlrd.error_text_from_code.get(cellvalue, 'Unknown error code 0x%02x' % cellvalue)else:showval = cellvalue#get stylexf=rb.xf_list[sheet.cell_xf_index(rowx,colx)]#print rb.colour_map[xf.background.background_colour_index]#display the cell forecolorcolor=rb.colour_map[xf.background.pattern_colour_index]#show the contentprint ("[%s]=%s,[color]=%s" % (cellnameabs(rowx,colx),showval,color))#show the loaded status for sheets after load sheet1for sheet_name in rb.sheet_names():print "%s loaded = %s" %(sheet_name, rb.sheet_loaded(sheet_name))##################change the excel and write it out##################get the xlwt object from rb objectwb = copy(rb)#get the original excel cell stylerbxf=rb.xf_list[sheet.cell_xf_index(0,0)]#copy the xlrd style to xlwt stylewtrf=copyXF(rb,rbxf)#change an attribute of this style, the color index can refer to VBA document wtrf.pattern.pattern_fore_colour=15#set the new value and new style#wb.get_sheet(0).write(0,0,'changed!')wb.get_sheet(0).write(0,0,'changed!',wtrf)#output to filewb.save('test2.xls')def test(source_file="",position=[{}],target_file=""):'''根据source_file传入的excel模板文件路径,使用position中map对模板中的{{varible}}中的varible字段进行数据填充,生成新的文件放入file_pathsource_file:模板文件名;非空路径为:/public/excel/source/<name>.xls,空值默认模板:/public/excel/source/module.xls,position:[{key:value,key1:value1,key2:value2,...},#模板excel的sheet[0]内的参数map {key:value,key1:value1,key2:value2,...},#模板excel的sheet[1]内的参数map{key:value,key1:value1,key2:value2,...},#模板excel的sheet[...]内的参数map]file_path:生成的文件路径以及文件名;空值为默认路径:public/excel/target/result.xls '''print positionif target_file:target_file=os.path.join(conf.APP_DIR, "public/excel/target", target_file) else:target_file=target_file_moldif source_file:source_file=os.path.join(conf.APP_DIR, "public/excel/source", source_file) else:source_file=source_file_moldtry:rb = open_workbook(source_file,formatting_info=True)except:print "(%s)路径名不正确" % source_fileerror= "(%s)路径名不正确" % source_filereturn dict(error=error)wb = copy(rb)shxrange = range(rb.nsheets)while len(shxrange)>len(position):print '警告:position的map数小于sheets个数'position.append({})for index in shxrange:ws = wb.get_sheet(index)sh = rb.sheet_by_index(index)nrows = sh.nrowsncols = sh.ncolsfor i in range(0,nrows):for j in range(0,ncols):cell_value=sh.cell(i,j).valuecell_type=sh.cell(i,j).typem=p.search(cell_value)#查询是否存在{{?p<name>}}while m:var_name=m.groups()[0]print "var_name:",var_nametry:value = position[index].get(var_name) #读取第一个参数的值if value and not isinstance(value, unicode):value= value.decode("utf-8")except Exception, e:error= u"模板文件:%(source_file)s的第%(index)s个sheet中的参数{{%(var_name)s}}在position中找不到对应的key" % \{"source_file":os.path.split(source_file)[1],"index":index+1,"var_name":var_name}print errorreturn dict(error=error)print 'value', valueif not value:breakcell_value=p.sub(value,cell_value,count=1)#用这个值替换cell_value中的该{{参数}}m=p.search(cell_value)#检查是否还有参数#把处理后的cell_value填入结果单元格try:ws.write(i, j, cell_value)except:error= u"excel写入失败"return dict(error=error)wb.save(target_file)return dict(target_file=target_file)def test2():pass# Step 1: Create an input file for the demodef create_input_file():wtbook = xlwt.Workbook()wtsheet = wtbook.add_sheet(u'First')colours = 'white black red green blue pink turquoise yellow'.split()fancy_styles = [xlwt.easyxf('font: name Times New Roman, italic on;''pattern: pattern solid, fore_colour %s;'% colour) for colour in colours]for rowx in xrange(8):wtsheet.write(rowx, 0, rowx)wtsheet.write(rowx, 1, colours[rowx], fancy_styles[rowx]) wtbook.save('demo_copy2_in.xls')# Step 2: Copy the file, changing data content# ('pink' -> 'MAGENTA', 'turquoise' -> 'CYAN')# without changing the formattingfrom xlutils.filter import process,XLRDReader,XLWTWriter# Patch: add this function to the end of xlutils/copy.pydef copy2(wb):w = XLWTWriter()process(XLRDReader(wb,'unknown.xls'),w)return w.output[0][1], w.style_listdef update_content():rdbook = xlrd.open_workbook('demo_copy2_in.xls', formatting_info=True) sheetx = 0rdsheet = rdbook.sheet_by_index(sheetx)wtbook, style_list = copy2(rdbook)wtsheet = wtbook.get_sheet(sheetx)fixups = [(5, 1, 'MAGENTA'), (6, 1, 'CYAN')]for rowx, colx, value in fixups:xf_index = rdsheet.cell_xf_index(rowx, colx)wtsheet.write(rowx, colx, value, style_list[xf_index])wtbook.save('demo_copy2_out.xls')。

相关文档
最新文档