python中excel表操作的簡單介紹

本文目錄一覽:

Python操作Excel

因為工作上的需要,最近經常用Python對報表做Excel導入導出,特此做個筆記,方便日後查看。

首先我選擇了Python-Excel下的xlrd和xlwt。需要注意的是,xlwt只支持生成xls,暫時還不支持xlsx。

讀取主要是用到這兩個方法,我想到就繼續補充,更多用法請查閱官方文檔

表格樣式設置有XFStyle和easyxf兩種方式

列寬在Excel裡面用字元寬頻來表示。xlwt以字元’0’的1/256寬為一個單位,默認表格寬度為2962,大致相當於11個字元寬度。設置Excel的列寬就大致等於,字元寬度 * 256 + 182 (有待繼續考證,精度目前還行)

行高再Excel裡面一般用磅來表示,磅 * 20 即是xlwt的數值。字體的大小也是用磅來設置。

設置頁面方向

使用num_format_str來設置單元格類型。

特別是遇到時間的時候,Excel會自動轉為May-2017這種格式,這時候就要設置為文本類型,防止自動轉換

python如何操作當前已經打開的excel?

讀取一個Excel的基本流程

1. 雙擊打開一個Excel文件

2. 選擇sheet

3. 對sheet裡面的東西進行操作

在python中我們使用第三方模塊 openpyxl模塊操作Excel

ps:這個模塊不是python自帶的 是第三方模塊需要我們下載的

進入終端輸入: pip install openpyxl

如果想要下載快點:百度搜索 python第三方源

from openpyxl import load_workbook

# 1. 打開Excel文件

workbook = load_workbook(“p1.xlsx”)

# 2. 選擇sheet

# 2.1 獲取所有sheet

# print(workbook.sheetnames)

# 2.2 選擇sheet

sheet = workbook[“Sheet1”]

print(sheet.max_row) # 最大行號

print(sheet.max_column) # 最大列號

# 2.3 我們選擇了sheet後就可以去操作數據了

# cell = sheet.cell(1, 1) # 獲取到單元格

# print(cell.value)

sheet 相關操作

from openpyxl import load_workbook

# 1. 打開Excel文件

workbook = load_workbook(“p1.xlsx”)

# 2. 選擇sheet

# 2.1 獲取所有sheet

# print(workbook.sheetnames)

# 2.2 選擇sheet

# sheet = workbook[“Sheet1”]

# 2.3 基於索引的方式獲取sheet

# sheet = workbook.worksheets[0]

# 3. 獲取到所有的sheet

# for name in workbook.sheetnames:

# sheet = workbook[name]

# cell = sheet.cell(1, 1)

# print(cell.value)

讀單元格的數據

from openpyxl import load_workbook

# 1. 打開Excel文件

workbook = load_workbook(“p1.xlsx”)

# 2 獲取sheet

sheet = workbook.worksheets[0]

# 獲取到第N行第N列的單元格

# cell = sheet.cell(1, 2)

# print(cell.value)

# 獲取到某個單元格

# cell = sheet[‘A2’]

# print(cell.value)

# print()

# for cell in sheet[1]: # 獲取到第一行的內容

# print(cell.value)

# 獲取到所有的行的數據 獲取到一列的值

# for row in sheet.rows:

# print(row[0].value)

# 獲取到所有的列的數據 獲取到一行的值

for col in sheet.columns:

print(col[0].value)

寫Excel

# 在Excel中想要寫文件 大致可以分為兩種

# 1. 在原有的Excel的基礎上寫內容

# 2. 在一個新的Excel裡面寫內容

1. 打開Excel表格

2. 找到單元格 修改寫入內容

3. 保存

# from openpyxl import load_workbook

#

# # 1. 打開Excel文件

# workbook = load_workbook(“p1.xlsx”)

# # 2 獲取sheet

# sheet = workbook.worksheets[0]

#

# # 獲取到第N行第N列的單元格

# # cell = sheet.cell(1, 2)

# # print(cell.value)

#

# # 獲取到某個單元格

#

# # cell = sheet[‘A2’]

# # print(cell.value)

#

# # print()

# # for cell in sheet[1]: # 獲取到第一行的內容

# # print(cell.value)

#

#

# # 獲取到所有的行的數據 獲取到一列的值

# # for row in sheet.rows:

# # print(row[0].value)

#

# # 獲取到所有的列的數據 獲取到一行的值

# for col in sheet.columns:

# print(col[0].value)

# from openpyxl import workbook

# wb = workbook.Workbook() # 創建一個Excel會默認有一個sheet 就叫 Sheet

# 1. 修改sheet名稱

# sheet = wb.worksheets[0]

# sheet.title = ‘數據集’

# wb.save(‘p2.xlsx’)

# 2. 創建一個新的sheet 還可以設置顏色

# sheet = wb.create_sheet(‘工作計劃’, 1)

# sheet.sheet_properties.tabColor = ‘FFB6C1’

# wb.save(‘p2.xlsx’)

# 3. copy sheet

# sheet = wb.create_sheet(‘工作計劃’)

# sheet.sheet_properties.tabColor = ‘FFB6C1’

#

# new_sheet = wb.copy_worksheet(wb[‘Sheet’])

# new_sheet.title = ‘新的計劃’

# wb.save(‘p2.xlsx’)

# print(wb.sheetnames)

