Python excel日期格式


https://www.cnblogs.com/yangmingxianshen/p/9176461.html

 

在python中操作execl進行數據讀寫的時候,可以使用xlrd進行文件的讀取,使用xlwt將數據寫入execl中。

1.xlrd

xlwt用來讀取execl中的數據,常見的用法如下。

(1)打開execl文件並獲取所有的sheet

>>> import xlrd
>>> workbook = xlrd.open_workbook(r'D:\Program Files\Notepad++\Student.xlsx')
>>> print workbook.sheet_names()
[u'Sheet1', u'Sheet2', u'Sheet3']

(2)根據下標獲取sheet名稱

>>> sheet2_name=workbook.sheet_names()[1]
>>> print sheet2_name
Sheet2

(3)根據sheet索引或者名稱獲取sheet內容,同時獲取sheet名稱、行數、列數

復制代碼
>>> sheet2 = workbook.sheet_by_index(1)
>>> print sheet2.name,sheet2.nrows,sheet2.ncols
Sheet2 6 5
>>> sheet2 = workbook.sheet_by_name('Sheet2')
>>> print sheet2.name,sheet2.nrows,sheet2.ncols
Sheet2 6 5
復制代碼

(4)根據sheet名稱獲取整行和整列的值

復制代碼
>>> sheet2 = workbook.sheet_by_name('Sheet2')
>>> rows = sheet2.row_values(3)
>>> cols = sheet2.col_values(2)
>>> print rows
[u'lisi2', 19.0, 41462.0, u'basketball', u'friend2'] #標紅部分為日期2013/7/7,實際卻顯示為浮點數。后面有描述如何糾正
>>> print cols
[u'\u51fa\u751f\u65e5\u671f', 42129.0, 41796.0, 41462.0, 40941.0, u''] # 問題同上
復制代碼

(5)獲取指定單元格的內容

復制代碼
>>> print sheet2.cell(1,0).value.encode('utf-8')
xiaoming2
>>> print sheet2.cell_value(1,0).encode('utf-8')
xiaoming2
>>> print sheet2.row(1)[0].value.encode('utf-8')
xiaoming2
復制代碼

(6)獲取單元格內容的數據類型

復制代碼
>>> print sheet2.cell(1,0).ctype #第2行第1列:xiaoming2 為string類型
1
>>> print sheet2.cell(1,1).ctype #第2行第2列:12  為number類型
2
>>> print sheet2.cell(1,2).ctype #第2行第3列:2015/5/5 為date類型
3
復制代碼

(7)獲取單元格內容為日期類型的方式

 使用xlrd的xldate_as_tuple處理為date格式,先判斷表格的ctype=3時xlrd才能執行操作,如下:

 

復制代碼
>>> from datetime import datetime,date
>>> sheet2.cell(1,2).ctype
3
>>> sheet2.cell(1,2).value
42129.0
>>> xlrd.xldate_as_tuple(sheet2.cell_value(1,2),workbook.datemode)
(2015, 5, 5, 0, 0, 0)
>>> date_value = xlrd.xldate_as_tuple(sheet2.cell_value(1,2),workbook.datemode)
>>> date(*date_value[:3])
datetime.date(2015, 5, 5)
>>> date(*date_value[:3]).strftime('%Y/%m/%d')
'2015/05/05'
復制代碼

那么如果是在腳本中需要獲取並顯示單元格內容為日期類型的,可以先做一個判斷。判斷ctype是否等於3,如果等於3,則用時間格式處理:

if (sheet.cell(row,col).ctype == 3):
  date_value = xlrd.xldate_as_tuple(sheet.cell_value(row,col),book.datemode)
  date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d')

(8)獲取合並單元格的內容

復制代碼
>>> sheet2.cell(1,4).value #第4列的第2行和第3行是合並單元格
u'friend'
>>> sheet2.cell(2,4).value
u''
>>> sheet2.cell(5,1).value #第6行的第2和第3第4列是合並單元格,這里我們只獲取到第6行第2列的值而第3列第4列獲取的內容為空,如何處理?
u'None'
>>> sheet2.cell(5,2).value
u''
>>> sheet2.cell(5,3).value
u''
復制代碼

 從實驗結果可以看出來,第6行的第2和第3第4列是合並單元格,但這里我們只獲取到第6行第2列的值而第3列第4列獲取的內容為空,理論上來說合並的

