最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用python中的openpyxl操作excel詳解

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

python操作excel方法

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

新版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的模塊都通過(guò)命令 python 模塊名.py install 來(lái)安裝,如果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ù)來(lái)進(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:

通過(guò)名字
    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() #通過(guò)_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)訪問(wèn)多個(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) #顯示有多少?gòu)埍?/h4>
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
通過(guò)列字母獲取多個(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'] = "程序化營(yíng)銷平臺(tái)"
        else:
            ws['A1'] = "程序化營(yíng)銷平臺(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,用來(lái)寫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)文章

  • Python實(shí)現(xiàn)讀取PDF并提取文本和圖片

    Python實(shí)現(xiàn)讀取PDF并提取文本和圖片

    在日常工作和學(xué)習(xí)中,我們經(jīng)常會(huì)遇到需要從 PDF 文件中批量提取文本或圖片的情況。比如,整理一份掃描版合同中的條款,或者收集一份產(chǎn)品手冊(cè)里所有的配圖。 之前處理 PDF 可能會(huì)讓人感到頭疼,但有了合適
    2026-04-04
  • python matplotlib庫(kù)直方圖繪制詳解

    python matplotlib庫(kù)直方圖繪制詳解

    這篇文章主要介紹了python matplotlib庫(kù)直方圖繪制詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python制作詞云的方法

    Python制作詞云的方法

    這篇文章主要為大家詳細(xì)介紹了Python制作詞云的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 基于Python實(shí)現(xiàn)創(chuàng)建、修改或刪除Excel命名區(qū)域

    基于Python實(shí)現(xiàn)創(chuàng)建、修改或刪除Excel命名區(qū)域

    Excel命名區(qū)域是電子表格中一個(gè)重要的功能,它允許用戶為單元格或單元格范圍分配有意義的名稱,本文將詳細(xì)介紹如何使用Free Spire.XLS for Python 進(jìn)行創(chuàng)建,編輯和刪除命名區(qū)域等操作
    2025-10-10
  • Python讀取文件夾下的所有文件實(shí)例代碼

    Python讀取文件夾下的所有文件實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Python讀取文件夾下的所有文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python找出列表中出現(xiàn)次數(shù)最多的元素三種方式

    Python找出列表中出現(xiàn)次數(shù)最多的元素三種方式

    本文通過(guò)三種方式給大家介紹Python找出列表中出現(xiàn)次數(shù)最多的元素,每種方式通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下
    2020-02-02
  • Python提取Word表格數(shù)據(jù)的詳細(xì)教程

    Python提取Word表格數(shù)據(jù)的詳細(xì)教程

    最近由于工作上的需要,需要使用Python完成DOC文檔格式數(shù)據(jù)的讀取和修改工作,所以本篇文章就是記錄使用LibreOffice+python-docx完成doc文檔內(nèi)表格的轉(zhuǎn)換和修改的,需要的朋友可以參考下
    2025-07-07
  • python制作英語(yǔ)翻譯小工具代碼實(shí)例

    python制作英語(yǔ)翻譯小工具代碼實(shí)例

    這篇文章主要介紹了python制作英語(yǔ)翻譯小工具代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python實(shí)現(xiàn)雙向RNN與堆疊的雙向RNN的示例代碼

    Python實(shí)現(xiàn)雙向RNN與堆疊的雙向RNN的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)雙向RNN與堆疊的雙向RNN,文中詳細(xì)講解了雙向RNN與堆疊的雙向RNN的原理及實(shí)現(xiàn),需要的可以參考一下
    2022-07-07
  • Python3中l(wèi)ambda表達(dá)式與函數(shù)式編程講解

    Python3中l(wèi)ambda表達(dá)式與函數(shù)式編程講解

    今天小編就為大家分享一篇關(guān)于Python3中l(wèi)ambda表達(dá)式與函數(shù)式編程講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01

最新評(píng)論

栾川县| 房产| 唐山市| 扶余县| 长汀县| 岑巩县| 育儿| 湾仔区| 交城县| 固镇县| 措美县| 克什克腾旗| 大厂| 兴隆县| 平陆县| 徐州市| 林西县| 太保市| 普安县| 大方县| 彭州市| 合作市| 改则县| 锦屏县| 集安市| 崇礼县| 天全县| 小金县| 长汀县| 皮山县| 乌拉特前旗| 靖江市| 维西| 温泉县| 师宗县| 恩施市| 安图县| 新干县| 顺义区| 竹北市| 西平县|