为了账号安全,请及时绑定邮箱和手机立即绑定

python操作excel

标签:
Python

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]
}

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]
]

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

#-*- 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人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消