單元格內容應該是一樣的,但是現在只有合並的第一個單元格可以獲取到值,其他為空,如何處理? 再用一種更直觀的方式顯示

>>> sheet2.row_values(5)
[u'zhaoliu2', u'None', u'', u'', u''] #標紅的部分為合並單元格
>>> sheet2.col_values(4)
[u'\u5173\u7cfb', u'friend', u'', u'friend2', u'', u''] #標紅的部分為合並單元格,注意這里是兩個合並單元格

可以利用merged_cells方法進行處理,處理的方法是只能獲取合並單元格的第一個cell的行列索引,才能讀到值,讀錯了就是空值。即合並行單元格讀取

行的第一個索引,合並列單元格讀取列的第一個索引。這里,需要在讀取文件的時候添加個參數,將formatting_info參數設置為True,默認是False,否

則可能調用merged_cells方法獲取到的是空值。

復制代碼
>>> workbook = xlrd.open_workbook(r'D:\Program Files\Notepad++\Student.xlsx',formatting_info=True) 

>>> sheet2 = workbook.sheet_by_name('sheet2') 

>>> sheet2.merged_cells 
[(1, 3, 4, 5), (3, 5, 4, 5), (5, 6, 1, 5)]
復制代碼

merged_cells返回的這四個參數的含義是:(row,row_range,col,col_range),其中[row,row_range)包括row,不包括row_range,col也是一樣,下標從0開

始。即(1, 3, 4, 5)的含義是:第2到3行(不包括第4行)合並,(5, 6, 1, 5)的含義是:第2到5列合並。利用這個,可以分別獲取合並的三個單元格的內容:

復制代碼
>>> print sheet2.cell_value(1,4) #(1, 3, 4, 5)
friend
>>> print sheet2.cell_value(3,4) #(3, 5, 4, 5)
friend2
>>> print sheet2.cell_value(5,1) #(5, 6, 1, 5)
None
復制代碼

 

2.xlwt

xlwt用來往execl中寫入數據,功能還是比較豐富的。

先來看一個比較簡單的例子。

復制代碼
import xlwt
# 創建一個workbook 設置編碼
workbook = xlwt.Workbook(encoding = 'utf-8')
# 創建一個worksheet
worksheet = workbook.add_sheet('My Worksheet')

# 寫入excel
# 參數對應 行, 列, 值
worksheet.write(1,0, label = 'this is test')

# 保存
workbook.save('Excel_test.xls')
復制代碼

運行之后,就會在當前目錄之下生成一個叫做“Excel_test.xls”的文件。

當然你還可以做一些樣式上面的更改。

(1)設置字體的樣式

復制代碼
import xlwt

workbook = xlwt.Workbook(encoding = 'ascii')
worksheet = workbook.add_sheet('My Worksheet')

style = xlwt.XFStyle() # 初始化樣式
font = xlwt.Font() # 為樣式創建字體
font.name = 'Times New Roman' 
font.bold = True # 黑體
font.underline = True # 下划線
font.italic = True # 斜體字
style.font = font # 設定樣式
worksheet.write(0, 0, 'Unformatted value') # 不帶樣式的寫入

worksheet.write(1, 0, 'Formatted value', style) # 帶樣式的寫入

workbook.save('formatting.xls') # 保存文件
復制代碼

(2)設置單元格寬度

復制代碼
import xlwt

workbook = xlwt.Workbook()
worksheet = workbook.add_sheet('My Sheet')
worksheet.write(0, 0,'My Cell Contents')

# 設置單元格寬度
worksheet.col(0).width = 3333
workbook.save('cell_width.xls')
復制代碼

(3)輸出一個日期到單元格

復制代碼
import xlwt
import datetime
workbook = xlwt.Workbook()
worksheet = workbook.add_sheet('My Sheet')
style = xlwt.XFStyle()

#設置日期的格式
style.num_format_str = 'M/D/YY' # Other options: 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
worksheet.write(0, 0, datetime.datetime.now(), style)
workbook.save('Excel_Workbook.xls')
復制代碼

 

(4)向單元格添加一個公式

