精华内容
下载资源
问答
  • 做这次脚本的初衷是为了从一个excel读取项目名称,并根据项目名称中的内容去匹配模板,如果项目中有新建则去匹配新建的模板某种匹配另一个模板,并将模板修改文件名为项目名称并重新改变目录,一下是代码实现 ...

    一、需求分析

    做这次脚本的初衷是为了从一个excel读取项目名称,并根据项目名称中的内容去匹配模板,如果项目中有新建则去匹配新建的模板某种匹配另一个模板,并将模板修改文件名为项目名称并重新改变目录,一下是代码实现

     

    二、代码和注释 

    # -*- coding: utf-8 -*-
    import os, sys,re,shutil
    import xlrd
    
    
    dir=r'C:\Users\Administrator\Desktop\9.6\19年配网工程储备' #原文件存放的目录
    #下面是两个模板第一个是新建模板,另一个是其他模板
    xinjianfile=r'C:\Users\Administrator\Desktop\9.6\temp\徐州铜山10千伏大许镇机关南2#配变新建工程.xlsx'
    otherfile=r'C:\Users\Administrator\Desktop\9.6\temp\徐州铜山10千伏大许镇黄楼村4#配变增容改造工程.xlsx'
    save_path=r'C:\Users\Administrator\Desktop\9.6\changed'#修改后需要存放的目录
    fs = os.listdir(dir)#列出该文件下所有文件,读取原文件夹下存放的excel文件
    for f1 in fs:
        print('--------------current file to be make is %s ---------------' % f1)
        #因为以下文件有问题,需要用continue跳出循坏
        if f1[0]=='~':continue
        if  '单集' in f1 : continue
        #存放目录的子文件夹
        tmp_path = os.path.join(dir,f1)
        save_file_path=save_path+'/'+f1+'/'
        if not os.path.exists(save_file_path):
            os.makedirs(save_file_path)
       
        work_book = xlrd.open_workbook(tmp_path)
        sheet0 = work_book.sheet_by_index(0)#读取改excel表中的第一个文件
        col_values = sheet0.col_values(1) #读取改excel表中的第一个文件第二列,实际中第二列就是项目名称
        colus=col_values[4:] #以为第二列前几个是无效信息用列表切片来跳过
        i = 1
    
        for f in colus:
            f=str(i)+'.'+f  #这里给文件名加上标号
            i+=1
            #这里根据项目名称去匹配模板
            if '新建' in f:
                new_filename=save_file_path+f+'.xlsx'
                shutil.copyfile(xinjianfile, new_filename)  #复制excel文件并存储到相应目录
            else:
                new_filename = save_file_path + f+'.xlsx'
                shutil.copyfile(otherfile, new_filename)
    
    
    
    
    
    
    
    展开全文
  • python处理excel文件主要是第三方模块库xlrd、xlwt、xluntils和pyExcelerator,除此之外,python处理excel还可以用win32com和openpyxl模块。安装:pip install xlutils二、使用xlrd读取文件:importxlrd#打开一个...

    一、简介

    用python来自动生成excel数据文件。python处理excel文件主要是第三方模块库xlrd、xlwt、xluntils和pyExcelerator,除此之外,python处理excel还可以用win32com和openpyxl模块。

    安装:

    pip install xlutils

    二、使用xlrd读取文件:

    importxlrd#打开一个workbook

    workbook = xlrd.open_workbook('E:\Code\Python\testdata.xls')#抓取所有sheet页的名称

    worksheets =workbook.sheet_names()print('worksheets is %s' %worksheets)#定位到sheet1

    worksheet1 = workbook.sheet_by_name(u'Sheet1')"""#通过索引顺序获取

    worksheet1 = workbook.sheets()[0]

    #或

    worksheet1 = workbook.sheet_by_index(0)"""

    """#遍历所有sheet对象

    for worksheet_name in worksheets:

    worksheet = workbook.sheet_by_name(worksheet_name)"""

    #遍历sheet1中所有行row

    num_rows =worksheet1.nrowsfor curr_row inrange(num_rows):

    row=worksheet1.row_values(curr_row)print('row%s is %s' %(curr_row,row))#遍历sheet1中所有列col

    num_cols =worksheet1.ncolsfor curr_col inrange(num_cols):

    col=worksheet1.col_values(curr_col)print('col%s is %s' %(curr_col,col))#遍历sheet1中所有单元格cell

    for rown inrange(num_rows):for coln inrange(num_cols):

    cell=worksheet1.cell_value(rown,coln)printcell"""#其他写法:

    cell = worksheet1.cell(rown,coln).value

    print cell

    #或

    cell = worksheet1.row(rown)[coln].value

    print cell

    #或

    cell = worksheet1.col(coln)[rown].value

    print cell

    #获取单元格中值的类型,类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

    cell_type = worksheet1.cell_type(rown,coln)

    print cell_type"""

    示例:

    1223921-20190505163706843-513911420.jpg

    整体思路为,打开文件,选定表格,读取行列内容,读取表格内数据

    importxlrdfrom datetime importdate,datetime

    file= 'test3.xlsx'

    defread_excel():

    wb= xlrd.open_workbook(filename=file)#打开文件

    print(wb.sheet_names())#获取所有表格名字

    sheet1= wb.sheet_by_index(0)#通过索引获取表格

    sheet2 = wb.sheet_by_name('年级')#通过名字获取表格

    print(sheet1,sheet2)print(sheet1.name,sheet1.nrows,sheet1.ncols)

    rows= sheet1.row_values(2)#获取行内容

    cols = sheet1.col_values(3)#获取列内容

    print(rows)print(cols)print(sheet1.cell(1,0).value)#获取表格里的内容,三种方式

    print(sheet1.cell_value(1,0))print(sheet1.row(1)[0].value)

    运行结果如下:

    1223921-20190505163920553-476761667.jpg

    那么问题来了,上面的运行结果中红框框中的字段明明是出生日期,可显示的确实浮点数;同时合并单元格里面应该是有内容的,结果不能为空。

    别急,我们来一一解决这两个问题:

    1.Python读取Excel中单元格内容为日期的方式

    Python读取Excel中单元格的内容返回的有5种类型,即上面例子中的ctype:

    ctype : 0 empty,1 string,2 number, 3 date,4 boolean,5 error

    即date的ctype=3,这时需要使用xlrd的xldate_as_tuple来处理为date格式,先判断表格的ctype=3时xldate才能开始操作。

    详细代码如下:

    importxlrdfrom datetime importdate,datetimeprint(sheet1.cell(1,2).ctype)

    date_value= xlrd.xldate_as_tuple(sheet1.cell_value(1,2),wb.datemode)print(date_value)print(date(*date_value[:3]))print(date(*date_value[:3]).strftime('%Y/%m/%d'))

    运行结果如下:

    1223921-20190505164123452-1565028247.jpg

    2.获取合并单元格的内容

    在操作之前,先介绍一下merged_cells()用法,merged_cells返回的这四个参数的含义是:(row,row_range,col,col_range),其中[row,row_range)包括row,不包括row_range,col也是一样,即(1, 3, 4, 5)的含义是:第1到2行(不包括3)合并,(7, 8, 2, 5)的含义是:第2到4列合并。

    详细代码如下:

    print(sheet1.merged_cells)print(sheet1.cell_value(1,3))print(sheet1.cell_value(4,3))print(sheet1.cell_value(6,1))

    运行结果如下:

    1223921-20190505164310180-397053198.jpg

    发现规律了没?是的,获取merge_cells返回的row和col低位的索引即可! 于是可以这样批量获取:

    详细代码如下:

    merge =[]print(sheet1.merged_cells)for (rlow,rhigh,clow,chigh) insheet1.merged_cells:

    merge.append([rlow,clow])for index inmerge:print(sheet1.cell_value(index[0],index[1]))

    运行结果跟上图一样,如下:

    1223921-20190505164334159-880074960.jpg

    三、使用xlwt生成Excel文件(可以控制Excel中单元格的格式):

    importxlwt#创建workbook和sheet对象

    workbook = xlwt.Workbook() #注意Workbook的开头W要大写

    sheet1 = workbook.add_sheet('sheet1',cell_overwrite_ok=True)

    sheet2= workbook.add_sheet('sheet2',cell_overwrite_ok=True)#向sheet页中写入数据

    sheet1.write(0,0,'this should overwrite1')

    sheet1.write(0,1,'aaaaaaaaaaaa')

    sheet2.write(0,0,'this should overwrite2')

    sheet2.write(1,2,'bbbbbbbbbbbbb')"""#-----------使用样式-----------------------------------

    #初始化样式

    style = xlwt.XFStyle()

    #为样式创建字体

    font = xlwt.Font()

    font.name = 'Times New Roman'

    font.bold = True

    #设置样式的字体

    style.font = font

    #使用样式

    sheet.write(0,1,'some bold Times text',style)"""

    #保存该excel文件,有同名文件时直接覆盖

    workbook.save('E:\Code\Python\test2.xls')print '创建excel文件完成!'

    示例:

    importxlwt#设置表格样式

    def set_style(name,height,bold=False):

    style=xlwt.XFStyle()

    font=xlwt.Font()

    font.name=name

    font.bold=bold

    font.color_index= 4font.height=height

    style.font=fontreturnstyle#写Excel

    defwrite_excel():

    f=xlwt.Workbook()

    sheet1= f.add_sheet('学生',cell_overwrite_ok=True)

    row0= ["姓名","年龄","出生日期","爱好"]

    colum0= ["张三","李四","恋习Python","小明","小红","无名"]#写第一行

    for i inrange(0,len(row0)):

    sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))#写第一列

    for i inrange(0,len(colum0)):

    sheet1.write(i+1,0,colum0[i],set_style('Times New Roman',220,True))

    sheet1.write(1,3,'2006/12/12')

    sheet1.write_merge(6,6,1,3,'未知')#合并行单元格

    sheet1.write_merge(1,2,3,3,'打游戏')#合并列单元格

    sheet1.write_merge(4,5,3,3,'打篮球')

    f.save('test.xls')if __name__ == '__main__':

    write_excel()

    结果图:

    1223921-20190505164448011-77401667.jpg

    在此,对write_merge()的用法稍作解释,如上述:sheet1.write_merge(1,2,3,3,'打游戏'),即在四列合并第2,3列,合并后的单元格内容为"合计",并设置了style。其中,里面所有的参数都是以0开始计算的。

    四、使用xluntils模块修改文件:

    importxlrdimportxlutils.copy#打开一个workbook

    rb = xlrd.open_workbook('E:\Code\Python\test1.xls')

    #复制的Excel是没有格式的,要保留原格式需要使用:rb = xlrd.open_workbook('E:\Code\Python\test1.xls',formatting_info=True)

    wb=xlutils.copy.copy(rb)#获取sheet对象,通过sheet_by_index()获取的sheet对象没有write()方法

    ws =wb.get_sheet(0)#写入数据

    ws.write(1, 1, 'changed!')#添加sheet页

    wb.add_sheet('sheetnnn2',cell_overwrite_ok=True)#利用保存时同名覆盖达到修改excel文件的目的,注意未被修改的内容保持不变

    wb.save('E:\Code\Python\test1.xls')

    在修改的过程中,使用ws.write()被修改的单元格会清空格式,若要保留原格式,需要使用以下函数:

    #本文重点,该函数中定义:对于没有任何修改的单元格,保持原有格式。

    defsetOutCell(outSheet, col, row, value):"""Change cell value without changing formatting."""

    def_getOutCell(outSheet, colIndex, rowIndex):"""HACK: Extract the internal xlwt cell representation."""row=outSheet._Worksheet__rows.get(rowIndex)if not row: returnNone

    cell=row._Row__cells.get(colIndex)returncell#HACK to retain cell style.

    previousCell =_getOutCell(outSheet, col, row)#END HACK, PART I

    outSheet.write(row, col, value)#HACK, PART II

    ifpreviousCell:

    newCell=_getOutCell(outSheet, col, row)ifnewCell:

    newCell.xf_idx=previousCell.xf_idx#使用函数setOutCell代替ws.write()

    setOutCell(ws,col,row,"写入内容")

    五、pyExcelerator模块与xlwt类似,也可以用来生成excel文件

    读:

    importpyExcelerator#parse_xls返回一个列表,每项都是一个sheet页的数据。#每项是一个二元组(表名,单元格数据)。其中单元格数据为一个字典,键值就是单元格的索引(i,j)。如果某个单元格无数据,那么就不存在这个值

    sheets = pyExcelerator.parse_xls('E:\Code\Python\testdata.xls')print sheets

    写:

    importpyExcelerator#创建workbook和sheet对象

    wb =pyExcelerator.Workbook()

    ws= wb.add_sheet(u'第一页')#设置样式

    myfont =pyExcelerator.Font()

    myfont.name= u'Times New Roman'myfont.bold=True

    mystyle=pyExcelerator.XFStyle()

    mystyle.font=myfont#写入数据,使用样式

    ws.write(0,0,u'ni hao 帕索!',mystyle)#保存该excel文件,有同名文件时直接覆盖

    wb.save('E:\Code\Python\mini.xls')print '创建excel文件完成!'

    六、报错:

    但是我们会发现在读取xlsx格式的Excel时,传入formatting_info会直接抛出异常,而读取xls类型的文件时不存在此问题。

    raise NotImplementedError("formatting_info=True not yet implemented")

    不难推断,抛异常的原因是formatting_info还没有对新版本的xlsx的格式完成兼容。

    那么如果我们要操作的文件刚好是xlsx格式,又想保存其原有的格式该怎么办呢?

    1、修改为xlsx为xls(推荐)

    将xlsx另存为xls,然后再进行后续操作,亲测有效,能正常保存Excel原有格式, 不用修改代码。

    1223921-20190505162745656-868901670.png

    2、改用 openpyxl

    coding尝试读取文件,处理速度真的很慢...而且规则和宏全部丢失。

    3、使用pywin32

    这是用于Win32 (pywin32)扩展的Python扩展库,它提供了对许多来自Python的Windows api的访问。

    4、使用老旧的版本 xlrd-0.6.1

    使用xlrd-0.6.1可以读取,没有异常抛出。直到我传入其他几个xls文件,出现Expected BOF record; found 0x4b50 错误,原因是xlrd-0.6.1不支持office2007

    参考:

    展开全文
  • python处理excel文件主要是第三方模块库xlrd、xlwt、xluntils和pyExcelerator,除此之外,python处理excel还可以用win32com和openpyxl模块。安装:pip install xlutils二、使用xlrd读取文件:importxlrd#打开一个...

    一、简介

    用python来自动生成excel数据文件。python处理excel文件主要是第三方模块库xlrd、xlwt、xluntils和pyExcelerator,除此之外,python处理excel还可以用win32com和openpyxl模块。

    安装:

    pip install xlutils

    二、使用xlrd读取文件:

    importxlrd#打开一个workbook

    workbook = xlrd.open_workbook('E:\Code\Python\testdata.xls')#抓取所有sheet页的名称

    worksheets =workbook.sheet_names()print('worksheets is %s' %worksheets)#定位到sheet1

    worksheet1 = workbook.sheet_by_name(u'Sheet1')"""#通过索引顺序获取

    worksheet1 = workbook.sheets()[0]

    #或

    worksheet1 = workbook.sheet_by_index(0)"""

    """#遍历所有sheet对象

    for worksheet_name in worksheets:

    worksheet = workbook.sheet_by_name(worksheet_name)"""

    #遍历sheet1中所有行row

    num_rows =worksheet1.nrowsfor curr_row inrange(num_rows):

    row=worksheet1.row_values(curr_row)print('row%s is %s' %(curr_row,row))#遍历sheet1中所有列col

    num_cols =worksheet1.ncolsfor curr_col inrange(num_cols):

    col=worksheet1.col_values(curr_col)print('col%s is %s' %(curr_col,col))#遍历sheet1中所有单元格cell

    for rown inrange(num_rows):for coln inrange(num_cols):

    cell=worksheet1.cell_value(rown,coln)printcell"""#其他写法:

    cell = worksheet1.cell(rown,coln).value

    print cell

    #或

    cell = worksheet1.row(rown)[coln].value

    print cell

    #或

    cell = worksheet1.col(coln)[rown].value

    print cell

    #获取单元格中值的类型,类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

    cell_type = worksheet1.cell_type(rown,coln)

    print cell_type"""

    三、使用xlwt生成Excel文件(可以控制Excel中单元格的格式):

    importxlwt#创建workbook和sheet对象

    workbook = xlwt.Workbook() #注意Workbook的开头W要大写

    sheet1 = workbook.add_sheet('sheet1',cell_overwrite_ok=True)

    sheet2= workbook.add_sheet('sheet2',cell_overwrite_ok=True)#向sheet页中写入数据

    sheet1.write(0,0,'this should overwrite1')

    sheet1.write(0,1,'aaaaaaaaaaaa')

    sheet2.write(0,0,'this should overwrite2')

    sheet2.write(1,2,'bbbbbbbbbbbbb')"""#-----------使用样式-----------------------------------

    #初始化样式

    style = xlwt.XFStyle()

    #为样式创建字体

    font = xlwt.Font()

    font.name = 'Times New Roman'

    font.bold = True

    #设置样式的字体

    style.font = font

    #使用样式

    sheet.write(0,1,'some bold Times text',style)"""

    #保存该excel文件,有同名文件时直接覆盖

    workbook.save('E:\Code\Python\test2.xls')print '创建excel文件完成!'

    四、使用xluntils模块修改文件:

    importxlrdimportxlutils.copy#打开一个workbook

    rb = xlrd.open_workbook('E:\Code\Python\test1.xls')

    #复制的Excel是没有格式的,要保留原格式需要使用:rb = xlrd.open_workbook('E:\Code\Python\test1.xls',formatting_info=True)

    wb=xlutils.copy.copy(rb)#获取sheet对象,通过sheet_by_index()获取的sheet对象没有write()方法

    ws =wb.get_sheet(0)#写入数据

    ws.write(1, 1, 'changed!')#添加sheet页

    wb.add_sheet('sheetnnn2',cell_overwrite_ok=True)#利用保存时同名覆盖达到修改excel文件的目的,注意未被修改的内容保持不变

    wb.save('E:\Code\Python\test1.xls')

    在修改的过程中,使用ws.write()被修改的单元格会清空格式,若要保留原格式,需要使用以下函数:

    #本文重点,该函数中定义:对于没有任何修改的单元格,保持原有格式。

    defsetOutCell(outSheet, col, row, value):"""Change cell value without changing formatting."""

    def_getOutCell(outSheet, colIndex, rowIndex):"""HACK: Extract the internal xlwt cell representation."""row=outSheet._Worksheet__rows.get(rowIndex)if not row: returnNone

    cell=row._Row__cells.get(colIndex)returncell#HACK to retain cell style.

    previousCell =_getOutCell(outSheet, col, row)#END HACK, PART I

    outSheet.write(row, col, value)#HACK, PART II

    ifpreviousCell:

    newCell=_getOutCell(outSheet, col, row)ifnewCell:

    newCell.xf_idx=previousCell.xf_idx#使用函数setOutCell代替ws.write()

    setOutCell(ws,col,row,"写入内容")

    五、pyExcelerator模块与xlwt类似,也可以用来生成excel文件

    读:

    importpyExcelerator#parse_xls返回一个列表,每项都是一个sheet页的数据。#每项是一个二元组(表名,单元格数据)。其中单元格数据为一个字典,键值就是单元格的索引(i,j)。如果某个单元格无数据,那么就不存在这个值

    sheets = pyExcelerator.parse_xls('E:\Code\Python\testdata.xls')print sheets

    写:

    importpyExcelerator#创建workbook和sheet对象

    wb =pyExcelerator.Workbook()

    ws= wb.add_sheet(u'第一页')#设置样式

    myfont =pyExcelerator.Font()

    myfont.name= u'Times New Roman'myfont.bold=True

    mystyle=pyExcelerator.XFStyle()

    mystyle.font=myfont#写入数据,使用样式

    ws.write(0,0,u'ni hao 帕索!',mystyle)#保存该excel文件,有同名文件时直接覆盖

    wb.save('E:\Code\Python\mini.xls')print '创建excel文件完成!'

    报错:

    但是我们会发现在读取xlsx格式的Excel时,传入formatting_info会直接抛出异常,而读取xls类型的文件时不存在此问题。

    raise NotImplementedError("formatting_info=True not yet implemented")

    不难推断,抛异常的原因是formatting_info还没有对新版本的xlsx的格式完成兼容。

    那么如果我们要操作的文件刚好是xlsx格式,又想保存其原有的格式该怎么办呢?

    1、修改为xlsx为xls(推荐)

    将xlsx另存为xls,然后再进行后续操作,亲测有效,能正常保存Excel原有格式, 不用修改代码。

    2、改用 openpyxl

    coding尝试读取文件,处理速度真的很慢...而且规则和宏全部丢失。

    3、使用pywin32

    这是用于Win32 (pywin32)扩展的Python扩展库,它提供了对许多来自Python的Windows api的访问。

    4、使用老旧的版本 xlrd-0.6.1

    使用xlrd-0.6.1可以读取,没有异常抛出。直到我传入其他几个xls文件,出现Expected BOF record; found 0x4b50 错误,原因是xlrd-0.6.1不支持office2007

    参考:

    展开全文
  • python处理excel文件主要是第三方模块库xlrd、xlwt、xluntils和pyExcelerator,除此之外,python处理excel还可以用win32com和openpyxl模块。数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件。...

    用python来自动生成excel数据文件。python处理excel文件主要是第三方模块库xlrd、xlwt、xluntils和pyExcelerator,除此之外,python处理excel还可以用win32com和openpyxl模块。

    数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件。因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道。

    如果仅仅是要以表单形式保存数据,可以借助 CSV 格式(一种以逗号分隔的表格数据格式)进行处理,Excel 也支持此格式。但标准的 Excel 文件(xls/xlsx)具有较复杂的格式,并不方便像普通文本文件一样直接进行读写,需要借助第三方库来实现。

    常用的库是 python-excel 系列:

    xlrd、xlwt、xlutils

    xlrd - 读取 Excel 文件

    xlwt - 写入 Excel 文件

    xlutils - 操作 Excel 文件的实用工具,如复制、分割、筛选等

    尽管这是目前被用得最多的 Excel 库,我还是很想吐槽为什么这三个包不能放在一个模块里……另外它们有个缺陷,就是只能处理 xls 文件。如果你想用新版本的 xlsx,可以考虑 openpyxl 和 xlsxwriter。

    不过今天只说说这三个。

    安装

    安装的方法没啥特别的,只是得装三遍。可以下载安装包、下载代码压缩包、或者通过 pip 等。可参考 如何安装 Python 的第三方模块 - Crossin的编程教室 - 知乎专栏

    如果安装过之前推荐的 anaconda,那么就已经有了 xlrd 和 xlwt,但 xlutils 没有附带在安装包中,使用时仍需另行安装。

    读取

    结合一段简单的代码来看:

    import xlrd

    # 打开 xls 文件

    book = xlrd.open_workbook("test.xls")

    print "表单数量:", book.nsheets

    print "表单名称:", book.sheet_names()

    # 获取第1个表单

    sh = book.sheet_by_index(0)

    print u"表单 %s 共 %d 行 %d 列" % (sh.name, sh.nrows, sh.ncols)

    print "第二行第三列:", sh.cell_value(1, 2)

    # 遍历所有表单

    for s in book.sheets():

    for r in range(s.nrows):

    # 输出指定行

    print s.row(r)

    测试文件:

    27151253_KUpb.png

    输出结果:

    表单数量: 2

    表单名称: [u'Group.A', u'Group.B']

    表单 Group.A 共 7 行 3 列

    第二行第三列: 15.0

    [text:u'Rank', text:u'Team', text:u'Points']

    [number:1.0, text:u'Brazil', number:15.0]

    [number:2.0, text:u'Russia', number:12.0]

    ...

    常用的方法:

    open_workbook 打开文件

    sheet_by_index 获取某一个表单

    sheets 获取所有表单

    cell_value 获取指定单元格的数据

    写入

    还是看代码:

    import xlwt

    # 创建 xls 文件对象

    wb = xlwt.Workbook()

    # 新增一个表单

    sh = wb.add_sheet('A Test Sheet')

    # 按位置添加数据

    sh.write(0, 0, 1234.56)

    sh.write(1, 0, 8888)

    sh.write(2, 0, 'hello')

    sh.write(2, 1, 'world')

    # 保存文件

    wb.save('example.xls')

    生成文件:

    27151253_KW9h.png

    常用的方法:

    Workbook 创建文件对象

    add_sheet 新增一个表单

    write 在指定单元格写入数据

    修改

    很遗憾,并没有直接修改 xls 文件的方法。通常的做法是,读取出文件,复制一份数据,对其进行修改,再保存。

    在复制时,需要用到 xlutils 中的方法。

    from xlrd import open_workbook

    from xlutils.copy import copy

    # 打开文件

    rb = open_workbook("example.xls")

    # 复制

    wb = copy(rb)

    # 选取表单

    s = wb.get_sheet(0)

    # 写入数据

    s.write(0, 1, 'new data')

    # 保存

    wb.save('example.xls')

    修改后文件:

    27151253_zqyD.png

    特别要注意的是,选取读取表单时,要使用 sheet_by_index,而在选取写入表单时,则要用 get_sheet。不要问我为什么,我也很想知道这么设定的用意何在……

    时间转换

    如果表单中有时间格式的数据,通过处理之后,你会发现时间数据出了差错。

    27151253_4RDY.png

    27151253_yEne.png

    输出单元格内容:

    [number:8888.0, xldate:42613.0]

    因为这里 xldate 有自己的格式定义。如果要使用正确的格式,必须转换:

    new_date = xlrd.xldate.xldate_as_datetime(date, book.datemode)

    date 是对应单元格的数据,book 是打开的文件对象。

    另外,在打开文件时,加上参数 formatting_info=True,可以保证在时间数据在 copy 时保持原样。

    写入时间数据,则可通过此方法创建 excel 的时间对象:

    xlrd.xldate.xldate_from_datetime_tuple

    或者通过 xlwt.easyxf 指定时间格式:

    style = xlwt.easyxf(num_format_str='D-MMM-YY')

    ws.write(1, 0, datetime.now(), style)

    具体细节及更多功能这里不展开说明。

    以上便是 Python 操作 Excel 文件的一些基本方法。实际使用过程中遇到问题或者需要了解更多功能,永远记住两个词:

    RTFM、 STFW

    参考资料:

    http://www.jb51.net/article/60510.htm

    展开全文
  • Excel文件处理15.1 引言数据处理是Python的一大应用场景,正如我在本书之前所反复强调的,基于Python活跃及强大的社区,使得Python可以很灵活地处理各种问题。其中,不可置否,Excel是当下最流行的数据处理软件,...
  • python处理excel文件主要是第三方模块库xlrd、xlwt、xluntils和pyExcelerator,除此之外,python处理excel还可以用win32com和openpyxl模块。安装:pip install xlutils二、使用xlrd读取文件:importxlrd#打开一个...
  • 前段时间做一个项目,却不得不使用Python直接生成Excel文件,后来随着需求的变化,还要对已有的Excel文件进行读取。在这个过程中,研究并尝试了一些工具,也走了一些弯路。记录下来,下次再有类似需求的时候就不用...
  • 虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件。通常我都是把数据保存为以TAB分割的文本文件(TSV),再在Excel中进行导入或者直接...
  • 详解Python操作Excel文件

    千次阅读 多人点赞 2019-09-03 10:02:32
    本篇文章主要总结了一下利用python操作Excel文件的第三方库和方法。 常见库简介 1.xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件。 地址:...
  • Q2:python中如何用xlrd、xlwt库边读边写入excel文件Python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读取...
  • Excel文件处理15.1 引言数据处理是Python的一大应用场景,正如我在本书之前所反复强调的,基于Python活跃及强大的社区,使得Python可以很灵活地处理各种问题。其中,不可置否,Excel是当下最流行的数据处理软件,...
  • 背景:每个月都有50份Excel数据,需要把这50份数据复制到同一个Excel文件中。 这里要用到xlwings。 代码如下: import xlwings as xw import os def get_files(path): """ 获取到指定路径下的Excel文件...
  • 使用Python合并Excel文件

    千次阅读 热门讨论 2019-09-25 15:06:41
    最近工作中,需要做很多合并excel文件的工作,文件量少的时候,复制粘贴没问题,数据量大的时候,就非常耗时;于是自己用python写了一段合并excel文件的小程序。大家可以直接拿来用。 工具 环境:Windows10 语言:...
  • 我正在编写一个代码,用于将单元格从一个大的excel文件(11740行)复制到另一个大excel文件(78472行)。两个文件都有31列。当我运行下面的代码时,它会抛出错误,有时是内存错误,有时是权限拒绝错误。之后它会破坏...
  • 这也就意味着你可以在Linux下读取Excel文件。首先,打开workbook;复制代码 代码如下:import xlrdwb = xlrd.open_workbook('myworkbook.xls')检查表单名字:复制代码 代码如下:wb.sheet_names()得到第一张表单,两种...
  • 这也就意味着你可以在Linux下读取Excel文件。首先,打开workbook;复制代码 代码如下:import xlrdwb = xlrd.open_workbook('myworkbook.xls')检查表单名字:复制代码 代码如下:wb.sheet_names()得到第一张表单,两种...
  • python读写Excel文件

    2019-03-25 17:28:24
    python读写Excel有很多的库,具体可参考博客Python读写Excel文件第三方库汇总,你想要的都在这儿! 下图大概对比了各个库: 并且该博主也进行了测试,发现xlwings的效率也很高,于是我打算使用xlwings这个库。 该库...
  • pythonExcel文件进行读写、复制、删除等操作 #coding: utf-8 import xlrd, shutil, os, xlwt from xlutils.copy import copy def readExcel(path, index): data = xlrd.open_workbook(path) # 读取excel内容 ...
  • python复制excel

    千次阅读 2013-05-13 17:36:32
    perl的类库中改写完excel之后,格式丢失的很严重,所有merge之后的空格恢复了一个一个的样子,所有的 ...尝试在python下对xls文件进行操作。    经过在网上的搜索,查到的一个不错的网站 ht
  • Python读写Excel文件

    千次阅读 2017-04-21 09:30:34
    虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件。通常我都是把数据保存为以TAB分割的文本文件(TSV),再在Excel中进行导入或者直接...
  • Python读取Excel文件

    2021-03-17 15:49:48
    read_excel 读取方式 依赖包 pip3 install xlrd 1.0版本 import pandas as pd io = r'E:\Desktop\jupyter_data\test.xlsx' ...原因:通过test文件右键属性,复制文件全路径,如下: 复制的内容: ‪E:\Desktop\j
  • Python处理Excel文件

    2017-09-23 17:15:08
    Python读写Excel文件四种python处理excel模块PK我主要尝试了四种工具,在此并不会给出他们的排名,因为在不同的应用场景下,做出的选择会不同。XlsxWriterxlrd&xlwtOpenPyXLMicrosoft Excel API介绍可以创建...
  • python 处理excel文件、txt文件

    千次阅读 2018-01-26 11:16:58
    处理excel文件python库有很多,如xlsxwriter、xlrd、openpyxl等。由于经常用pandas处理数据,而且pandas读写excel更方便,所以主要讲pandas是如何操作excel的。也介绍了如何分别使用用xlsxwriter和openpyxl向excel...
  • 这也就意味着你可以在Linux下读取Excel文件。首先,打开workbook;复制代码 代码如下:import xlrdwb = xlrd.open_workbook('myworkbook.xls')检查表单名字:复制代码 代码如下:wb.sheet_names()得到第一张表单,两种...
  • 使用python合并excel文件

    千次阅读 2018-04-10 14:42:17
           工作上需要把几个较大的excel文件合并成单个文件,网上查了一堆,都是把excel...而且要转换到excel文件我看到的是用python的xlwt一个cell一个cell地写,估计是相当地...
  • 这也就意味着你可以在Linux下读取Excel文件。 首先,打开workbook; 复制代码 代码如下: import xlrd wb = xlrd.open_workbook(‘myworkbook.xls’) 检查表单名字: 复制代码 代码如下: wb.sheet_names() 得到第一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,655
精华内容 4,262
关键字:

python复制excel文件

python 订阅