1. 程式人生 > >python用openpyxl操作excel

python用openpyxl操作excel

python操作excel方法

1)自身有Win32 COM操作office但講不清楚,可能不支援誇平臺,linux是否能用不清楚,其他有專業處理模組,如下

2)xlrd:(讀excel)表,xlrd讀大表效率高於openpyxl
3)xlwt:(寫excel)表, 
xlrd和xlwt對版本上相容不太好,很多新版excel有問題。

新版excel處理:

openpyxl(可讀寫excel表)專門處理Excel2007及以上版本產生的xlsx檔案,xls和xlsx之間轉換容易
注意:如果文字編碼是“gb2312” 讀取後就會顯示亂碼,請先轉成Unicode

安裝openpyxl

1)下載openpyxl模組:https://pypi.python.org/pypi/openpyxl
2)解壓到指定檔案目錄:tar -xzvf openpyxl.tar.gz
3)進入目錄,找到setup.py檔案,執行命令:python setup.py install
    如果報錯No module named setuptools 就使用命令“easy_install openpyxl”,easy_install for win32,會自動安裝setuptools。
   這裡注意,如果不能自動安裝,基本上python的模組都通過命令 python 模組名.py install 來安裝,如果setuptools模組沒有,直接去官網下載,然後前面命令安裝就可以了

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

pthon學習資料

python 學習小組http://www.thinksaas.cn/group/show/368/page/4

官網:
    https://pypi.python.org/pypi/openpyxl
    http://openpyxl.readthedocs.io/en/default/
good:
    http://blog.csdn.net/suofiya2008/article/details/6284208
    http://blog.csdn.net/zzukun/article/details/49946147
    http://www.thinksaas.cn/topics/0/501/501962.html

openpyxl的使用

openpyxl定義多種資料格式

最重要的三種:
NULL空值:對應於python中的None,表示這個cell裡面沒有資料。
numberic: 數字型,統一按照浮點數來進行處理。對應於python中的float。
string: 字串型,對應於python中的unicode。

Excel檔案三個物件

workbook: 工作簿,一個excel檔案包含多個sheet。
sheet:工作表,一個workbook有多個,表名識別,如“sheet1”,“sheet2”等。
cell: 單元格,儲存資料物件
1)匯入
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')
    驗證命令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設定讀取的表,預設0讀第一個表
    活動表表名wb.get_active_sheet().title
4)建新表
ws1 = wb.create_sheet() #預設插在最後
ws2 = wb.create_sheet(0) #插在開頭
   建表後預設名按順序,如sheet1,sheet2...
    ws.title = "New Title" #修改表名稱

   簡化 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有兩種方式,行號列號從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)訪問多個單元格
cell_range = ws['A1':'C2']
讀所有單元格資料
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-新增列 
    返回一個生成器, 注意取值時要用value,例如:
    for row in ws.iter_rows('A1:C2'):
        for cell in row:
            print cell
   讀指定行、指定列:
    rows=ws.rows#row是可迭代的 
    columns=ws.columns#column是可迭代的
    列印第n行資料 
    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)
    新增一行到當前sheet的最底部 iterable必須是list,tuple,dict,range,generator型別的。 1,如果是list,將list從頭到尾順序新增。 2,如果是dict,按照相應的鍵新增相應的鍵值。
 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()  
#顯示錶名,錶行數,表列數   
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) 獲得列號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

通過列字母獲取多個excel資料塊
cell_range = "E3:{0}28".format(get_column_letter(bc_col))
ws["A1"] = "=SUM(%s)"%cell_range
10)excel檔案是gbk編碼,讀入時需要先encode為gbk,再decode為unicode,再encode為utf8
cell_value.encode('gbk').decode('gbk').encode('utf8')  
11) 公式計算formulae
ws["A1"] = "=SUM(1, 1)"
ws["A1"] = "=SUM(B1:C1)"

程式碼例項例項(直接修改使用)

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'] = "程式化營銷平臺"
        else:
            ws['A1'] = "程式化營銷平臺"

        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)#新建一個ExcelWriter,用來寫wb1  
    ws1=wb1.worksheets[0]#取得wb1的第一個工作表ws1 
    one_cell = ws1.cell(row = row, column = col).value
    ws1.cell(row = row, column = col).value = one_cell
    ewb1.save(filename=dest_filename)#儲存一定要有,否則不會有結果  

相關推薦

pythonopenpyxl操作excel

