python操作excel

python提供了第三方库xlwt用以操作excel表格

简单介绍

   简单介绍一下使用,不想看可以直接跳到最后看案例

class xlwt.Workbook.Workbook(encoding ='ascii',style_compression = 0 )

   这是一个表示工作簿及其所有内容的类。使用xlwt创建Excel文件时,通常首先要实例化此类的对象。

方法

  1. add_sheet(sheetname,cell_overwrite_ok = False )

      此方法用于在工作簿中创建工作表。

参数:

  • sheetname - 用于此工作表的名称,因为它将显示在Excel应用程序底部的选项卡中。
  • cell_overwrite_ok - 如果True写入多次,则添加的工作表中的单元格不会引发异常。

返回:

   在Worksheet已添加。

  1. save(filename_or_stream )

   此方法用于将工作簿保存为本机Excel格式的文件。

参数: filename_or_stream

  • 这可以是包含文件文件名的字符串,在这种情况下,使用提供的名称将excel文件保存到磁盘。它也可以是具有write方法的流对象,例如a StringIO,在这种情况下,excel文件的数据被写入流。

class xlwt.Worksheet.Worksheet(sheetname,parent_book,cell_overwrite_ok = False )
   这是一个表示工作簿中工作表内容的类。

方法

  1. write(r,c,label ='',style = <xlwt.Style.XFStyle object> )

   此方法用于将单元格写入a Worksheet

参数:

  • r - 应写入单元格的工作表中行的零相对数。

  • c - 工作表中应写入单元格的列的零相对数。

  • 标签 -

    要写入的数据值。

  • 风格 -

    样式(也称为XF(扩展格式))是一个 XFStyle对象,它封装应用于单元格及其内容的格式。

    XFStyle最好使用该easyxf()功能设置对象 。它们也可以通过在设置属性设置AlignmentBordersPatternFontProtection对象然后设置这些对象和一个格式字符串作为属性 XFStyle对象。

大致了解到这里就能够做基本的使用了,下面看我们案例

案例(一)

这里的案例主要实现把txt文本中的数据读取后添加到excel中,调用了第三方库xlwt和OrderedDict,首先判断文件类型,通过则继续下一步操作,文件转换流程:

  1. 实例化xlwt对象
  2. 添加数据表
  3. 数据添加

难点

  1. object_pairs_hook 的传入参数是有序的键值对表,而 object_hook 是无序的dict。并且两个参数都给的话,object_pairs_hook 的优先级要更高。就是给object_pairs_hook的解码的键值对列表是有序的,所以些依赖键值对顺序的功能可以用 object_pairs_hook 参数,而不能用 object_hook 。这里直接传入了OrderedDict,具体可参考知乎
  2. write方法中的r和c参数,对应的是excel中零行、列所在位置,开始也一直很懵,看了下网上的案例,大概明白一些,这里和列表的处理很类似,0就代表了第一项,比如这里参数顺序是(0,1,...),即时第一行第二列的位置,可以用下标循环进行全部数据添加,下面上代码

student.txt(原txt文本)

{
    "1":["张三",150,120,100],
    "2":["李四",90,99,95],
    "3":["王五",60,66,68]
}

json2excel.py

from collections import OrderedDict
import xlwt, json

def json2excel(inputFile, outputFile):
    if inputFile.split('.')[1] != 'txt':
        print('please input .txt file!')
        return
    with open(inputFile, 'r') as f:
        data = json.load(f, object_pairs_hook=OrderedDict)
        #创建实例
        wb = xlwt.Workbook()
        #添加sheet
        ws = wb.add_sheet('student', cell_overwrite_ok=True)
        #注意这里的index和后面的i,不要混淆
        for index, (key, values) in enumerate(data.items()):
            #给excel的第一列的每一行添加序号
            ws.write(index, 0, key)

            #给excel的第二列开始的之后每一列的每一行添加数据
            for i, value in enumerate(values):
                ws.write(index, i+1, value)
        wb.save(outputFile)

if __name__ == '__main__':
    json2excel('student.txt', 'student.xls')

