Where is my Jupyter notebook folder? Use 'os.getcwd()' to check!

import openpyxl
wb = openpyxl.load_workbook('D1_01.xlsx')
wb
<openpyxl.workbook.workbook.Workbook at 0x16b42a74550>
wb.get_sheet_names()
['Sheet1', 'Sheet2', 'Sheet3']
sh2 = wb.get_sheet_by_name('Sheet2')
sh2
<Worksheet "Sheet2">
sh2.title
'Sheet2'
activeSheet = wb.active
activeSheet
<Worksheet "Sheet1">
sh1 = wb.get_sheet_by_name('Sheet1')
sh1['A1'].value
'DateTime'
sh1.cell(row=2,column=2).value
'Olly'
sh1['A2'].value
# 貼心的 '.value' 把資料型別也讀到了 :D
datetime.datetime(2018, 1, 1, 0, 0)
for i in range(1,5):
print(i, sh1.cell(row=i, column=2).value)
1 Name 2 Olly 3 Ollier 4 Oil
row和column都是用excel的視角看,所以從1開始數,別跟list的index概念搞混了。
sh1.max_row
7
sh1.max_column
4
注意:此方法有可能回傳比實際上多的結果,原因目前尚未研究出。
from openpyxl.utils import get_column_letter,column_index_from_string
get_column_letter(1)
'A'
get_column_letter(27)
'AA'
column_index_from_string('B')
2
column_index_from_string('AB')
28
sh1['A2':'D3']
((<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>, <Cell 'Sheet1'.D2>), (<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>, <Cell 'Sheet1'.D3>))
for row in sh1['A2':'D3']:
print(row)
(<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>, <Cell 'Sheet1'.D2>) (<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>, <Cell 'Sheet1'.D3>)
for row in sh1['A2':'D3']:
for cell in row:
print(cell)
<Cell 'Sheet1'.A2> <Cell 'Sheet1'.B2> <Cell 'Sheet1'.C2> <Cell 'Sheet1'.D2> <Cell 'Sheet1'.A3> <Cell 'Sheet1'.B3> <Cell 'Sheet1'.C3> <Cell 'Sheet1'.D3>
for row in sh1['A2':'D3']:
for cell in row:
print(cell.coordinate, '=', cell.value)
print('★~~~~~~~ End of row ~~~~~~~★')
A2 = 2018-01-01 00:00:00 B2 = Olly C2 = 13.0 D2 = F ★~~~~~~~ End of row ~~~~~~~★ A3 = 2018-01-02 00:00:00 B3 = Ollier C3 = 14.0 D3 = F ★~~~~~~~ End of row ~~~~~~~★
sh1[2] # 數字若是字串格式也可以唷!
(<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>, <Cell 'Sheet1'.D2>)
for cell in sh1[2]:
print(cell.value)
2018-01-01 00:00:00 Olly 13.0 F
sh1['B']
(<Cell 'Sheet1'.B1>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.B5>, <Cell 'Sheet1'.B6>, <Cell 'Sheet1'.B7>)
for cell in sh1['B']:
print(cell.value)
Name Olly Ollier Oil Oba Oma Ohya
sh1.title = 'I am Sheet 1'
sh1.title
'I am Sheet 1'
wb.save('D1_02.xlsx')
import openpyxl
wb = openpyxl.Workbook() # 開一個新的'.xlsx'檔案
wb.get_sheet_names()
['Sheet']
wb.create_sheet()
wb.get_sheet_names()
['Sheet', 'Sheet1']
wb.create_sheet(index=0, title='Fist Sheet')
wb.get_sheet_names()
['Fist Sheet', 'Sheet', 'Sheet1']
wb.create_sheet(index=2, title='Middle Sheet')
wb.get_sheet_names()
['Fist Sheet', 'Sheet', 'Middle Sheet', 'Sheet1']
wb.remove_sheet(wb.get_sheet_by_name('Sheet'))
wb.get_sheet_names()
['Fist Sheet', 'Middle Sheet', 'Sheet1']
wb.save('D1_03.xlsx')
wb = openpyxl.Workbook()
sh = wb.active
sh['A1'] = 'My First Value'
sh['A1'].value
'My First Value'
wb.save('D1_04.xlsx')
from openpyxl.styles import Font
wb = openpyxl.Workbook()
sh = wb.active
FontStyle = Font(name='Calibri', size=50, italic=True, bold=True)
sh['A1'].font = FontStyle
sh['A1'] = 'Hello Font'
wb.save('D1_05.xlsx')
wb = openpyxl.Workbook()
sh = wb.active
sh['A1'] = 10
sh['A2'] = 20
sh['A3'] = 30
sh['A4'] = '=SUM(A1:A3)'
wb.save('D1_06.xlsx')
wb = openpyxl.Workbook()
sh = wb.active
sh['A1'] = 'Tall Row'
sh['B2'] = 'Wide Column'
sh.row_dimensions[1].height = 50
sh.column_dimensions['B'].width = 30
wb.save('D1_07.xlsx')
wb = openpyxl.Workbook()
sh = wb.active
sh.merge_cells('A1:C3')
sh['A1'] = '9 Cells Merged Together!' # 注意:合併儲存格後,只會留下起始儲存格座標
sh.merge_cells('C5:D5')
sh['C5'] = 'Two Merged Cells~'
wb.save('D1_08.xlsx')
wb = openpyxl.load_workbook('D1_08.xlsx')
sh = wb.active
sh.unmerge_cells('A1:C3')
sh.unmerge_cells('C5:D5')
wb.save('D1_08.xlsx')
| Freeze_panes | Freeze Rows & Columns |
|---|---|
| freeze_panes = 'A2' | Row 1 |
| freeze_panes = 'B1' | Column A |
| freeze_panes = 'C1' | Column A & B |
| freeze_panes = 'C2' | Row1 & Column A & Column B |
| freeze_panes = 'A1' | Non Freeze |
| freeze_panes = None | Non Freeze |
wb = openpyxl.load_workbook('D1_01.xlsx')
sh = wb.active
sh.freeze_panes = 'A2'
wb.save('D1_09.xlsx')
| Chart Type | Function |
|---|---|
| Bar Chart | openpyxl.chart.BarChart() |
| Line Chart | openpyxl.chart.LineChart() |
| Scatter Chart | openpyxl.chart.ScatterChart() |
| Pie Chart | openpyxl.chart.PieChart() |
wb = openpyxl.Workbook()
sh = wb.active
for i in range(1, 6):
sh['A' + str(i)] = i
# 界定一組資料範圍
ref = openpyxl.chart.Reference(sh,
min_col = 1,
min_row = 1,
max_col = 1,
max_row = 5)
# 為資料組設定名稱
ser = openpyxl.chart.Series(ref, title='Fisrt Series')
barChart = openpyxl.chart.BarChart()
barChart.title = 'My Bar Chart'
barChart.append(ser)
sh.add_chart(barChart, 'C2') # 圖表種類,圖表繪製起點
wb.save('D1_10.xlsx')
import openpyxl
from openpyxl.chart import BarChart, Reference, Series
wb = openpyxl.Workbook()
sh = wb.active
for i in range(1, 6):
sh['A' + str(i)] = i
sh['B' + str(i)] = i*2
ref1 = Reference(sh, min_col = 1, max_col = 1, min_row = 1, max_row = 5)
ser1 = Series(ref1, title='Fisrt Series')
ref2 = Reference(sh, min_col = 2, max_col = 2, min_row = 1, max_row = 5)
ser2 = Series(ref2, title='Second Series')
barChart = BarChart()
barChart.title = 'My Bar Chart'
barChart.append(ser1)
barChart.append(ser2)
sh.add_chart(barChart, 'C2')
wb.save('D1_11.xlsx')
import openpyxl
from openpyxl.chart import ScatterChart, Reference, Series
wb = openpyxl.Workbook()
sh = wb.active
rows = [['Day', 'Ollier', 'Orio', 'Olala'],
[1, 50, 30, 50],
[2, 30, 37, 67],
[3, 44, 40, 88],
[4, 40, 58, 99],
[5, 46, 80, 78],
[6, 60, 83, 100],]
for row in rows:
sh.append(row)
chart = ScatterChart()
chart.title = "My Scatter Chart"
chart.style = 12
chart.x_axis.title = 'Day'
chart.y_axis.title = 'Scores'
xvalues = Reference(sh, min_col=1, max_col=1, min_row=2, max_row=7)
for i in range(2, 5):
values = Reference(sh, min_col=i, max_col=i, min_row=1, max_row=7)
series = Series(values, xvalues, title_from_data=True)
chart.series.append(series)
sh.add_chart(chart, "F1")
wb.save('D1_12.xlsx')