python操作excel方法示例


1.python處理Excel的幾種方法:

方法一:利用pandas、
方法二、xlrd和xlwt兩個模塊分別用來讀Excel和寫Excel,只支持.xls和.xlsx格式,xlutils模塊可以同時讀寫一個已存在的Excel文件,依賴於xlrd和xlwt
方法三、openpyxl(可讀寫excel表)專門處理Excel2007及以上版本產生的xlsx文件;2007一下的版本為xls結尾的文件,需要使用xlrd(讀)和xlwt(寫)庫進行操作

當然還有其它包。
備注:

1、Python自帶的csv模塊可以處理.csv文件。

2、excel表的文字編碼如果是“gb2312” 讀取后就會顯示亂碼,請先轉成Unicode
3、workbook: 工作簿,一個excel文件包含多個sheet。
4、sheet:工作表,一個workbook有多個,表名識別,如“sheet1”,“sheet2”等。
5、cell: 單元格,存儲數據對象
6、Python讀取Excel中單元格的內容返回的有5種類型,即sheet.cell(x,y)的ctype屬性返回的是數值型:ctype :  0 empty,1 string,2 number, 3 date,4 boolean,5 error

 

2、用xlrd包讀取Excel文件

用法示例:

# -*- coding: utf-8 -*-

import xlrd
file_path = "D:/MyData/ex_lizq5/PycharmProjects/read_excel/ratedate.xlsx"

#打開文件,獲得excel文件的工作簿對象
excel = xlrd.open_workbook(file_path,encoding_override='utf-8')

# 返回所有的sheet對象的list
all_sheet = excel.sheets() # 獲得工作簿sheet對象的方法,得到一個sheet列表
print(all_sheet)

# 通過索引得到sheet對象
print excel.sheet_by_index(0)
# 通過索引得到sheet對象的名稱
print excel.sheet_by_index(0).name
# 通過sheet表的表名獲得對象
print excel.sheet_by_name("Sheet0").name

# 遍歷sheet列表,對每一個sheet進行操作
for each_sheet in all_sheet:
    # 從對象列表中獲得sheet對象
    print each_sheet
    # 獲得sheet表的名字
    print "sheet的名字是:%s".decode('utf-8') % each_sheet.name# 格式化打印
    print("表名稱為:{0},類型為:{1}".format(excel.sheet_by_index(0), type(excel.sheet_by_index(0))))

# 獲取工作表的基本信息,表名、行數,列數等
sheet_name = []
row_num = []
col_num = []
for each_sheet in all_sheet:
    sheet_name.append(each_sheet.name)
    print "該excel文件共有%d個sheet,當前sheet的名稱是%s,該sheet有%d行,%d列".decode('utf-8') % (len(all_sheet),each_sheet.name,each_sheet.nrows,each_sheet.ncols)
    row_num.append(each_sheet.nrows)
    col_num.append(each_sheet.ncols)

print sheet_name
print row_num
print col_num

# 遍歷sheet1的所有行和列
print "--------------讀取每行----------------------".decode('utf-8')

# 得到某個sheet的總行數
print excel.sheet_by_name('Sheet0').nrows
# 通過sheet的報名獲得sheet對象
mysheet = excel.sheet_by_name('Sheet0')
# 每行形成一個列表
print "-----打印序號為1的行,結果是一個列表------"
print mysheet.row_values(1)
# 打印序號為1的行的第0列
print mysheet.row_values(1)[0]

# 遍歷每行的值
for value in mysheet.row_values(1):
     print value,


print ""
print "-----用row(index)方法打印,結果是一個字典列表-----"
# Sheet.row(r)或Sheet.col(c)可以獲得指定行或列,返回Cell對象的list,得到的是一個字典列表
print mysheet.row(1)
# 獲取單元格(1,1)的值
print mysheet.cell_value(1,1)

3、盡量不用xlwt包寫入Excel文件

在xlwt中生成的xls文件最多能支持65536行數據,如果數據太多,會報這個錯誤:

ValueError: row index (65536)not an intin range(65536)錯誤

寫入示例:

  # 1. 導入模塊
  import xlwt
def write_excel():
  # 2. 創建Excel工作薄
  myWorkbook = xlwt.Workbook()
  # 3. 添加Excel工作表
  mySheet = myWorkbook.add_sheet('A Test Sheet')
  # 4. 寫入數據
  myStyle = xlwt.easyxf('font: name Times New Roman, color-index red, bold on', num_format_str='#,##0.00')   #數據格式
  mySheet.write(i, j, 1234.56, myStyle)
  mySheet.write(2, 0, 1)                          #寫入A3,數值等於1
  mySheet.write(2, 1, 1)                          #寫入B3,數值等於1
  mySheet.write(2, 2, xlwt.Formula("A3+B3"))      #寫入C3,數值等於2(A3+B3)
  #5. 保存
  myWorkbook.save('excelFile.xls')
if __name__ == '__main__':
    # 寫入Excel
    write_excel();
    print ('寫入成功') 
    

4、用openpyxl包寫入Excel文件

# 導包
import openpyxl

#寫excel
def write_excel():
    f = openpyxl.Workbook() #創建工作簿

    sheet1 = f.create_sheet()
    #sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #創建sheet
    row0 = [u'L1',u'L2',u'L3',u'L4',u'問題',u'答案']

    #生成第一行
    #for i in range(len(row0)):
    #    sheet1.cell(column=i,row=0).value='L1')

    #生成后續

    for jkey in range(len(newTables)): 
       jk = 1
       for cT in range(arrayNum):
         jk = jkey + 1
         if cT == 0:
           sheet1.cell(row=jk,column=cT+1).value='1'
         else:
           sheet1.cell(row=jk,column=cT+1).value='2'
           
    f.save("chatPy.xlsx") #保存文件

if __name__ == '__main__':
    # 寫入Excel
    write_excel();
    print ('寫入成功')
   

5 用pandas讀寫excel

用pandas處理excel和csv文件方法相同

https://blog.csdn.net/liufang0001/article/details/77856255


免責聲明!

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



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