Python Excel文件操作

本文详细介绍了使用Python的xlrd和xlwt库读取和写入Excel文件的方法。包括读取Excel数据并处理不同类型的数据,如日期和数字,以及如何写入数据到Excel,设置单元格样式和列宽。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题: python 如何读写Excel文件?

解决: 采用第三方包api读取excel

1、主要的第三方包如下

2、以下示例采用的(读)xlrd 和(写)xlwt;

     test.xls 

   

 2.1读取Excel文件

from datetime import datetime
import xlrd
from xlrd import xldate_as_tuple


class ReadExcelData(object):
    """读取EXCel表数据"""
    def __init__(self):
        self.sheet = None

    def decode(self, filename, sheetname):
        try:
            filename = filename.decode('utf-8')
            sheetname = sheetname.decode('utf-8')
        except Exception:
            pass
        return filename, sheetname

    def type_change(self, rows, cols, start_col=0):
        all_content = []
        for i in range(rows):
            row_content = []
            for j in range(start_col, cols):                     # 初始列为0
            # for j in range(cols):
                ctype = self.sheet.cell(i, j).ctype        # 表格的数据类型EXCEL_TYPE={0:empty,1:string,2:number,3:date,4:boolean,5:Error}
                cell = self.sheet.cell_value(i, j)
                if ctype == 2 and cell % 1 == 0:           # 如果是整形
                    cell = int(cell)
                elif ctype == 3:
                    # 转成datetime对象
                    date = datetime(*xldate_as_tuple(cell, 0))
                    cell = date.strftime('%Y-%d-%m %H:%M:%S')
                elif ctype == 4:
                    cell = True if cell == 1 else False
                else:
                    pass
                row_content.append(cell)
            if not self.blank_line(row_content):
                continue
            all_content.append(row_content)
        return all_content

    def blank_line(self,row_content):
        return [val for val in row_content if val]

    def read_excel(self, filename, sheetname=None):
        """获取excel数据,默认读取第一张表"""
        filename, sheetname = self.decode(filename, sheetname)
        rbook = xlrd.open_workbook(filename)
        if sheetname:
            self.sheet = rbook.sheet_by_name(sheetname)
        else:
            self.sheet = rbook.sheet_by_index(0)
        rows = self.sheet.nrows
        cols = self.sheet.ncols
        return self.type_change(rows, cols, start_col=1)

    def read_all_excel(self, filename, sheetname=None):
        filename, sheetname = self.decode(filename, sheetname)
        rbook = xlrd.open_workbook(filename)
        if sheetname:
            self.sheet = rbook.sheet_by_name(sheetname)
        else:
            self.sheet = rbook.sheet_by_index(0)
        rows = self.sheet.nrows
        cols = self.sheet.ncols
        return self.type_change(rows, cols)



if __name__ == '__main__':
    eh = ReadExcelData()
    filename = r'./test.xls'
    sheetname = 'Sheet1'
    ret1 = eh.read_excel(filename)
    ret2 = eh.read_all_excel(filename)
    print('ret1:',ret1)
    print('ret2:',ret2)
    >>ret1: [[12,13],[22,23]]
    >>ret2: [[11,12,13],[21,22,23]]

    

 2.2 写入数据Excel

import xlwt

# Excel 单元格样式设置
VERT_TOP = 0x00         # 上端对齐
VERT_CENTER = 0x01      # 居中对齐(垂直方向上)
VERT_BOTTOM = 0x02      # 低端对齐
HORZ_LEFT = 0x01        # 左端对齐
HORZ_CENTER = 0x02      # 居中对齐(水平方向上)
HORZ_RIGHT = 0x03       # 右端对齐


class WriteExcel(object):
    """写入Excel数据"""
    def write_excel(self, data_list, excel_file, sheet_name='Sheet1'):
        """将数据写入Excel
        :param data_list 格式[[11,12,13],[21,22,23]]
        """
        # new一个文件
        workbook = xlwt.Workbook(encoding='utf-8')
        # new一个sheet
        worksheet = workbook.add_sheet(u'{}'.format(sheet_name))
        # 创建一个样式对象,初始化样式
        style = xlwt.XFStyle()  
        al = xlwt.Alignment()
        al.horz = HORZ_LEFT
        # al.vert = VERT_CENTER
        style.alignment = al
        for row, row_data in enumerate(data_list):
            for col, cell_data in enumerate(row_data):
                worksheet.write(row, col, cell_data, style)
                worksheet.col(col).width = 256 * 20    # 设置列宽20
        # worksheet.write_merge(0, 0, 0, 3, 'First Merge')  # 合并单元格Merges row 0's columns 0 through 3.
        workbook.save(excel_file)
if __name__ == '__main__':
    obj = WriteExcel()
    obj.write_excel(data_list=[[0-0,0-1,0-2],[1-0,1-1,1-2]], excel_file='./test2.xls')

写入结果截图如下:

django 无法导出Excel文件至前端?

    https://blog.youkuaiyun.com/LeonTom/article/details/102745665

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值