鱼C论坛

 找回密码
 立即注册
查看: 4706|回复: 21

python excel 合并问题?

[复制链接]
发表于 2022-7-11 09:08:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 任申猴 于 2022-7-11 14:06 编辑

有三张excel表,每张表里面有一个工作表

有三张excel表

有三张excel表
,三个excel共有三张工作表A,B,C。并且每个表格式内容都不一样 附页截图.png (类似这种但长度宽度不一样)
想要把这三个excel的工作表合成一个新的excel,并且A工作表在sheet1  B在sheet2  C在sheet3中
用了openpyxl  复制出来  ,要么格式不对。要么合成出来把前面复制过去的工作表覆盖了


求大哥帮帮忙

QQ图片20220711140551.png QQ图片20220711140622.png
QQ图片20220711140614.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-11 09:58:58 From FishC Mobile | 显示全部楼层

回帖奖励 +2 鱼币

无代码无真相
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-11 11:14:58 | 显示全部楼层

回帖奖励 +2 鱼币

思路:
先创建新 xlsx 格式文件
寻找若干其它 xlsx 的文件
然后将它们一一复制进新的 xlsx 文件 sheets 页面里
最后储存

代码:
import os
import openpyxl

cwd = os.path.abspath('') # 路径
files = os.listdir(cwd) # 一堆各种格式的文件

n = 0 # 初始 0(用来创建新页面 sheets)
new_wb = openpyxl.Workbook() # 新 xlsx 格式文件

for file in files:
    if file.endswith('.xlsx'): # 寻找 xlsx 格式文件
        wb = openpyxl.load_workbook(file)  # 打开文件
        ws = wb.worksheets[0] # 这里我把它当作全部 xlsx 文件只有一页 sheets
        new_ws = new_wb.create_sheet(f"sheet {n}", n) # 新 xlsx 文件里的页面 sheet,因为我懒的取名,所以用号码 0、1、2 ... 替代
        n += 1 # 页面增加

        ROW = ws.max_row # 横向边界
        COLUMN = ws.max_column # 竖向边界

        for i in range(1, ROW + 1):
            for j in range(1, COLUMN + 1):
                CELL = ws.cell(row = i, column = j)  # 原文件的内容
                new_ws.cell(row = i, column = j).value = CELL.value # 复制去新文件里
        
new_wb.save("C.xlsx") # 储存
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-11 14:03:11 | 显示全部楼层
傻眼貓咪 发表于 2022-7-11 11:14
思路:
先创建新 xlsx 格式文件
寻找若干其它 xlsx 的文件

FileNotFoundError: [Errno 2] No such file or directory: '封面.xlsx'
我明明输入的是绝对路径,不知道为什么会报这个错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-11 14:06:13 | 显示全部楼层
任申猴 发表于 2022-7-11 14:03
FileNotFoundError: [Errno 2] No such file or directory: '封面.xlsx'
我明明输入的是绝对路径,不知 ...

可以试试测试路径是否正确:
import os

cwd = os.path.abspath('')
files = os.listdir(cwd)

print(files)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-11 14:08:32 | 显示全部楼层
傻眼貓咪 发表于 2022-7-11 14:06
可以试试测试路径是否正确:

路径是正确的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-11 14:13:46 | 显示全部楼层

路径正确应该不会出现问题的,代码报错明显是指向路径不对,你的代码有吗?
绝对路径的斜杠对吗?有 '/' 和 '\' 两种
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-11 14:17:04 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2022-7-11 14:18 编辑


