欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用python中的openpyxl操作excel詳解

 更新時(shí)間:2023年07月04日 11:26:13   作者:longshenlmj  
這篇文章主要介紹了使用python中的openpyxl操作excel詳解,openpyxl 模塊是一個(gè)讀寫Excel文檔的Python庫,本文就來講解如何使用openpyxl操作excel,需要的朋友可以參考下

python操作excel方法

1)自身有Win32 COM操作office但講不清楚,可能不支持夸平臺(tái),linux是否能用不清楚,其他有專業(yè)處理模塊,如下
2)xlrd:(讀excel)表,xlrd讀大表效率高于openpyxl
3)xlwt:(寫excel)表, 
xlrd和xlwt對(duì)版本上兼容不太好,很多新版excel有問題。

新版excel處理:

openpyxl(可讀寫excel表)專門處理Excel2007及以上版本產(chǎn)生的xlsx文件,xls和xlsx之間轉(zhuǎn)換容易
注意:如果文字編碼是“gb2312” 讀取后就會(huì)顯示亂碼,請(qǐng)先轉(zhuǎn)成Unicode

安裝openpyxl

1)下載openpyxl模塊:https://pypi.python.org/pypi/openpyxl
2)解壓到指定文件目錄:tar -xzvf openpyxl.tar.gz
3)進(jìn)入目錄,找到setup.py文件,執(zhí)行命令:python setup.py install
    如果報(bào)錯(cuò)No module named setuptools 就使用命令“easy_install openpyxl”,easy_install for win32,會(huì)自動(dòng)安裝setuptools。
   這里注意,如果不能自動(dòng)安裝,基本上python的模塊都通過命令 python 模塊名.py install 來安裝,如果setuptools模塊沒有,直接去官網(wǎng)下載,然后前面命令安裝就可以了
4)處理圖片還需要安裝pillow(PIL)
    To be able to include images (jpeg, png, bmp,...) into an openpyxl file, you will also need the “pillow” library that can be installed with:
    pip install pillow

openpyxl的使用

openpyxl定義多種數(shù)據(jù)格式

最重要的三種:
NULL空值:對(duì)應(yīng)于python中的None,表示這個(gè)cell里面沒有數(shù)據(jù)。
numberic: 數(shù)字型,統(tǒng)一按照浮點(diǎn)數(shù)來進(jìn)行處理。對(duì)應(yīng)于python中的float。
string: 字符串型,對(duì)應(yīng)于python中的unicode。

Excel文件三個(gè)對(duì)象

workbook: 工作簿,一個(gè)excel文件包含多個(gè)sheet。
sheet:工作表,一個(gè)workbook有多個(gè),表名識(shí)別,如“sheet1”,“sheet2”等。
cell: 單元格,存儲(chǔ)數(shù)據(jù)對(duì)象

1)導(dǎo)入

from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font, Color, Fill
from openpyxl.styles import colors
from openpyxl.styles import Fill,fills
from openpyxl.formatting.rule import ColorScaleRule

2)打開workbook:

    wb = load_workbook('file_name.xlsx')

3)open sheet:

通過名字
    ws = wb["frequency"] 
    等同于 ws2 = wb.get_sheet_by_name('frequency')
    驗(yàn)證命令ws is ws2 is ws3 輸出True
不知道名字用index
    sheet_names = wb.get_sheet_names()
    ws = wb.get_sheet_by_name(sheet_names[index])# index為0為第一張表 
或者
    ws =wb.active
    等同于  ws = wb.get_active_sheet() #通過_active_sheet_index設(shè)定讀取的表,默認(rèn)0讀第一個(gè)表
    活動(dòng)表表名wb.get_active_sheet().title

4)建新表

ws1 = wb.create_sheet() #默認(rèn)插在最后
ws2 = wb.create_sheet(0) #插在開頭
   建表后默認(rèn)名按順序,如sheet1,sheet2...
    ws.title = "New Title" #修改表名稱
   簡(jiǎn)化 ws2 = wb.create_sheet(title="Pi")

5)backgroud color of tab( be white by default)

ws.sheet_properties.tabColor = "1072BA" # set with RRGGBB color code

6)單元格使用

c = ws['A4'] #read 等同于 c = ws.cell('A4') 
ws['A4'] = 4 #write 
#ws.cell有兩種方式,行號(hào)列號(hào)從1開始
d = ws.cell(row = 4, column = 2) #行列讀寫
d = ws.cell('A4') 
寫入cell值
    ws.cell(row = 4, column = 2).value = 'test'
    ws.cell(row = 4, column = 2, value = 'test')

7)訪問多個(gè)單元格

cell_range = ws['A1':'C2']
讀所有單元格數(shù)據(jù)
get_cell_collection()

