[Python] openpyxl读存大数据 Exception: String longer than 32767 characters

来源:互联网 发布:买了域名怎么卖 编辑:程序博客网 时间:2024/06/05 21:07

xlwt缺点:

  1. 版本
    只能处理Excel97-2003或Excel 97之前版本的xls格式
  2. 存储数据过大
    存储数据过大时,会报错Exception: String longer than 32767 characters

OpenPyXL可以解决以上情况,OpenPyXL缺点:

  1. 读取xls格式时load_workbook函数utf-8报错

下载:链接http://pan.baidu.com/s/1dFF8jVN 密码qkpp
安装:命令行进入setup.py目录下,运行以下命令python setup.py install

  • 操作文件与表
  • 操作数据
  • 保存
  • 异常错误
  • 常用方法

操作文件与表

import openpyxl# 操作excelwb = openpyxl.Workbook() #创建excelwb2 = openpyxl.load_workbook(path) #打开现有的excel# 创建表ws = wb.active #正在运行的工作表ws1 = wb.create_sheet() #末尾插入表ws2 = wb.create_sheet(0) #插在第一个位置ws3 = wb["New Title"] #根据名称获得表ws4 = wb.get_sheet_by_name("New Title") #根据名称获取表print wb.get_sheet_names() #得到所有工作表# 为表命名ws.title = "New Title" #创建时系统自定命名#循坏所有的工作表for sheet in wb:    print sheet.title

操作数据

一个工作表被创建时,其中不包含单元格,只有当单元格被获取时才被创建
openpyxl里第一行第一列索引为1,1(即从1开始,不是从0开始)

                # 行列数len(ws.rows) #行数len(ws.columns) #列数                # 读c = ws['A4']c = ws.cell('A4')c = ws.cell(row = 4, column = 2)cell_range = ws['A1':'C2'] #使用切片获取多个单元格#获取多个单元格并遍历for row in ws.iter_rows('A1:C2'):    for cell in row:        print cell#迭代文件中所有的行for row in ws.rows: #取一行    for cell in row: #一行中一个一个取        print cell#得带文件中所有的列ws.colums                # 写ws['A4'] = 4# 有openpyxl.cell.Cell,可以直接为该单元赋值c.value = 'Hello,world'c.value = '15%' #其他类型c.value = datetime.datetime.now()

保存

# 覆盖掉原文件wb.save(path) # True时文件保存为模板wb = load_workbook('doc.xlsx')wb.save('doc_template.xltx',as_template=True)# False时文件或模板保存为文件wb = load_workbook('doc.xltx')wb = load_workbook('doc_template.xltx') #或者wb.save('doc.xlsx',as_template.False)

异常错误

以上是网上用法集合,以下是博主遇到的一些问题,及解决方法

  1. 获取行数len(sheet1.rows),报错TypeError: object of type 'generator' has no len()

    #获取行数rows = tuple(sheet1.rows)len(rows)
  2. 文件路径有中文,报错IOError: [Errno 2] No such file or directory: '\xe9\x81\x93\xe8\xb7\xaf_POI.xlsx',读取错误

    #解决方案,中文部分在外面用u编码,使用%s传进路径,成功TYPE = u'道路' #中文部分使用u编码EXCEL_PATH = r'G:\workspace\python\arcpy\citywalker\%s_POI.xlsx'% TYPE #使用%s代替中文形成路径

常用方法

以下是博主用到的方法:

  1. 获取第一个sheet

    excel = openpyxl.load_workbook(path)sheetnames = excel.get_sheet_names()name = sheetnames[0]sheet1 = excel[name]
  2. 获得行数

    rows = tuple(sheet1.rows)len(rows)
  3. 获取第一列或列

    # 获取第一列for row in sheet1.rows:    print row[0].value# 获取第一行for col in sheet1.columns:    print col[0].value# 获取第一行,法二ncols = len( tuple(table.columns) )for i in range(0, ncols):   print table.cell(row = 1,column = i+1).value
原创粉丝点击