Pythonのopenpyxlを使用して操作エクセル

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all" #全部行都能输出
import warnings
warnings.filterwarnings('ignore')

エクセルの基本概念

  • ワークブック:Excelスプレッドシートドキュメント、拡張子の.xlsx
  • ワークシート:ワークブックには、最大255枚のワークシートを含めることができます
  • アクティブテーブル:ユーザーが現在表示し、またはExcelのテーブルの前に最後の出口を閉じています
  • コラム:行の先頭からデフォルト:1から始まるデフォルト
  • セル:セルの行の交差グリッド

インストールopenpyxlモジュール

# pip install openpyxl
import openpyxl
pip show openpyxl #查看包的版本

Excel文書を読みます

openpyxlモジュールでExcelドキュメントを開きます。

wb = openpyxl.load_workbook(r"C:\\Users\\Administrator\\example.xlsx") # wb means workbook
type(wb)
import os
os.getcwd() #获取当前工作路径
# os.chdir() #更改当前工作路径

ワークブックからワークシートを取得

wb.get_sheet_names()
sheet3 = wb.get_sheet_by_name('Sheet3') #get sheet by name
type(sheet3) #the type of sheet3 is a worksheet
sheet3.title #view the title of sheet
anotherSheet = wb.get_active_sheet() #get active sheet
anotherSheet.title #活动单元格的title

テーブルからセルを取得

import openpyxl
wb = openpyxl.load_workbook('example.xlsx')
sheet1 = wb.get_sheet_by_name("Sheet1")
sheet1['A1'] # Cell 提取单元格
sheet1['A1'].value #单元格的数据类型和内容
sheet1['A1'].row #单元格所在的行
sheet1['A1'].column #单元格所在的列
sheet1['A1'].coordinate #单元格所在的列
sheet1.cell(row=1,column=2) #提取第1行、第2列的单元格
sheet1.cell(row=1,column=2).value #提取第1行、第2列的单元格的值
for i in range(1,8,2):
    print(i,sheet1.cell(row=i,column=2).value)
import openpyxl
wb = openpyxl.load_workbook(r"C:\\Users\\Administrator\\example.xlsx")
sheet1 = wb.get_sheet_by_name('Sheet1')
sheet1.max_row
sheet1.max_column

文字と数字の列の間の変換

import openpyxl
from openpyxl.utils import get_column_letter,column_index_from_string
get_column_letter(1)
get_column_letter(100)
column_index_from_string('A')
column_index_from_string('AA')

テーブルから行と列を取得します。

import openpyxl
wb = openpyxl.load_workbook(r"C:\\Users\\Administrator\\example.xlsx")
sheet1 = wb.get_sheet_by_name('Sheet1')
tuple(sheet1['A1':'C3']) #每一行单独成tuple的一个元素
list(sheet1['A1':'C3']) #每一行单独成list的一个元素
for rowOfCellObjects in sheet1['A1':'C3']:  #打印区域
    for cellObj in rowOfCellObjects:
        print(cellObj.coordinate,cellObj.value)
    print('---End of Row---')
import openpyxl
wb = openpyxl.load_workbook(r"C:\\Users\\Administrator\\example.xlsx")
sheet1 = wb.get_active_sheet()
for cellObj in list(sheet1.columns)[1]: #打印单列
    print(cellObj.value)

概要

  • インポートモジュールopenpyxl
  • ()関数を呼び出しますopenpyxl.load_workbook
  • メイドWorkbookオブジェクト
  • コールget_active_sheet()またはget_sheet_by_name()メソッドワークブック
  • インデックスまたはワークシートのセル()メソッドは、セル()メソッドベルト行および列パラメータを使用
  • Cellオブジェクトが作られました
  • 細胞読み取るオブジェクト値/行/列/プロパティ座標

プロジェクト:Excelからデータを読み取ります

スプレッドシートのデータを読みます

import openpyxl,pprint
print("Opening workbook ...")
wb = openpyxl.load_workbook(r"C:\\Users\\Administrator\\censuspopdata.xlsx") #Workbook对象
sheet = wb.get_sheet_by_name('Population by Census Tract') #Worksheet对象
countyData = {}
#ToDo: Fill in countyData with each county's population and tracts.
print("Reading row...")

データ構造を充填

for row in range(2,sheet.max_row+1):
    #Each row in the spreadsheet has data for one census tract.
    State = sheet['B'+str(row)].value
    County = sheet['C'+str(row)].value
    Pop = sheet['D'+str(row)].value
    # Make sure the key for this State exists.
    countyData.setdefault(State,{})
    #Make sure the key for this County in this state exists.
    countyData[State].setdefault(County,{'tracts':0,'pop':0})
    
    # Each row represents one census tractso increment by one.
    countyData[State][County]['tracts'] += 1
    #Increase the county pop by the pop in this census tract.
    countyData[State][County]['pop'] += int(Pop)