我知道了,你的路径写错了,斜杠写反了(不能和电脑一样
正确应该是:"C:/Users/admin/Desktop/1"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-11 14:27:33 | 显示全部楼层
傻眼貓咪 发表于 2022-7-11 14:17
我知道了,你的路径写错了,斜杠写反了(不能和电脑一样)
正确应该是:"C:/Users/admin/Desktop/1"

我都试过了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-11 14:28:14 | 显示全部楼层
傻眼貓咪 发表于 2022-7-11 14:13
路径正确应该不会出现问题的,代码报错明显是指向路径不对,你的代码有吗?
绝对路径的斜杠对吗?有 '/' ...

import os
import openpyxl

cwd = os.path.abspath(r'C:/Users/admin/Desktop/1')  # 路径

files = os.listdir(cwd)  # 一堆各种格式的文件

n = 0  # 初始 0(用来创建新页面 sheets)
new_wb = openpyxl.Workbook()  # 新 xlsx 格式文件

for file in files:
    if file.endswith('.xlsx'):  # 寻找 xlsx 格式文件
        wb = openpyxl.load_workbook(file)  # 打开文件
        ws = wb.worksheets[0]  # 这里我把它当作全部 xlsx 文件只有一页 sheets
        new_ws = new_wb.create_sheet(f"sheet {n}", n)  # 新 xlsx 文件里的页面 sheet,因为我懒的取名,所以用号码 0、1、2 ... 替代
        n += 1  # 页面增加

        ROW = ws.max_row  # 横向边界
        COLUMN = ws.max_column  # 竖向边界

        for i in range(1, ROW + 1):
            for j in range(1, COLUMN + 1):
                CELL = ws.cell(row=i, column=j)  # 原文件的内容
                new_ws.cell(row=i, column=j).value = CELL.value  # 复制去新文件里

new_wb.save("test.xlsx")  # 储存
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-11 14:30:19 | 显示全部楼层
任申猴 发表于 2022-7-11 14:28
import os
import openpyxl

C:\Users\admin\PycharmProjects\flask_test\venv\Scripts\python.exe C:/Users/admin/PycharmProjects/flask_test/222.py
['封面.xlsx', '附页.xlsx', '首页.xlsx']

进程已结束,退出代码0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-11 14:32:37 | 显示全部楼层
任申猴 发表于 2022-7-11 14:30
C:%users\admin\PycharmProjects\flask_test\venv\Scripts\python.exe C:/Users/admin/PycharmProjects/f ...
import os
import openpyxl

cwd = os.path.abspath('C:/Users/admin/Desktop/1') # 路径
files = os.listdir(cwd) # 一堆各种格式的文件

n = 0 # 初始 0(用来创建新页面 sheets)
new_wb = openpyxl.Workbook() # 新 xlsx 格式文件

for file in files:
    if file.endswith('.xlsx'): # 寻找 xlsx 格式文件
        wb = openpyxl.load_workbook(file)  # 打开文件
        ws = wb.worksheets[0] # 这里我把它当作全部 xlsx 文件只有一页 sheets
        new_ws = new_wb.create_sheet(f"sheet {n}", n) # 新 xlsx 文件里的页面 sheet,因为我懒的取名,所以用号码 0、1、2 ... 替代
        n += 1 # 页面增加

        ROW = ws.max_row # 横向边界
        COLUMN = ws.max_column # 竖向边界

        for i in range(1, ROW + 1):
            for j in range(1, COLUMN + 1):
                CELL = ws.cell(row = i, column = j)  # 原文件的内容
                new_ws.cell(row = i, column = j).value = CELL.value # 复制去新文件里
        
new_wb.save("C.xlsx") # 储存
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-11 14:36:15 | 显示全部楼层

不加r嘛,还是不行是。。。。这是不是我的环境有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-11 14:38:24 | 显示全部楼层
任申猴 发表于 2022-7-11 14:36
不加r嘛,还是不行是。。。。这是不是我的环境有问题

好吧,那就加吧,可能我的电脑优化了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-11 14:39:39 | 显示全部楼层
任申猴 发表于 2022-7-11 14:36
不加r嘛,还是不行是。。。。这是不是我的环境有问题

TQ@K(7)$$)_35ZLRH)34.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-11 14:42:25 | 显示全部楼层
傻眼貓咪 发表于 2022-7-11 14:38
好吧,那就加吧,可能我的电脑优化了

除了这种办法合成,还有其它办法嘛,人都整麻了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-11 14:48:05 | 显示全部楼层
任申猴 发表于 2022-7-11 14:42
除了这种办法合成,还有其它办法嘛,人都整麻了

我能想到的就只有这种办法了,主要不是 Python 问题,而是 excel 格式问题,从逻辑上看,每个 Workbook 都有自己的 sheet,而且可以不止一个,假设存在某种函数可以直接将诺干个 Workbook 分别组合在不同的 sheet 里,那么当其中某个 Workbook 有多个 sheet 呢?唯一办法就是自己编写函数吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-11 14:51:08 | 显示全部楼层
傻眼貓咪 发表于 2022-7-11 14:48
我能想到的就只有这种办法了,主要不是 Python 问题,而是 excel 格式问题,从逻辑上看,每个 Workbook  ...

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-11 14:54:20 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-11 22:18:41 | 显示全部楼层

回帖奖励 +2 鱼币

本帖最后由 cflying 于 2022-7-11 22:23 编辑

只要选对库也就几行代码的事情,这种事情肯定最适合的库绝对是xlwings
import xlwings as xw
app=xw.App(visible=False,add_book=False)


file='3.xlsx'
exfile='test.xlsx'
wb1 = app.books.open(file)
wb2 = app.books.open(exfile)

ws1 = wb1.sheets[0]
ws1.api.Copy(Before=wb2.sheets[len(wb2.sheets)-1].api)
wb2.save()
wb1.close()
wb2.close()
app.kill()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 13:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表