吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8561|回复: 88
收起左侧

[原创工具] 【论坛互动案例2】Ecxel批量修改单元格(含python源码)

  [复制链接]
d8349565 发表于 2022-4-13 10:30
本帖最后由 d8349565 于 2022-4-13 11:44 编辑

Ecxel批量修改单元格

本系列软件制作都来自于论坛中悬赏及讨论涉及到的部分办公需求,你们的使用反馈是我坚持的动力。

源于论坛,付于论坛。

需求说明:

[资源求助] 同一文件夹下的多个excel文件的同一位置的批量修改工具

使用说明:

  1. 第一行输入单元格,如a2,A3,b4,C5,不区分大小写;
  2. 第二行输入需要写入或替换的内容(也可以是公式);
  3. Sheet1为默认处理的工作表,可按照需要修改;
  4. xlsx文件处理速度较快,xls文件处理稍慢。

打开界面

Luq7LD.png

设置并执行后的界面

LuqTsO.png

下载地址

https://leezfy.lanzouf.com/ixdi1033zq3g
密码:2783



[Python] 纯文本查看 复制代码
## 源码

```python
# -*- coding:utf-8 -*-
import wx
import openpyxl as vb
import os
import xlwings as xw

class Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title='Ecxel批量修改单元格 吾爱破解www.52pojie.cn', size=(580, 350),name='frame',style=541072384)
        icon = wx.Icon(r'./1.ico')
        self.SetIcon(icon)
        self.qdck = wx.Panel(self)
        self.Centre()
        self.bjk1 = wx.TextCtrl(self.qdck,size=(100, 40),pos=(20, 20),value='单元格,如A2',name='text',style=0)
        self.bjk2 = wx.TextCtrl(self.qdck,size=(100, 40),pos=(140, 20),value='单元格,如A2',name='text',style=0)
        self.bjk3 = wx.TextCtrl(self.qdck,size=(100, 40),pos=(260, 20),value='单元格,如A2',name='text',style=0)
        self.bjk6 = wx.TextCtrl(self.qdck,size=(100, 40),pos=(20, 80),value='替换文本',name='text',style=wx.TE_MULTILINE)
        self.bjk7 = wx.TextCtrl(self.qdck,size=(100, 40),pos=(140, 80),value='替换文本',name='text',style=wx.TE_MULTILINE)
        self.bjk8 = wx.TextCtrl(self.qdck,size=(100, 40),pos=(260, 80),value='替换文本',name='text',style=wx.TE_MULTILINE)
        self.an1 = wx.Button(self.qdck,size=(140, 40),pos=(400, 20),label='运行',name='button')
        self.an1.Bind(wx.EVT_BUTTON,self.an1_anbdj)
        self.sheet = wx.TextCtrl(self.qdck, size=(140, 40),pos=(400, 80), value='Sheet1', name='text',style=wx.TE_MULTILINE)
        self.msg = wx.TextCtrl(self.qdck, size=(520, 120), pos=(20, 150), value='请将Sheet1替换为你需要修改的excel文件中的工作表名称', name='text',
                                 style=wx.TE_MULTILINE)

    def an1_anbdj(self,event):
        self.msg.Clear()
        cell_list = [self.bjk1, self.bjk2, self.bjk3]
        text_list = [self.bjk6, self.bjk7, self.bjk8]
        self.set01 = zip(cell_list,text_list)
        self.sheet_name = self.sheet.GetValue()
        self.dict01 = {}
        for cell, text in self.set01:
            cell = cell.GetValue()
            text = text.GetValue()
            if '单元格' not in cell:
                self.dict01[cell] = text
        dir = wx.DirSelector('请选择需要处理的文件夹')
        file_list = list(os.scandir(dir))
        self.msg.Clear()
        for file in file_list:
            type = os.path.basename(file).split('.')[-1]
            if type == 'xlsx':
                self.revise(file)
            elif type == 'xls':
                self.revise_xls(file)
            else:
                pass
        print('an1,按钮被单击')

    def revise(self,file):
        try:
            wb = vb.load_workbook(file)
            ws = wb[self.sheet_name]
            for cell,text in self.dict01.items():
                ws[cell].value = text
            wb.save(os.path.abspath(file))
        except (KeyError, IndexError) as e:
            self.msg.AppendText(f'{file}出错:\n{e}')

        except IndexError as e:
            self.msg.AppendText(f'{file}出错:\n{e}')

        except Exception as e:
            self.msg.AppendText(f'{file}出错:\n{e}')

        else:
            self.msg.AppendText(f'{file}处理完成\n')

    def revise_xls(self,file):
        try:
            app = xw.App(visible=False, add_book=False)
            wb = app.books.open(file)
            sht = wb.sheets[self.sheet_name]
            for cell,text in self.dict01.items():
                rng = sht[cell]
                rng.value = text
            wb.save()
            wb.close()
            app.quit()

        except (KeyError, IndexError) as e:
            self.msg.AppendText(f'{file}出错:\n{e}')

        except IndexError as e:
            self.msg.AppendText(f'{file}出错:\n{e}')

        except Exception as e:
            self.msg.AppendText(f'{file}出错:\n{e}')

        else:
            self.msg.AppendText(f'{file}处理完成\n')

class myApp(wx.App):
    def  OnInit(self):
        self.frame = Frame()
        self.frame.Show(True)
        return True

if __name__ == '__main__':
    app = myApp()
    app.MainLoop()
```