プログラムの結果はファイルに書き込まれます

# Open a new text file and write the contents of countyData to it.
print("Writing results")
resultFile = open('census2010.py','w')
resultFile.write('allData = '+pprint.pformat(countyData))
resultFile.close()
print("Done")
# 调用已经存储好的census2010.py文件查看结果
import census2010
anchoragePop = census2010.allData['AK']['Anchorage']['pop']
print("The 2010 population of Anchorage was " + str(anchoragePop))

同様の手順アイデア(やや)

Excel文書を書きます

作成し、Excelファイルを保存します

import openpyxl
wb = openpyxl.Workbook() #创建空对象
wb.get_sheet_names() #查看空对象的sheet
sheet = wb.get_active_sheet() #获取当前活动工作表
sheet.title
sheet.title = 'Spam Bacon Eggs Sheet' #修改当前工作表的title
wb.get_sheet_names() #查看已修改的活动工作表title
import openpyxl
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb.get_active_sheet()
sheet.title = 'Spam Spam Spam'
wb.save('example_copy.xlsx') #保存修改工作表名的拷贝

シートの作成と削除

import openpyxl
wb = openpyxl.Workbook()
wb.get_sheet_names()
wb.create_sheet()
wb.get_sheet_names()
wb.create_sheet(index=0,title='First Sheet')
wb.get_sheet_names()
wb.create_sheet(index=2,title = 'Middle Sheet')
wb.get_sheet_names
wb.remove_sheet(wb.get_sheet_by_name('Middle Sheet'))
wb.remove_sheet(wb.get_sheet_by_name('Sheet1'))
wb.get_sheet_names()
['First Sheet', 'Sheet']

セルの値が書かれています

import openpyxl
wb = openpyxl.Workbook()
sheet = wb.get_sheet_by_name('Sheet')
sheet['A1'] = 'Hello World'
sheet['A1'].value

プロジェクト:スプレッドシートを更新

更新された情報とデータ構造を確立します

import openpyxl
wb  = openpyxl.load_workbook('produceSales.xlsx')
sheet = wb.get_sheet_by_name('Sheet')
# the produce types and their updated prices
price_updates = {'Garlic':3.07,'Celery':1.19,'Lemon':1.27}
#ToDo:Loop through the rows and update the prices.

すべての行をチェックし、間違った価格を更新

for rowNum in range(2,sheet.max_row+1): #the first row is heading, skip it
    produceName = sheet.cell(row=rowNum,column=1).value
    if produceName in price_updates:
        sheet.cell(row=rowNum,column=2).value = price_updates[produceName]
wb.save('updatedProduceSales.xlsx')

同様の思考プロセス(省略)

セルのフォントスタイルを設定します。

from openpyxl.styles import Font
wb = openpyxl.Workbook()
sheet = wb.get_sheet_by_name('Sheet')
italic24Font = Font(size = 24, italic = True)
sheet['A1'].font = italic24Font
sheet['A1'] = 'Hello world!'
wb.save('styled.xlsx')

フォントオブジェクト

import openpyxl
from openpyxl.styles import Font
wb = openpyxl.Workbook()
sheet = wb.get_sheet_by_name('Sheet')

fontobj1 = Font(name='Times New Roman',italic=True) #name 字体 size 字号 bold 是否加粗 italic 是否斜体
sheet['A1'].font = fontobj1
sheet['A1'] = 'Bold Times New Roman'

fontobj2 = Font(size=24,italic=True)
sheet['B3'].font = fontobj2
sheet['B3']= '23 pt Italic'

wb.save('styles.xlsx') #默认size 11 name Calibri

公式

import openpyxl
wb = openpyxl.Workbook()
sheet = wb.get_active_sheet()
sheet['A1'] = 200
sheet['A2'] = 300
sheet['A3'] = '=SUM(A1:A2)'
wb.save('writeFormula.xlsx')
import openpyxl
wb = openpyxl.load_workbook('writeFormula.xlsx')
sheet = wb.get_active_sheet()
sheet['A3'].value
import openpyxl
wbDataonly = openpyxl.load_workbook('writeFormula.xlsx',data_only=True)
sheet1 = wbDataonly.get_active_sheet()
sheet1['A3'].value #此处需要手动打开一次.xlsx文件

行と列の調整

行の高さと列の幅調整

import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
sheet['A1'] = 'Tall row'
sheet['B2'] = 'Wide column'
sheet.row_dimensions[1].height = 70
sheet.column_dimensions['B'].width = 20
wb.save('dimensions.xlsx')

セルをマージおよび分割

