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

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
# 操作excel
wb = openpyxl.Workbook() #创建excel
wb2 = 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.get_sheet_by_name(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
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

geodoer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值