復制代碼
import xlwt
workbook = xlwt.Workbook()
worksheet = workbook.add_sheet('My Sheet')
worksheet.write(0, 0, 5) # Outputs 5
worksheet.write(0, 1, 2) # Outputs 2
worksheet.write(1, 0, xlwt.Formula('A1*B1')) # Should output "10" (A1[5] * A2[2])
worksheet.write(1, 1, xlwt.Formula('SUM(A1,B1)')) # Should output "7" (A1[5] + A2[2])
workbook.save('Excel_Workbook.xls')
復制代碼

 

(5)向單元格添加一個超鏈接

import xlwt
workbook = xlwt.Workbook()
worksheet = workbook.add_sheet('My Sheet')
worksheet.write(0, 0, xlwt.Formula('HYPERLINK("http://www.google.com";"Google")')) # Outputs the text "Google" linking to http://www.google.com
workbook.save('Excel_Workbook.xls')

(6)合並列和行

復制代碼
import xlwt
workbook = xlwt.Workbook()
worksheet = workbook.add_sheet('My Sheet')
worksheet.write_merge(0, 0, 0, 3, 'First Merge') # Merges row 0's columns 0 through 3.  合並第一行的0到3列
font = xlwt.Font() # Create Font  #創建一個樣式
font.bold = True # Set font to Bold
style = xlwt.XFStyle() # Create Style
style.font = font # Add Bold Font to Style
worksheet.write_merge(1, 2, 0, 3, 'Second Merge', style) # 合並1到2行的0列到3列
workbook.save('Excel_Workbook.xls')
復制代碼

(7)設置單元格內容的對齊方式

復制代碼
import xlwt
workbook = xlwt.Workbook()
worksheet = workbook.add_sheet('My Sheet')
alignment = xlwt.Alignment() # Create Alignment
alignment.horz = xlwt.Alignment.HORZ_CENTER # May be: 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() # Create Style
style.alignment = alignment # Add Alignment to Style
worksheet.write(0, 0, 'Cell Contents', style)
workbook.save('Excel_Workbook.xls')
復制代碼

(8)為單元格添加邊框

復制代碼
import xlwt
workbook = xlwt.Workbook()
worksheet = workbook.add_sheet('My Sheet')
borders = xlwt.Borders() # Create Borders
borders.left = xlwt.Borders.DASHED 
    DASHED虛線
    NO_LINE沒有
    THIN實線
    
# May be: NO_LINE, THIN, MEDIUM, DASHED, DOTTED, THICK, DOUBLE, HAIR, MEDIUM_DASHED, THIN_DASH_DOTTED, MEDIUM_DASH_DOTTED, THIN_DASH_DOT_DOTTED, MEDIUM_DASH_DOT_DOTTED, SLANTED_MEDIUM_DASH_DOTTED, or 0x00 through 0x0D.
borders.right = xlwt.Borders.DASHED
borders.top = xlwt.Borders.DASHED
borders.bottom = xlwt.Borders.DASHED
borders.left_colour = 0x40
borders.right_colour = 0x40
borders.top_colour = 0x40
borders.bottom_colour = 0x40
style = xlwt.XFStyle() # Create Style
style.borders = borders # Add Borders to Style
worksheet.write(0, 0, 'Cell Contents', style)
workbook.save('Excel_Workbook.xls')
復制代碼

(9)為單元格設置背景色

復制代碼
import xlwt
workbook = xlwt.Workbook()
worksheet = workbook.add_sheet('My Sheet')
pattern = xlwt.Pattern() # Create the Pattern
pattern.pattern = xlwt.Pattern.SOLID_PATTERN # May be: NO_PATTERN, SOLID_PATTERN, or 0x00 through 0x12
pattern.pattern_fore_colour = 5 # May be: 8 through 63. 0 = Black, 1 = White, 2 = Red, 3 = Green, 4 = Blue, 5 = Yellow, 6 = Magenta, 7 = Cyan, 16 = Maroon, 17 = Dark Green, 18 = Dark Blue, 19 = Dark Yellow , almost brown), 20 = Dark Magenta, 21 = Teal, 22 = Light Gray, 23 = Dark Gray, the list goes on...
style = xlwt.XFStyle() # Create the Pattern
style.pattern = pattern # Add Pattern to Style
worksheet.write(0, 0, 'Cell Contents', style)
workbook.save('Excel_Workbook.xls')
復制代碼

 


免責聲明!

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



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