import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
sheet.merge_cells('A1:D3') #合并单元格
sheet['A1'] = 'Twelve cells merged together'
sheet.merge_cells('C5:D5')
sheet['C5'] = 'Two merged cells.'
wb.save('merged.xlsx')
import openpyxl 
wb = openpyxl.load_workbook('merged.xlsx') #拆分单元格
sheet = wb.active
sheet.unmerge_cells('A1:D3')
sheet.unmerge_cells('C5:D5')
wb.save('merged.xlsx')

ウィンドウ枠の固定

import openpyxl
wb = openpyxl.load_workbook('produceSales.xlsx')
sheet = wb.active
sheet.freeze_panes = 'C2' 
# "A2" means freeze row1 'B1' means freeze columnA 'C2' means freeze row1 and columnA/columnB 'A1' or None means no freezed
wb.save('freezeExample.xlsx')

チャート

import openpyxl 
wb = openpyxl.Workbook()
sheet = wb.active
for i in range(1,11): #create some data in column A
    sheet['A'+str(i)] = i

refObj = openpyxl.chart.Reference(sheet,min_row = 1,min_col = 1,max_row = 10,max_col = 1) #创建数据区域
seriesObj = openpyxl.chart.Series(refObj,title='First series')
chartObj = openpyxl.chart.BarChart()
chartObj.title = 'My chart'
chartObj.append(seriesObj)

sheet.add_chart(chartObj,'C5') #'C5'表示图表开始的位置
wb.save('sampleChart.xlsx')

演習とまとめ

  • openpyxl.load_workbook()関数を返すのですか?
    • Workbookオブジェクトを返します。
  • 何get_sheet_names()ワークブックを返しますか?
    • からなるすべてのシート名のリストを返します。
  • 名前の「シート1」のワークシートワークシートオブジェクトを取得する方法
    • openpyxl.get_sheet_by_name( "シート1")
  • ワークシートオブジェクトを取得する方法アクティブワークシートの作業ではありません
    • wb.get_active_sheet()/ wb.active
  • に「C5」のセルの値を取得する方法
    • シート[ 'C5']値/ sheet.cell(行= 5、列= 3).VALUE
  • セルC5の値が「こんにちは」に配置されている方法
    • シート[ 'C5'] = 'こんにちは'
  • どのように私は、セルの行と列の整数を得るのですか?
    • get_column_letter(int型)int型 - > CHAR
    • column_index_from_stringのchar - > int型
  • max_row /何max_columnリターン、戻り値はどのタイプですか?
    • 細胞の整数範囲として行番号を返すsheet1.max_row
    • 細胞の整数範囲として列番号を返すsheet1.max_column
  • あなたが列「M」添字を取得したい場合は、関数を呼び出すために必要なもの
    • column_index_from_string( 'M')
  • あなたは、カラム14の文字列名を取得したい場合は、関数を呼び出すために必要なもの
    • get_column_letter(14)
  • タプルのF1にA1からすべてのCellオブジェクトを取得する方法
    • タプル(シート[ 'A1': 'F1])
  • 名前example.xlsxをファイルにブックを保存するには?
    • wb.save( 'example.xlsx')
  • セルに数式を設定する方法?
    • シート[ 'B1'] = '== SUM(A1:B15)'
  • あなたではなく式そのものよりも、セルの数式で結果を取得する必要がある場合は、最初に何をすべきかでなければなりませんか?
    • 読み取り時に真= DATA_ONLY使用します
    • ワークブックを開いたり保存mannual
  • 100の第5行の高さを設定する方法
    • sheet.row_dimensions [5] = 100
  • 列Cの幅は70に設定されている方法
    • sheet.column_dimensions [ 'C'] = 70
  • いくつかのopenpyxl2.1.4はXLSXから機能をロードされていません
    • チャート#のバージョンが不明な新しいバージョンに更新されました
  • ウィンドウ枠の固定とは何ですか?
    • sheet.freeze_panes =「C2」と最初の行A凍結、B列
  • 手順や方法の棒グラフを作成します。
    • ロードデータopenpyxl.load_workbook()
    • チャートオブジェクト#1のデータソース参照領域を作成
    • シリーズオブジェクトを作成し、参照オブジェクトは、一連のシーケンスデータオブジェクト#に追加されます
    • グラフオブジェクトを作成し、オブジェクトが(メソッドを追加)シリーズチャートオブジェクトに追加されます
    • グラフオブジェクトがシートに追加される(add_chart方法)

仕上げ本論文では、「Pythonプログラミングのクイックスタートは、退屈な作業の自動化を可能にします。」

データダウンロード:http://nostarch.com/automatestuff/

おすすめ

転載: www.cnblogs.com/evian-jeff/p/11401207.html