student.xls:

image.png

案例(二)

第一个案例熟悉了的话这类对象间的数据处理应该都不成问题,接下来我们来看另一种类型,数据里面就是简单的数组,这里相对之前的就要简单一些,直接遍历然后写入即可,主要用于熟悉一下行列规则

numbers.txt

[
    [1, 82, 65535], 
    [20, 90, 13],
    [26, 809, 1024]
]

json2excel-list.py

from collections import OrderedDict
import xlwt, json

def json2excel(inputFile, outputFile):
    if inputFile.split('.')[1] != 'txt':
        print('please input .txt file!')
        return
    with open(inputFile, 'r') as f:
        data = json.load(f, object_pairs_hook=OrderedDict)
        # 创建实例
        wb = xlwt.Workbook()
        # 添加sheet
        ws = wb.add_sheet('numbers', cell_overwrite_ok=True)
     
        for row in range(len(data)):
            for col in range(len(data[row])):
                ws.write(row, col, data[row][col])
        wb.save(outputFile)

if __name__ == '__main__':
    json2excel('numbers.txt', 'numbers.xls')

image.png

python也有提供相应的创建处理excel和xml的转化,主要用到xlrd这个库,xml的学习小编没有设计,这里贴出参考的github上的原版实例供大家学习参考,也可以直接参考源地址

student.xls:

image.png

excel2xml.py

#-*- coding: utf-8-*-

import xlrd, codecs, json
from lxml import etree
from collections import OrderedDict

def xls2xml(filename, outfile):
    with xlrd.open_workbook(filename) as excel:
        #table = excel.sheet_by_name('student')
        table = excel.sheet_by_index(0)

    data = OrderedDict()
    for i in range(table.nrows):
        key = str(int(table.row_values(i)[0]))
        value = str(table.row_values(i)[1:])
        data[key] = value

    output = codecs.open(outfile, 'w', 'utf-8')
    root = etree.Element('root')
    students_xml = etree.ElementTree(root)
    students = etree.SubElement(root, 'students')
    students.append(etree.Comment('\n\t学生信息表\n\t"d" :[名字, 数学, 语文, 英语]\n'))
    students.text = '\n\t学生信息表\n\t"d" :[名字, 数学, 语文, 英语]\n'
    students.text = '\n'+str(json.dumps(data, indent=4, ensure_ascii=False))+'\n'
    output.write('<?xml version="1.0" encoding="UTF-8"?>\n' + etree.tounicode(students_xml.getroot()))
    output.close()

if __name__ == '__main__':
    xls2xml('student.xls', 'student.xml')

student.xml

<?xml version="1.0" encoding="UTF-8"?>
<root><students>
{
    "1": "['张三', 150.0, 120.0, 100.0]",
    "2": "['李四', 90.0, 99.0, 95.0]",
    "3": "['王五', 60.0, 66.0, 68.0]"
}
<!--
    学生信息表
    "d" :[名字, 数学, 语文, 英语]
--></students></root>
  • 如有问题敬请参考:
  1. xlwt
  2. CSDN
  3. 知乎
  4. 我的Github
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容

  • 原文地址: https://www.jianshu.com/p/ce2ba7caa414 前言: 下面介绍的用py...
    keith666阅读 29,770评论 1 16
  • 每次搞考勤都要弄很久很久,一直想着搞一个代码出来,一直拖一直拖一直拖,直到这次忍不了了,结果用的时间都可以搞两次考...
    夹小欣阅读 2,074评论 0 0
  • 包 python操作excel的包有不少,这次记录xlrd、xlwt、xlutils三个包的使用。从名字可以看出来...
    晚上吃火锅吗阅读 729评论 0 2
  • 2018-11-29 我有一种预感,我们终会再次相遇,以我们最好的模样,在我们最好的年华。 那个与我们无话不谈...
    白露未晞_9dde阅读 277评论 0 1
  • 壹 历史的风烟里, 国君在吃瓜。 吃瓜 吃瓜 口舌与甜汁抵死纠缠...
    东方佳木阅读 765评论 0 4