python操作excel方法 1)自身有Win32 COM操作office但講不清楚,可能不支援誇平臺,linux是否能用不清楚,其他有專業處理模組,如下 2)xlrd:(讀excel)表,xlrd讀大表效率高於openpyxl 3)xlwt:(寫exce

windows下pythonopenpyxl 操作 excel檔案 xlsx

今天想操作一下xlsx 檔案 存一些資料,在網上搗鼓了好久終於,功夫不負有心人終於讓我給找到了 安裝的方法很簡單 首先要下載兩個東西  http://pan.baidu.com/s/1qWNpnqO

python+xlrd+xlwt操作excel

xca 軟件下載 int() 獲取 shee def try 品牌 workbook 百度搜索:小強測試品牌 QQ群:522720170 介紹 xlrd(讀操作),xlwt(寫操作) 上述軟件下載後,分別解壓,之後在cmd命令下分別進入對應的目錄中運行 python se

Python 讀寫操作Excel —— 安裝第三方庫(xlrd、xlwt、xlutils)

保存數據 下載 實用 第三方 直接 install pytho 方法 xls 數據處理是 Python 的一大應用場景,而 Excel 則是最流行的數據處理軟件。因此用 Python 進行數據相關的工作時,難免要和 Excel 打交道。 如果僅僅是要以表單形式保存數據,可

Python學習筆記-操作excel

clas import 添加 後綴 宋體 div python print mil python操作excel:使用pip安裝即可 一、xlwt:寫excel import xlwt book = xlwt.Workbook() #新建一個exc

windows 平臺下 xlnt 結合visual studio 2017 c++操作excel

安裝cmake Windows下載安裝xlnt git clone https://github.com/tfussell/xlnt.git cd xlnt mkdir build # git clone剛才下載的xlnt原始碼位置 F:\CODE\CPPC

Python win32讀取excel檔案的奇葩報錯

from datetime import datetime import urllib import win32com.client as win32 import sys import codecs

如何用openpyxl操作excel文件

#coding:utf-8 import sys from openpyxl import load_workbook from openpyxl import Workbook #發貨數量 needNum = 200 #sku號 skuStr = 'sku0001' #p

Python win32寫excel檔案的奇葩報錯

這是本人用Python寫多個excel檔案: 這是寫的過程所報的錯誤: 從上圖錯誤結果可以看到,寫了三個sheet之後就報錯了,而從上附圖中你應該知道我要寫十幾個sheet。問題在這裡了,因為每次新建一個sheet檔案,它一般會預設為你新建三個sheet頁面。而程式寫完

jruby操作excel

一、下載jruby二進位制安裝包,解壓到相應的目錄下,並將其bin目錄新增到系統 的PATH變數中,則完成了安裝; 二、安裝java,完成安裝後建立系統變數JAVA_HOME,把java的安裝目錄設為其值; 三、在dos視窗中執行jirb_swing,出現相應的介面,那麼你的

關於openpyxl處理excel,讀和寫的問題

首先我感覺openpyxl是不可以修改已經存在資料的Excel檔案的。我是一個新手,所以如果寫的不對,還請指出來。這個以後我也會慢慢修改裡面的東西,主要是給自己當做筆記使用的。這是我之前幫別人處理Excel表格寫的程式。import openpyxl import math

Python筆記(十四):操作excel openpyxl模塊

align pre 一行 color value colspan xls str 工作 (一) 常遇到的情況 就我自己來說,常遇到的情況可能就下面幾種: 讀取excel整個sheet頁的數據。 讀取指定行、列的數據 往一個空白的excel文檔寫數據 往一

Python openpyxl、pandas操作Excel方法簡介與具體實例

val 讀取 方法 條件 程序 消息提醒 one eat font   本篇重點講解windows系統下 Python3.5中第三方excel操作庫-openpyxl; 其實Python第三方庫有很多可以操作Excel,如:xlrd,xlwt,xlwings甚至註明的數據分

openpyxl python 操作Excel表格

from openpyxl import Workbook # 例項一個Workbook wb = Workbook() # 啟用工作表 ws = wb.active # 資料可以直接賦值給單元格 ws['A1'] = 42 # 在下一行追加一行1,2,3 ws.append([1, 2, 3]) #

Python操作Excel,實現班級成績的統計

本次是在原來有一定格式的Excel文件中補充成績。 安裝的模組:xlwt 、 xlrd 、xlutils xlrd的模組是隻用讀取xls檔案,不能寫檔案,同理xlwt,只(新建寫)不讀已有的xls, xlrd的用法: 開啟檔案: data =xlrd.open_workbook(fime_path+'0

python操作Excel檔案之openpyxl

安裝和配置 安裝openpyxl模組: pip install openpyxl 若想使用插入圖片的功能: pip install pillow 知識點講解 workbook 工作薄:一個Excel 檔案是一個工作薄 worksheet 工作表:一個工作薄

Python利用openpyxl操作Excel(一)

最近一直在做專案裡的自動化的工作,為了是從繁瑣重複的勞動中掙脫出來,把精力用在資料分析上。自動化方面python是在好不過了,不過既然要提交報表, 就不免要美觀什麼的。pandas雖然很強大,但是無法對Excel完全操作,現學vba有點來不及。於是就找到這個openpyxl包,用python

Python這樣操作Excel?值得一學,總有一天得上

  最近一直在做專案裡的自動化的工作,為了是從繁瑣重複的勞動中掙脫出來,把精力用在資料分析上。自動化方面python是在好不過了,不過既然要提交報表,就不免要美觀什麼的。pandas雖然很強大,但是無法對Excel完全操作,現學vba有點來不及。  

Python利用openpyxl操作Excel(一)

最近一直在做專案裡的自動化的工作,為了是從繁瑣重複的勞動中掙脫出來,把精力用在資料分析上。自動化方面python是在好不過了,不過既然要提交報表,就不免要美觀什麼的。pandas雖然很強大,但是無法對Excel完全操作,現學vba有點來不及。於是就找到這個openpyxl包,用python來修改Excel,礙

Python這樣操作Excel?值得一學,總有一天得上!

    在這裡寫下這兩天的筆記和踩得坑,方面新手躲坑,也供自己日後查閱。如有問題,還請見諒並指出,多謝。 進群:960410445  即可獲取數十套PDF! 1from openpyxl import load_workbook