8) 按行操作,按列操作

   a)逐行讀
        ws.iter_rows(range_string=None, row_offset=0, column_offset=0): range-string(string)-單元格的范圍:例如('A1:C4') row_offset-添加行 column_offset-添加列 
    返回一個(gè)生成器, 注意取值時(shí)要用value,例如:
    for row in ws.iter_rows('A1:C2'):
        for cell in row:
            print cell
   讀指定行、指定列:
    rows=ws.rows#row是可迭代的 
    columns=ws.columns#column是可迭代的
    打印第n行數(shù)據(jù) 
    print rows[n]#不需要用.value 
    print columns[n]#不需要用.value
b)逐行寫
 (http://openpyxl.readthedocs.io/en/default/_modules/openpyxl/worksheet/worksheet.html#Worksheet.append)
 ws.append(iterable)
    添加一行到當(dāng)前sheet的最底部 iterable必須是list,tuple,dict,range,generator類型的。 1,如果是list,將list從頭到尾順序添加。 2,如果是dict,按照相應(yīng)的鍵添加相應(yīng)的鍵值。
 append([‘This is A1', ‘This is B1', ‘This is C1'])
 append({‘A' : ‘This is A1', ‘C' : ‘This is C1'})
 append({1 : ‘This is A1', 3 : ‘This is C1'})

8) #顯示有多少張表

wb.get_sheet_names()  
#顯示表名,表行數(shù),表列數(shù)   
print ws.title  
print ws.max_row
print ws.max_column
ws.get_highest_row() #UserWarning: Call to deprecated function
ws.get_highest_column()# UserWarning: Call to deprecated function

9) 獲得列號(hào)x的字母 col = get_column_letter(x), x從1開始

from openpyxl.utils import get_column_letter
for  x  in  range( 1, len(record)+ 1 ):  
    col = get_column_letter(x)  
    ws.cell( '%s%s' %(col, i)).value = x
通過列字母獲取多個(gè)excel數(shù)據(jù)塊
cell_range = "E3:{0}28".format(get_column_letter(bc_col))
ws["A1"] = "=SUM(%s)"%cell_range

10)excel文件是gbk編碼,讀入時(shí)需要先encode為gbk,再decode為unicode,再encode為utf8

cell_value.encode('gbk').decode('gbk').encode('utf8')  

11) 公式計(jì)算formulae

ws["A1"] = "=SUM(1, 1)"
ws["A1"] = "=SUM(B1:C1)"

代碼實(shí)例實(shí)例(直接修改使用)

from openpyxl import Workbook
from openpyxl.compat import range
from openpyxl.cell import get_column_letter
dest_filename = 'empty_book.xlsx'
wb = Workbook()
ws1 = wb.active
ws1.title = "range names"
for row in range(1, 40):
   ws1.append(range(600))
ws3 = wb.create_sheet(title="Data")
for row in range(10, 20):
   for col in range(27, 54):
       _ = ws3.cell(column=col, row=row, value="%s" % get_column_letter(col))
print(ws3['AA10'].value)
wb.save(filename = dest_filename)
sheet_ranges = wb['range names']
print(sheet_ranges['D18'].value)
ws['A1'] = datetime.datetime(2010, 7, 21)
ws['A1'].number_format #輸出'yyyy-mm-dd h:mm:ss'
rows = [
    ['Number', 'Batch 1', 'Batch 2'],
    [2, 40, 30],
    [3, 40, 25],
    [4, 50, 30],
    [5, 30, 10],
    [6, 25, 5],
    [7, 50, 10],
]
rows = [
    ['Date', 'Batch 1', 'Batch 2', 'Batch 3'],
    [date(2015,9, 1), 40, 30, 25],
    [date(2015,9, 2), 40, 25, 30],
    [date(2015,9, 3), 50, 30, 45],
    [date(2015,9, 4), 30, 25, 40],
    [date(2015,9, 5), 25, 35, 30],
    [date(2015,9, 6), 20, 40, 35],
]
for row in rows:
    ws.append(row)

excel中圖片的處理,PIL模塊

    try:
        from openpyxl.drawing import image
        import PIL            
    except ImportError, e:
        print "[ERROR]",e
    report_file = self.excel_path + "/frquency_report_%d.xlsx" %id
    shutil.copyfile(configs.PATTEN_FILE, report_file)
    if not os.path.exists(report_file):
       print "generate file failed: ", report_file
       sys.exit(1)
    wb = load_workbook(report_file)
    ws = wb.get_sheet_by_name('frequency')
    img_f = configs.IMAGE_LOGO
    if os.path.exists(img_f):
        try:
            img = image.Image(img_f)
            ws.add_image(img, 'A1')
        except Exception, e:
            print "[ERROR]%s:%s" % (type(e), e)
            ws['A1'] = "程序化營銷平臺(tái)"
        else:
            ws['A1'] = "程序化營銷平臺(tái)"
        font1 = Font(size=22)
        ws['A1'].font = font1
        ws['B4'] = ad_plan #等同ws.cell('B4') = ad_plan
        ws['B5'] = ad_names
        ws['B6'] = str(start_d) + '  to  ' + str(end_d)
        wb.save(report_file)
    try:
        wb = load_workbook(report_file)
        ws = wb.get_sheet_by_name('frequency')            
        row = 9
        for it in query_result:
            one_row = it.split('\t')
            print one_row
            if '10' == one_row[0]:
                one_row[0] = '10+'
            col = 1
            for one_cell in one_row:
                ws.cell(row = row, column = col).value = one_cell
                col = col + 1
            row = row + 1      
    except Thrift.TException, tx:
        print '[ERROR] %s' % (tx.message)
    else:
        wb.save(report_file)
    finally:
        pass

