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/