python 表格處理之xlrd,xlwt, openpyxl


xlrd:
import xlrd
wb = xlrd.open_workbook('test.xlsx') #打開一個workbook

wb.sheet_names() #獲取所有的sheet name
>>> wb.sheet_names()
[u'Sheet1', u'Sheet2', u'Sheet3']

wb.nsheets #獲取sheet 數量
>>> wb.sheet_names()
[u'Sheet1', u'Sheet2', u'Sheet3']

wb.sheets() #獲取所有sheet 對象
>>> wb.sheets()
[<xlrd.sheet.Sheet object at 0x000000000503F390>, <xlrd.sheet.Sheet object at 0x000000000503F438>, <xlrd.sheet.Sheet object at 0x000000000503F4E0>]


wb.sheet_by_name('Sheet1') #通過sheet名字查找
>>> wb.sheet_by_name('Sheet1')
<xlrd.sheet.Sheet object at 0x000000000503F390>

wb.sheet_by_index(0) #通過index查找
>>> wb.sheet_by_index(0)
<xlrd.sheet.Sheet object at 0x000000000503F390>


ws = wb.sheet_by_name('Sheet1')
ws.nrows #總行數
ws.ncols #總列數


ws.row_values(0,3,4) #獲取第1行,第3~4列的值(不包含4)
ws.col_values(0,1,3) #獲取第1列,第1~3行的值(不包含3)

ws.row(0)[0].value #獲取第0行,第1列的值
ws.col(0)[0].value #獲取第1列,第0行的值

ws.cell(0,2).value #獲取特定單元格的值

 

xlwt:
import xlwt
wb = xlwt.Workbook(encoding='utf-8') #新建一個workbook
wb.save('test.xlsx') #保存


ws = wb.add_sheet('Sheet2') #新建一個sheet2
ws.write(0,0,'value') #向第1行,第1列寫入值

style = xlwt.XFStyle() #新建一個style
font = xlwt.Font() #新建一個font
font.name = 'Times New Roman' #設定字體
font.bold = true #黑體
font.underline = ture #下划線
font.italic = ture #斜體
style.font = font #設定style

ws.write(0,0,'value',sytle) #帶樣式寫入值


#日期
style = xlwt.XFStyle()

style.num_format_str = 'M/D/YY'
# 其它的格式還有: D-MMM-YY, D-MMM, MMM-YY, h:mm, h:mm:ss, h:mm, h:mm:ss, M/D/YY h:mm, mm:ss, [h]:mm:ss, mm:ss.0

ws.write(0, 0, datetime.datetime.now(), style)

 

#公式
ws.write(1, 1, xlwt.Formula('SUM(A1,B1)'))

#超連接
ws.write(0,0,xlwt.Formula('HYPERLINK(http://www.baidu.com)'))


合並單元格
ws.write_merge(0,1,0,3,'value') #合並第1行,第2行的第1列,第4列,並寫入值‘value’

對齊
alignment = xlwt.Alignment() # 新建一個 Alignment alignment.horz = xlwt.Alignment.HORZ_CENTER
# 其它的格式還有 HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED

alignment.vert = xlwt.Alignment.VERT_CENTER
#其它的格式還有 May be: VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED

style = xlwt.XFStyle()
style.alignment = alignment
ws.write(0, 0, 'value', style)


邊框
borders = xlwt.Borders()
borders.left = xlwt.Borders.DASHED
#DASHED:虛線;NO_LINE:沒有;THIN實線
style = xlwt.XFStyle()
style.borders = borders
worksheet.write(0, 0, 'value', style)

背景顏色
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
pattern.pattern_fore_colour = 0 #前景色
pattern.pattern_back_colour = 1 #背景色
style = xlwt.XFStyle()
style.pattern = pattern
ws.write(0, 0, 'value', style)

 

 

 

 

openpyxl:

from openpyxl import Workbook, load_workbook


wb = load_workbook('test.xlsx')#打開一個workbook,如果是只讀的操作,最好加上data_only = True,否則,有些用函數,例如sum計算出來的值就會顯示公式而不是內容
readonly = True,否則,打開大文件的時候會很慢

wb = Workbook() #新建一個workbook

wb.save('C:\\test.xlsx') #保存

#操作sheet
ws = wb.active 或者ws.get_active_sheet() #調用正在運行的工作表
wb.sheetnames #獲取所有的sheet(列表)
ws = wb.sheetnames[0] #索引獲取sheet
ws = wb.get_sheet_by_name('Sheet1') 同ws=wb['Sheet1'] #獲取指定的sheet
ws = wb.create_sheet('mysheet',0) #創建sheet,0指定位置,默認插在指定位置的后面
wb.remove_sheet(wb['Sheet1']) #刪除sheet
ws.title = 'New Title' 設定sheet的名字
source = wb['Sheet1']
target = wb.copy_worksheet(source) #復制sheet


操作單元格
print wb['Sheet1']['A1'].value #打印Sheet1的A1單元格的值
print wb.sheetnames #列表打印所有的sheet的name
ws.rows 同 ws.iter_rows() #打印所有行(生成器)
ws.columns 同ws.iter_cols()#打印所有列(生成器)
ws['A'] #A那一列(元組)
ws['A:C'] #A到C列
ws[1]#第1行(元組)
ws[1:3] #第1到3行(元組)
ws.cell(row = 1,column = 1).value 同 ws[1][1].value #ws[i][j]這種方法j(列號)可以為負索引,且i,j都可以為切片,即[2:3]這種格式


ws['A1'] = 'test'#特定單元寫入值
ws.cell(row = 4,column = 2,value=‘test’) ##特定單元格寫入值
ws.append([1,2,3])##可以用列表來寫入

公式
ws['A4']  =  "=SUM(A1:A3)"

合並單元格
ws.merge_cells(start_row = 2,start_column = 1,end_row = 2,end_column = 2)

插入圖片
from openpyxl.drawing.image import Image
img = Image(r'.\test.png')
img_size=(50.50)
img.width,img.height = img_size #設定圖片大小
ws.column_dimensions[A].width = 100
ws.row_dimensions[1].height = 100   #修改第A列的寬度和第1行的高度
ws.add_image(img,'A1')


設置樣式
from openpyxl.styles import colors from openpyxl.styles import Font
style = Font(name='宋體',color=colors.RED,italic=True,size=14) #colors='#AABBCC'也可以,Font的其它屬性可以dir(Font)看到
ws['A1'].font = font #設定指定單元格的樣式
col = ws.column_dimensions['A']
col.font = style #設定列的樣式
row = ws.row_dimensions[1]
row.font = style #設定行的樣式

顏色背景
from openpyxl.sytels import PatternFill
sytle = PatternFill('solid',fgColor='#AABBCC',bgColor='#DDEEFF')
ws['A1'].fill = style #指定單元格顏色
col = ws.column_dimensions['A']
col.fill = style #設定列的顏色
row = ws.row_dimensions[1]
row.fill = style #設定行的顏色

畫圖
from openpyxl.chart import Series,LineChart,Reference
chart = LineChart() #圖標對象
chart.title = '圖標標題'
chart.style = 8  #線的sytle
data = Reference(ws,min_col=5,min_row=4,max_col=10,max_row=4) #數據
serieobj = Series(data,title='測試') #series對象
chart.appen(seriesobj) #series添加到chart中
ws.add_chart(chart,'A6') #chart添加到sheet中


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM