『壹』 如何用python3 將一個大的excel文件(.xlsx)分割為多個excel的文件,sheet 不變。以下是我的代碼:
我覺得你要處理數據的話最好用資料庫,把excel中的數據讀入到資料庫中再處理就很輕鬆了。用python本身支持的sqlite就夠了,才800多兆而已。
『貳』 python對excel操作
Python對於Excel的操作是多種多樣的,掌握了相關用法就可以隨心所欲的操作數據了!
操作xls文件
xlrd(讀操作):
import xlrd
1、引入xlrd模塊
workbook=xlrd.open_workbook("36.xls")
2、打開[36.xls]文件,獲取excel文件的workbook(工作簿)對象
names=workbook.sheet_names()
3、獲取所有sheet的名字
worksheet=workbook.sheet_by_index(0)
4、通過sheet索引獲得sheet對象
worksheet為excel表第一個sheet表的實例化對象
worksheet=workbook.sheet_by_name("各省市")
5、通過sheet名獲得sheet對象
worksheet為excel表sheet名為【各省市】的實例化對象
nrows=worksheet.nrows
6、獲取該表的總行數
ncols=worksheet.ncols
7、獲取該表的總列數
row_data=worksheet.row_values(n)
8、獲取該表第n行的內容
col_data=worksheet.col_values(n)
9、獲取該表第n列的內容
cell_value=worksheet.cell_value(i,j)
10、獲取該表第i行第j列的單元格內容
xlwt(寫操作):
import xlwt
1、引入xlwt模塊
book=xlwt.Workbook(encoding="utf-8")
2、創建一個Workbook對象,相當於創建了一個Excel文件
sheet = book.add_sheet('test')
3、創建一個sheet對象,一個sheet對象對應Excel文件中的一張表格。
sheet.write(i, j, '各省市')
4、向sheet表的第i行第j列,寫入'各省市'
book.save('Data\\36.xls')
5、保存為Data目錄下【36.xls】文件
操作xlsx文件
openpyxl(讀操作):
import openpyxl
1、引入openpyxl模塊
workbook=openpyxl.load_workbook("36.xlsx")
2、打開[36.xlsx]文件,獲取excel文件的workbook(工作簿)對象
names=workbook.sheetnames
worksheet=workbook.worksheets[0]
worksheet=workbook["各省市"]
ws = workbook.active
6、獲取當前活躍的worksheet,默認就是第一個worksheet
nrows=worksheet.max_row
7、獲取該表的總行數
ncols=worksheet.max_column
8、獲取該表的總列數
content_A1= worksheet['A1'].value
9、獲取該表A1單元格的內容
content_A1=worksheet.cell(row=1,column=1).value
10、獲取該表第1列第1列的內容
openpyxl(寫操作):
workbook=openpyxl.Workbook()worksheet = workbook.active
3、獲取當前活躍的worksheet,默認就是第一個worksheet
worksheet.title="test"
4、worksheet的名稱設置為"test"
worksheet = workbook.create_sheet()
5、創建一個新的sheet表,默認插在工作簿末尾
worksheet.cell(i,j,'空')
6、第i行第j列的值改成'空'
worksheet["B2"]="空"
7、將B2的值改成'空'
worksheet.insert_cols(1)
8、在第一列之前插入一列
worksheet.append(["新增","台灣省"])
9、添加行
workbook.save("Data\\36.xlsx")
10、保存為Data目錄下【36.xlsx】文件
pandas處理excel文件
pandas操作:
import pandas as pd
1、引入pandas模塊
data = pd.read_excel('36.xls')
2、讀取[36.xls]或者[36.xlsx]文件
data = pd.read_csv('36.csv')
3、讀取[36.csv]文件
data=data.dropna(subset=['店鋪'])
4、過濾掉data店鋪列有缺失的數據
data.sort_values("客戶網名", inplace=True)
5、將data數據按照客戶網名列進行從小到大排序
data = pd.read_csv(36.csv, skiprows = [0,1,2],sep = None, skipfooter = 4)
6、讀取[36.csv]文件,前三行和後四行的數據略過
data = data.fillna('空')
7、將data中的空白處填充成'空'
data.drop_plicates('訂單','first',inplace=True)
8、data中的數據,按照【訂單】列做去重處理,保留第一條數據
data=pd.DataFrame(data,columns=['訂單','倉庫'])
9、只保留data中【訂單】【倉庫】列的數據
data = data[(data[u'展現量'] > 0)]
10、只保留【展現量】列中大於0的數據
data= data[data["訂單"].str.contains('000')]
11、只保留【訂單】列中包含'000'的數據
data= data[data["倉庫"]=='正品倉']
12、只保留【倉庫】列是'正品倉'的數據
xs= data[data["店鋪"]=='南極人']['銷售額']
13、獲取店鋪是南極人的銷售額數據
data['訂單'] = data['訂單'].str[3:7]
14、【訂單】列的值只保留4-8個位元組的值
data["郵資"] = np.where((data['店鋪'].str.contains('T|t')) & -(data['倉庫'] == '代發倉'), 8, data['郵資'])
15、滿足店鋪列包含 T 或 t 並且倉庫不等於'代發倉'的話,將郵資的值改成8,否則值不變
data = np.array(data).tolist()
16、將data從DataFrame轉換成列表
data=pd.DataFrame(data)
17、將列表轉換成DataFrame格式
zhan = data[u'展現'].sum().round(2)
18、將data中所有展現列數據求和,並取兩位小數
sum=data.groupby(['店鋪'])['刷單'].sum()
19、將data中按照店鋪對刷單進行求和
counts=data['店鋪'].value_counts()
20、將data按照店鋪進行計算
avg=data.groupby(['店鋪'])['刷單'].mean()
21、將data按照店鋪對刷單進行求平均數
count = pd.concat([counts,sum], axis=1, ignore_index=True, sort=True)
22、將counts和sum兩個DataFrame進行了組合
count=count.rename(index=str, columns={0: "訂單", 1: "成本"})
23、將新生成的DataFrame列名進行修改
data = pd.merge(sum, counts, how='left', left_on='店鋪', right_on='店鋪')
24、將列表轉換成DataFrame格式
from openpyxl import Workbook
wb=Workbook()
ws1=wb.active
data.to_excel('36.xlsx')
wb.close()
25、data完整的寫入到關閉過程,執行此操作的時候【36.xlsx】不能是打開狀態
excel格式操作
樣式處理:
1、打開【36.xlsx】
sheet=workbook.worksheets[0]
2、將第一個sheet對象賦值給sheet
sheet.column_dimensions['A'].width = 20.0
3、將A列的寬度設置為20
sheet.row_dismensions[1].height = 20.0
4、將第一行的行高設置為20
sheet.merge_cells('A1:A2')
5、將sheet表A1和A2單元格合並
sheet.unmerge_cells('A1:A2')
6、將sheet表A1和A2單元格取消合並
sheet.insert_rows(2,2)
7、將sheet表從第2行插入2行
sheet.insert_cols(3,2)
8、將sheet表從第3列插入2列
sheet.delete_rows(2)
9、刪除第2行
sheet.delete_cols(3, 2)
10、將sheet表從第3列開始刪除2列
from openpyxl.styles import Font, Border, PatternFill, colors, Alignment
11、分別引入字體、邊框、圖案填充、顏色、對齊方式
sheet.cell(i,j).font = Font(name='Times New Roman', size=14, bold=True, color=colors.WHITE)
12、設置sheet表第 i 行第 j 列的字體
sheet.cell(i,j).alignment = Alignment(horizontal='center', vertical='center')
13、設置sheet表第 i 行第 j 列的字體對齊方式
left, right, top, bottom = [Side(style='thin', color='000000')] * 4sheet.cell(i,j).border = Border(left=left, right=right, top=top, bottom=bottom)
14、引入邊框樣式並調用
fill = PatternFill("solid", fgColor="1874CD")sheet.cell(1,j).fill = fill
15、引入填充樣式,並調用
import xlrd
from openpyxl import Workbook
from openpyxl import load_workbook
workbook=load_workbook(filename='C:/Users/EDZ/Desktop/工作/2021.08.03/大兄弟.xlsx')
sheet=workbook.active
sheet.insert_cols(idx=1)
sheet.merge_cells(A1:A3)
sheet['A1']=['上海','山東','浙江']
『叄』 如何用python3 將一個大的excel文件(.xlsx)分割為多個excel的文件,sheet 不變。以下是我的代碼:
python各個讀寫excel模塊的對比如下:
而我使用的是python3.4下的openpyxl和xlsxwriter
讀是openpyxl
寫是xlsxwriter
對於一般的excel的操作都能實現
『肆』 Python怎麼在Excel中把一個單元格里的內容拆分提取
如果格式都是數字、名稱+空格這種模式,可以統一正則出來,('\d、\w+\s)
『伍』 用Python拆分EXCEL,一行一個表
EXCEL最多能有256個表吧。若能生成1000個表,也沒有使用價值。
想每一行單獨列印,可以用WORD的郵件功能。
『陸』 python處理excel完整版
**1.2.1 新建保存工作簿(覆蓋創建)
獲取當前活動工作表的:
以索引值方式獲取工作表:
以工作表名獲取: wb['工作表名'],注意,此表達方式為切片顯示,所以沒有成員提示。很少用
循環工作表:很好用,一般用sheetnames
獲取所有工作表名:wb.sheetnames
獲取指定工作表名
修改工作表名稱
新建工作表時的默認工作表名:
workbook.remove(工作表)
A1 表示法: 工作表['A1'] ,R1C1 表示法:工作表.cell(行號,列號)
2.工作表['起始行號': '結束行號']或者工作表['起始行號: 結束行號'],此方法是按行讀取的數據。
3.工作表['起始列號': '結束列號']或者工作表['起始列號: 結束列號'],
此方法是按列讀取的數據。
4.獲取(按行)指定工作表所有已用數據:
list(workbook.worksheets[索引值].values)
按行求和(方法 1)
按行求和(方法 )
按列統計平均值
按行獲取工作表使用區域數據:worksheet.rows
按列獲取工作表使用區域數據:worksheet.columns
獲取工作表中最小行號:worksheet.min_row
獲取工作表中最小列號:worksheet.min_column
獲取工作表中最大行號:worksheet.max_row
獲取工作表中最大列號:worksheet.max_column
獲取單元格的行號:cell.row
獲取單元格的列號:cell.column iter
方法獲取指定區域:
1.按行獲取指定工作表單元格區域:worksheet.iter_rows(……)
2.按列獲取指定工作表單元格區域:worksheet.iter_cols(……)
可以通過 min_row、min_col、max_col、max_row 這幾個參數進行單元格區域的控制
A1 表示法:工作表['A1']=值,R1C1 表示法:工作表.cell(行號,列號,值)
在最後一行寫入數據:工作表.append(列表)
1.10.2 實例應用(九九乘法表)
最後加一列寫優秀
『柒』 Python 拆分excel表內所有合並單元格
import openpyxl
from openpyxl.styles import PatternFill
workbook = openpyxl.load_workbook(r'C:\Users\Administrator\Desktop\user_info_format1.xlsx') # 載入已經存在的excel
name_list = workbook.sheetnames #獲取所有的sheet表名
worksheet = workbook[name_list[0]]
fill = PatternFill("solid", fgColor="FF0000") #設置填充樣式
m_list = worksheet.merged_cells # 合並單元格的位置信息,可迭代對象(單個是一個'openpyxl.worksheet.cell_range.CellRange'對象),print後就是excel坐標信息
cr = []
for m_area in m_list:
# 合並單元格的起始行坐標、終止行坐標。。。。,
r1, r2, c1, c2 = m_area.min_row, m_area.max_row, m_area.min_col, m_area.max_col
# 縱向合並單元格的位置信息提取出
if r2 - r1 > 0 or c2 - c1 > 0:
cr.append((r1, r2, c1, c2))
print('符合條件%s' % str(m_area))
#print(cr)
# 這里注意需要把合並單元格的信息提取出再拆分
for r in cr:
worksheet.unmerge_cells(start_row=r[0], end_row=r[1],
start_column=r[2], end_column=r[3])
if r[3]-r[2]==0: #單獨列合並
for row in (range(r[0], r[1]+1)):
worksheet.cell(row=row, column=r[3], value=worksheet.cell(r[0], r[2]).value)
worksheet.cell(row, column=r[3]).fill = fill #將對應拆分單元格填充顏色
elif r[1]-r[0]==0 : #單獨行合並
for column in (range(r[2], r[3]+1)):
worksheet.cell(row=r[1], column=column, value=worksheet.cell(r[0], r[2]).value)
worksheet.cell(row=r[0], column=column).fill = fill #將對應拆分單元格填充顏色
else : #多行、列合並
for row in (range(r[0], r[1]+1)):
for column in (range(r[2], r[3]+1)):
worksheet.cell(row, column, value=worksheet.cell(r[0], r[2]).value)
worksheet.cell(row, column).fill=fill #將對應拆分單元格填充顏色
workbook.save(r'C:\Users\Administrator\Desktop\data25.xlsx') #另存為新表
『捌』 Python帶格式拷貝excel表格(從A拷貝到B)
使用openpyxl包 從表A.xlsx 完全拷貝數據到表B.xlsx openpyxl這個包不支持xls格式的excel文件
如果A.xlsx中的數據有用到公式自動求和的,在讀取A.xlsx中的的數據的時候 需要
load_workbook(A.xlsx,data_only=True)這樣加第二個參數 只讀取數據否則讀出來的就是公式.
下面是重點如果A.xlsx中的表格帶有填充顏色 合並單元格字體格式 等等需要如下這樣做
myfile = A.xlsx
targFile = B.xlsx
wb = load_workbook(myfile,data_only=True)._sheets #原要拷貝單元格
wb2 = load_workbook(targFile) # 目標單元格
wr = wb[index]
ws = wb2._sheets[1]
# 兩個for循環遍歷整個excel的單元格內容
for i, row in enumerate(wr.iter_rows()):
for j, cell in enumerate(row):
ws.cell(row=i + 1, column=j + 1, value= cell.value) #拷貝數值
ws.cell(row=i + 1, column=j + 1).number_format=cell.number_format #拷數字格式
ws.cell(row=i + 1, column=j + 1).alignment = .(cell.alignment) #
ws.cell(row=i + 1, column=j + 1).font = .(cell.font) #拷貝字體
ws.cell(row=i + 1, column=j + 1).border = .(cell.border) #拷貝值
ws.cell(row=i + 1, column=j + 1).fill = .(cell.fill) #拷貝填充顏色
for merg in wr.merged_cells:
ws.merge_cells(str(merg)) #合並單元格
wb2.save(targFile)
這樣數據就能完美的從從A拷貝到B啦.格式樣式完全一樣.
但是 也有兩個我沒有攻克的問題 在這里說一下吧 希望有大佬能解決並告知在下 ,不勝感激
問題一 從表A中拷貝數據到表B以後 如果表B裡面也設置了對數據的公式計算,這個時候 如果不打開表B,直接再把表B裡面求和的數據 拷貝到表C的話 數值是拷貝不過去的.打開表C會發現沒有數值,我查了一些資料 好像是說 表B裡面的數 如果是像上面這樣拷貝過去然後通過公式直接計算的值 沒有保存上. 所以 要想把數值拷貝到C或者讀出來的話 ,需要手動打開表B然後,關閉的時候保存一下才可以.這是問題一. 因為我遇到了一個這樣的需求,需要連續拷貝從A拷到B,再把B裡面求和的數據拷到C.希望有大佬能夠指點一下
問題二就比較神奇了
我把表A裡面的數據拆分拷貝到了另外五個匯總的表格裡面,這五個其中有一個打開以後會報錯,顯示 excel文件格式錯誤.這五個表格在拷貝數據以前就已經存在了,那個時候打開都是沒有問題的,只有在拷貝完數據以後會報錯,我也不清楚具體的原因. 查了一些資料以後知道,excel表格其實是一種特殊的壓縮包,只要把後綴改成zip就可以打開這個壓縮文件,然後我找到報錯的那個文件,然後用這個報錯的文件和正常的文件裡面這個去做了對比,發現莫名其妙的多了一些東西,刪除掉以後再打開就正常了. 這也是我沒有解決的問題,希望有大佬能夠指點一二 具體的報錯 截圖 就是文章中附帶的截圖
『玖』 關於Excle表格如何拆分
首先,打開需要拆分單元格的Excel表格。