免费评分

参与人数 11吾爱币 +17 热心值 +11 收起 理由
axin1234 + 1 + 1 谢谢@Thanks!
xlwllm + 1 + 1 我很赞同!
Leidus + 1 + 1 谢谢@Thanks!
woyucheng + 1 + 1 谢谢@Thanks!
nebula6543 + 1 + 1 用心讨论,共获提升!
lbwnba + 1 + 1 谢谢@Thanks!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
秋风君 + 1 + 1 谢谢@Thanks!
wellover + 1 + 1 我很赞同!
xxbuer + 1 + 1 热心回复!
Sotouch. + 1 + 1 目前还没啥需求,我觉得可以做一个工具集

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lizhipei78 发表于 2022-4-13 12:24
VBA代码更快,且功能更强大



Sub FunctionTransValue_Workbooks() '全部工作簿
    Dim strPath As String, sht As Worksheet
    Dim strWbName As String, wb As Workbook
    With Application.FileDialog(msoFileDialogFolderPicker) '获取文件夹路径
        If .Show Then strPath = .SelectedItems(1) & "\" Else Exit Sub
    End With
    On Error Resume Next
    With Application
        .ScreenUpdating = False '取消屏幕刷新
        .DisplayAlerts = False '取消警告信息
        .EnableEvents = False '取消事件
        .Calculation = xlCalculationManual '取消公式重算
        .AskToUpdateLinks = False '取消外链询问
    End With
    strWbName = Dir(strPath & "*.xls*")
    Do While strWbName <> "" 'dir语句遍历excel文件
        If strWbName <> ThisWorkbook.Name Then
            Set wb = Workbooks.Open(strPath & strWbName) '打开工作簿
            For Each sht In wb.Worksheets '遍历工作表公式转数值
                sht.UsedRange.Value = sht.UsedRange.Value    ‘这里设置你要的批量操作
            Next
            wb.Close True '保存关闭工作簿
        End If
        strWbName = Dir() '下一个excel文件
    Loop
    With Application '恢复系统设置
        .ScreenUpdating = True
        .DisplayAlerts = True
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
        .AskToUpdateLinks = True
    End With
    If Err.Number Then
        MsgBox Err.Description
    Else
        MsgBox "转换完成。"
    End If
End Sub

免费评分

参与人数 3吾爱币 +3 收起 理由
LILACLAKE + 1 谢谢@Thanks!
忘情的城市 + 1 用心讨论,共获提升!
d8349565 + 1 不会VBA,无法判断你的观点

查看全部评分

 楼主| d8349565 发表于 2022-4-13 11:44
yuping913 发表于 2022-4-13 10:31
meilanren 发表于 2022-4-13 10:32
工具不错 感谢楼主分享
虫子飞了 发表于 2022-4-13 10:34
好东西,很有用
Darkn1gh2 发表于 2022-4-13 10:37
歪蕊顾得,感谢分享
lostlosin 发表于 2022-4-13 10:37
本帖最后由 lostlosin 于 2022-4-13 10:39 编辑

打开就显示这个

Ecxel批量修改单元格Error
Failed to load image from file "C:\Users\Lee\AppData\Local\Programs\Python\Python38\Scripts\1.ico"

点开Details显示
can't open file'C:\Users\Lee\AppData\LocalPrograms\Python\Python:38\Scripts\1.ico'(error3:系统找不到指定的路径。)10:35:56
Failed to load image from file "C:\Users\Lee\AppData\LocalPrograms\Python\Python38\Scripts\1.ico". 10:35:56

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
d8349565 + 1 + 1 谢谢@Thanks!

查看全部评分

tidian 发表于 2022-4-13 10:39
谢谢分享,很好用
 楼主| d8349565 发表于 2022-4-13 10:50
lostlosin 发表于 2022-4-13 10:37
打开就显示这个

Ecxel批量修改单元格Error

已修复,请重新下载,更新了图标一起打包
我今天是大佬 发表于 2022-4-13 10:56
虽然不知道有什么用, 但是还是点赞吧
Spa495 发表于 2022-4-13 10:56
工具不错,下来看看
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 02:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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