# sheet = wb.worksheets[0]

# cell = sheet.cell(1, 1)

# cell.value = ‘哈哈哈’

#

# wb.save(‘p2.xlsx’)

from openpyxl import load_workbook

# 1. 打開Excel文件

workbook = load_workbook(“p2.xlsx”)

# 2 獲取sheet

sheet = workbook.worksheets[0]

# 1. 獲取某個單元格 修改值

# cell = sheet.cell(1, 1)

# cell.value = ‘哈哈哈’

# wb.save(‘p2.xlsx’)

# 2. 獲取某個單元格 修改值

# sheet[‘B3’] = ‘光’

# workbook.save(‘p2.xlsx’)

# cell_list = sheet[“B2”: ‘C3’]

# for row in cell_list:

# for cell in row:

# cell.value = ‘新的值’

# workbook.save(‘p1.xlsx’)

for row in sheet.iter_rows(min_row=5, min_col=1, max_col=7, max_row=10):

for cell in row:

cell.value = ‘oo’

workbook.save(‘p1.xlsx’)

r row in sheet.iter_rows(min_row=5, min_col=1, max_col=7, max_row=10):

for cell in row:

cell.value = 『oo』

workbook.save(『p1.xlsx』)

Python操作Excel實現自動化報表

Python操作Excel實現自動化報表

安裝

python -m pip install xlrd xlwt xlutils。

基本用法

1.從指定文件路徑讀取excel表格,進行一定操作,然後保存到另一個excel文件:result.xlsx

import xlwt

import xlrd

from xlutils.copy import copy

import pandas as pd

from pandas import DataFrame,Series

import os

os.chdir(‘./’)

# 從指定文件路徑讀取excel表格

df = pd.read_excel(‘D:/mypaper/data/data.xlsx’)

# 查看df內容

# 根據age算出出生年份,增加一列

import datetime

import os

year = datetime.datetime.now().year#獲取當前系統時間對應的年份

df[‘birth’] = year-df[‘age’]

df.to_excel(‘result.xlsx’)#保存到當前工作目錄,可以用os.getcwd()查看

#查看下此時df的內容,可以看到已經生成了birth這一列。

2.單元格操作

# 定義方法:讀取指定目錄下Excel文件某個sheet單元格的值

def excel_read(file_path,table,x,y):

     data = xlrd.open_workbook(file_path)

     table = data.sheet_by_name(table)

     return table.cell(y,x).value

# 定義方法:單元格值及樣式

write_obj_list = []

def concat_obj(cols,rows,value):

    write_obj_list.append({‘cols’:cols,’rows’:rows,’value’:value,\

‘style’:xlwt.easyxf(‘font: name 宋體,height 280;alignment: horiz centre’)})

# 定義方法:合併單元格

def merge_unit(srows,erows,scols,ecols,value):

    write_obj_list.append({‘id’:’merge’,’srows’:srows,’erows’:erows,’scols’:scols,\

‘ecols’:ecols,’value’:value,’style’:xlwt.easyxf(‘font: name 宋體,height 280;alignment: horiz centre’)})

# 定義方法:更新excel

excel_update(file_path,write_obj_list,new_path):

    old_excel = xlrd.open_workbook(file_path, formatting_info=True)

    #管道作用

    new_excel = copy(old_excel)

    ”’

    通過get_sheet()獲取的sheet有write()方法

    ”’

    sheet1 = new_excel.get_sheet(0)

    ”’

    1代表是修改第幾個工作表裡,從0開始算是第一個。此處修改第一個工作表

    ”’

    for item in write_obj_list:

        if ‘id’ not in item.keys():

            if ‘style’ in item.keys():

                sheet1.write(item[‘rows’], item[‘cols’], item[‘value’],item[‘style’])

            else:

                sheet1.write(item[‘rows’], item[‘cols’], item[‘value’])

        else:

            if ‘style’ in item.keys():

                sheet1.write_merge(item[‘srows’],item[‘erows’],item[‘scols’], item[‘ecols’], item[‘value’],item[‘style’])

            else:

                sheet1.write_merge(item[‘srows’],item[‘erows’],item[‘scols’], item[‘ecols’], item[‘value’])

    ”’

   如果報錯 dict_items has no attributes sort

    把syle源碼中–alist.sort() 修改為—- sorted(alist) 

    一共修改2次

    ”’

    new_excel.save(file_path)

#參數詳解

# srows:合併的起始行數

# erows:合併的結束行數

# scols:合併的起始列數

# ecols:合併的結束列數 

# value:合併單元格後的填充值

# style:合併後填充風格:

#     font: name 宋體

#     height 280;

#     alignment: horiz centre

#     … 與excel操作基本保持一致

(注意:該方法僅僅是將需要直行的動作保存到一個list中,真正的動作還未執行,執行動作是發生在excel_update方法中)

最終調用excel_update方法,傳入每個單元格需要進行的操作和填充值的write_obj_list以及文件保存路徑file_path,就可以在當前工作目錄下生成想要的Excel結果文件。

注意:

1.write_obj_list支持用戶自定義

2.write_obj_list也可以是根據excel_read方法讀取現有待修改的excel文件(可以維持原有表格的格式)而生成

End

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/243486.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:56
下一篇 2024-12-12 12:56

相關推薦

  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29

發表回復

登錄後才能評論