示例:

    from openpyxl.writer.excel import ExcelWriter   
    wb1=Workbook()#新建工作簿
    ewb1=ExcelWriter(workbook=wb1)#新建一個(gè)ExcelWriter,用來寫wb1  
    ws1=wb1.worksheets[0]#取得wb1的第一個(gè)工作表ws1 
    one_cell = ws1.cell(row = row, column = col).value
    ws1.cell(row = row, column = col).value = one_cell
    ewb1.save(filename=dest_filename)#保存一定要有,否則不會(huì)有結(jié)果  

到此這篇關(guān)于使用python中的openpyxl操作excel詳解的文章就介紹到這了,更多相關(guān)python的openpyxl操作excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Pytorch SSD模型分析

    基于Pytorch SSD模型分析

    今天小編就為大家分享一篇基于Pytorch SSD模型分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python 編碼規(guī)范(Google Python Style Guide)

    Python 編碼規(guī)范(Google Python Style Guide)

    本項(xiàng)目并非 Google 官方項(xiàng)目, 而是由國內(nèi)程序員憑熱情創(chuàng)建和維護(hù),對(duì)于想學(xué)習(xí)python的朋友可以參考一下
    2018-05-05
  • 精選39道Python數(shù)據(jù)分析面試題提早備戰(zhàn)金三銀四

    精選39道Python數(shù)據(jù)分析面試題提早備戰(zhàn)金三銀四

    這篇文章主要為大家介紹了39道Python數(shù)據(jù)分析的面試題問答攻略幫助大家提早備戰(zhàn)金三銀四,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多精進(jìn),早日度過寒冬
    2023-12-12
  • 一文帶你搞懂Python中的文件操作

    一文帶你搞懂Python中的文件操作

    這篇文章主要為大家詳細(xì)介紹了Python中常見的文件操作的相關(guān)資料,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的可以了解一下
    2022-11-11
  • mac安裝scrapy并創(chuàng)建項(xiàng)目的實(shí)例講解

    mac安裝scrapy并創(chuàng)建項(xiàng)目的實(shí)例講解

    今天小編就為大家分享一篇mac安裝scrapy并創(chuàng)建項(xiàng)目的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python中httpx庫的詳細(xì)使用方法及案例詳解

    python中httpx庫的詳細(xì)使用方法及案例詳解

    httpx 是一個(gè)現(xiàn)代化的 Python HTTP 客戶端庫,支持同步和異步請(qǐng)求,功能強(qiáng)大且易于使用,它比 requests 更高效,支持 HTTP/2 和異步操作,以下是 httpx 的詳細(xì)使用方法,感興趣的小伙伴跟著小編一起來看看吧
    2025-02-02
  • python如何在文件中部插入信息

    python如何在文件中部插入信息

    這篇文章主要介紹了python如何在文件中部插入信息問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python的加密模塊之hashlib 與 base64詳解及常用加密方法

    Python的加密模塊之hashlib 與 base64詳解及常用加密方法

    我們來學(xué)習(xí)一下 Python 中的加密模塊,加密模塊在工作中被廣泛應(yīng)用,比如數(shù)據(jù)的傳入 不希望被捕獲,通過把數(shù)據(jù)加密。這樣即使被捕獲也無法獲取到數(shù)據(jù)的真實(shí)信息,今天我們就來學(xué)習(xí)一下關(guān)于加密的方法,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • Python使用Tkinter庫如何設(shè)置tkinter ttk框架背景顏色

    Python使用Tkinter庫如何設(shè)置tkinter ttk框架背景顏色

    本文介紹了在Python的Tkinter庫中,如何使用style.configure方法為ttk框架設(shè)置背景顏色及其他樣式屬性,以定制美觀的GUI界面
    2024-09-09
  • Pytorch中view函數(shù)實(shí)例講解

    Pytorch中view函數(shù)實(shí)例講解

    這篇文章主要給大家介紹了關(guān)于Pytorch中view函數(shù)的相關(guān)資料,PyTorch中的.view()函數(shù)是一個(gè)用于改變張量形狀的方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09

最新評(píng)論