主頁(yè) > 知識(shí)庫(kù) > 解決使用openpyxl時(shí)遇到的坑

解決使用openpyxl時(shí)遇到的坑

熱門標(biāo)簽:電銷機(jī)器人 金倫通信 北京外呼電銷機(jī)器人招商 鄭州智能外呼系統(tǒng)中心 賓館能在百度地圖標(biāo)注嗎 云南地圖標(biāo)注 南京crm外呼系統(tǒng)排名 汕頭電商外呼系統(tǒng)供應(yīng)商 400電話 申請(qǐng) 條件 crm電銷機(jī)器人

最近在用python處理Excel表格是遇到了一些問(wèn)題

1, xlwt最多只能寫(xiě)入65536行數(shù)據(jù), 所以在處理大批量數(shù)據(jù)的時(shí)候沒(méi)法使用

2, openpyxl 這個(gè)庫(kù), 在使用的時(shí)候一直報(bào)錯(cuò), 看下面代碼

from openpyxl import Workbook
import datetime

wb = Workbook()
ws = wb.active 
ws['A1'] = 42 
ws.append([1,2,3]) 
ws['A2'] = datetime.datetime.now()
wb.save('test.xlsx')

報(bào)錯(cuò)信息如下

File "src\lxml\serializer.pxi", line 1652, in lxml.etree._IncrementalFileWriter.write TypeError: got invalid input value of type class 'xml.etree.ElementTree.Element'>, expected string or Element

有沒(méi)有人知道是什么原因呀? 惆悵!!!

got invalid input value of type class ‘xml.etree.ElementTree.Element'>, expected string or Element

填坑:

出現(xiàn)這個(gè)問(wèn)題好久了, 不知道怎么解決, 也去google 和baidu搜索, 一篇文章提到了可能是包沖突的問(wèn)題, 抱著試一試的心態(tài), 沒(méi)想到解決了

lxml 這個(gè)包和openpyxl 起沖突, 解決辦法, 先卸掉lxml

pip uninstall lxml

最后運(yùn)行上面處理excel的代碼, 運(yùn)行成功, 無(wú)錯(cuò)誤!!! 困擾了我很長(zhǎng)時(shí)間的問(wèn)題得以解決!!!

還有另一種方法:

由于lxml 包經(jīng)常要用到, 所以每次卸載掉再安裝實(shí)在是麻煩, 所以我有下面的想法

例如下面的代碼, 從數(shù)據(jù)庫(kù)中取數(shù)據(jù)存入表格

import pymysql
import pandas as pd
from sqlalchemy import create_engine

engine = create_engine("mysql+pymysql://user:password@ip:port/database",encoding='utf-8')

sql = """SELECT catalog_1 as '目錄一',catalog_2 as '目錄二',catagory as '目錄三',
    region as '區(qū)域',year as '年份',data as '數(shù)據(jù)',unit as '單位' from table
    where catalog_1 = "農(nóng)業(yè)" limit 100
"""
df = pd.read_sql_query(sql, con=engine)


# writer = pd.ExcelWriter(r'C:\Users\Administrator\Desktop\test.xlsx')
# df.to_excel(writer)
# writer.save()

這時(shí)候, 我們不選擇to_excel() 這個(gè)函數(shù), 而是選擇使用to_csv() ; 即可避免openpyxl 和lxml 的沖突

df.to_csv(r'C:\Users\Administrator\Desktop\test.csv',index=False)
# 經(jīng)過(guò)驗(yàn)證, 此種方法是行得通的

最后得到的csv 文件用Excel 可以直接打開(kāi), 也可以另存為*.xlsx文件

最終解決辦法

今天發(fā)現(xiàn)我使用的openpyxl版本是3.0.2, 卸載此版本, 安裝3.0.0版本

最新更新于2020-3-16, 經(jīng)過(guò)測(cè)試, 此報(bào)錯(cuò)解除!

補(bǔ)充:Python—使用Openpyxl的dataframe_to_rows的一個(gè)小坑

這個(gè)坑說(shuō)大不大,說(shuō)小遇到了也頭疼。

一般我們把dataframe直接寫(xiě)到Excel文件,直接 df.to_excel即可。不過(guò)如果想把多個(gè)表格寫(xiě)入同一個(gè)工作表呢,那就需要用openpyxl的dataframe_to_rows功能。

看下面一段代碼。

import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
df1=pd.DataFrame([[1,4],[2,5],[3,6]] ,index=['a','b','c'],columns=['a','b'])
df2=pd.DataFrame([[1,4],[2,5],[3,6],[7,8]] ,index=['d','e','f','g'],columns=['a','b'])
wb=Workbook()
ws=wb.active #打開(kāi)工作表
#把df1寫(xiě)入工作表
for row in dataframe_to_rows(df1):
 ws.append(row)
#換行
ws.append([])
#把df2寫(xiě)入工作表
for row in dataframe_to_rows(df2):
 ws.append(row)
wb.save('text.xlsx')

這段代碼就是把df1,df2都寫(xiě)入到一個(gè)工作表,但一看結(jié)果,傻了,怎么標(biāo)題行和內(nèi)容之間多了空行啊

看看空行是如何產(chǎn)生的呢

原來(lái)多了一個(gè)None啊,難怪是空行,目測(cè)None是index帶來(lái)的,那就把index去掉唄

這回None是沒(méi)有了,但是index的內(nèi)容也想要顯示,怎么辦呢,這么辦:

哈哈,這樣就完美了。這里reset_index的意思就是把index列,變成普通列,比如:

如上圖,如果直接reset_index,index列變成普通列,但是列頭自動(dòng)變成了index,這可不好,所以先給index列賦值,也就是df1.index.name=‘code'

最后代碼如下

import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
df1=pd.DataFrame([[1,4],[2,5],[3,6]] ,index=['a','b','c'],columns=['a','b'])
df2=pd.DataFrame([[1,4],[2,5],[3,6],[7,8]] ,index=['d','e','f','g'],columns=['a','b'])
wb=Workbook()
ws=wb.active #打開(kāi)工作表
df1.index.name='code1'
df2.index.name='code2'
#把df1寫(xiě)入工作表
for row in dataframe_to_rows(df1.reset_index(),index=False):
 ws.append(row)
#換行
ws.append([])
#把df2寫(xiě)入工作表
for row in dataframe_to_rows(df2.reset_index(),index=False):
 ws.append(row)
wb.save('text.xlsx')

結(jié)果,哈哈,完美

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • 淺談openpyxl庫(kù),遇到批量合并單元格的問(wèn)題
  • python openpyxl 帶格式復(fù)制表格的實(shí)現(xiàn)
  • python openpyxl篩選某些列的操作
  • python中openpyxl和xlsxwriter對(duì)Excel的操作方法
  • 詳解Python openpyxl庫(kù)的基本應(yīng)用
  • python openpyxl模塊的使用詳解
  • Python openpyxl 無(wú)法保存文件的解決方案

標(biāo)簽:西寧 梅州 錫林郭勒盟 石家莊 文山 昆明 懷化 浙江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《解決使用openpyxl時(shí)遇到的坑》,本文關(guān)鍵詞  解決,使用,openpyxl,時(shí),遇到,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《解決使用openpyxl時(shí)遇到的坑》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于解決使用openpyxl時(shí)遇到的坑的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章