吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5548|回复: 51
上一主题 下一主题
收起左侧

[Windows] Excel Workbook Merger - 专业版及增加Excel多文件合并VBA

  [复制链接]
跳转到指定楼层
楼主
yptkyp 发表于 2026-4-20 11:19 回帖奖励
本帖最后由 yptkyp 于 2026-4-20 16:11 编辑

此工具将合并多个Excel文件到一个新工作簿的多个工作表中保持源文档(有点不足就是excl文档里的图片合并不进去)
下载地址
通过网盘分享的文件:ExcelMerger_6.exe
链接: https://pan.baidu.com/s/1NB4OALM0R9rRrHRenmmAWw?pwd=52pj 提取码: 52pj
增加excl宏,将合并多个Excel文件到一个新工作簿的多个工作表中保持源文档(有点不足就是wps可以完美使用,office还是图片不可以)
通过网盘分享的文件:Excel多文件合并VBA1.xlsm
链接: https://pan.baidu.com/s/1-WTNR3Kx6TN_ZZ3eWfGXIA?pwd=52pj 提取码: 52pj

image.png (38.57 KB, 下载次数: 2)

帮助

帮助

image.png (25.41 KB, 下载次数: 0)

名称

名称

image.png (39.04 KB, 下载次数: 1)

Excel多文件合并VBA1.xlsm

Excel多文件合并VBA1.xlsm

免费评分

参与人数 7吾爱币 +5 热心值 +6 收起 理由
chenshishi + 1 + 1 我很赞同!
sxf6688 + 1 谢谢@Thanks!
dogox + 1 + 1 我很赞同!
naixubao + 1 + 1 谢谢@Thanks!
b19341 + 1 + 1 谢谢@Thanks!
haotian319 + 1 谢谢@Thanks!
cd1688 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

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

推荐
Mzhang2008 发表于 2026-4-20 11:41
开始没有下载链接,所以才问的,感谢分享  帮你传个  蓝奏 免登陆  https://wwasa.lanzoue.com/iBp6G3no9xtc
密码:gq8e

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
manman1226 + 1 + 1 热心回复!

查看全部评分

推荐
 楼主| yptkyp 发表于 2026-6-3 07:55 |楼主
ma77507 发表于 2026-5-20 17:06
# 请修改这一行为您的文件夹路径
$folder = "E:\0-2资料打印\"

# PowerShell 合并Excel脚本 逐行精准翻译+完整解释
我为你**逐行精准翻译**这段代码的含义,同时用通俗语言解释功能,完整还原脚本逻辑:

```powershell
# 请修改这一行为您的文件夹路径
$folder = "E:\0-2资料打印\"
```
**翻译**:定义一个变量`$folder`,存储需要合并Excel文件的**目标文件夹路径**,你需要手动修改这里的路径。

```powershell
if (-not (Test-Path $folder)) {
    Write-Host "文件夹不存在!请修改脚本中的 `$folder 路径" -ForegroundColor Red
    Read-Host "按回车键退出"
    exit
}
```
**翻译**:
1. 判断指定的文件夹**是否不存在**
2. 如果不存在,用**红色文字**提示:文件夹不存在!请修改脚本中的文件夹路径
3. 提示按回车键退出脚本,然后终止运行

```powershell
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false
```
**翻译**:
1. 调用系统的Excel组件,创建一个Excel应用程序对象
2. 设置Excel窗口**不可见**(后台运行)
3. 关闭Excel的弹窗警告(避免弹出保存/覆盖提示)

```powershell
$outputWB = $excel.Workbooks.Add()
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
$outputPath = (Get-Item $folder).Parent.FullName + "\Merged_Result_$timestamp.xlsx"
$outputWB.SaveAs($outputPath)
```
**翻译**:
1. 创建一个**全新的空白工作簿**(最终合并文件)
2. 获取当前系统时间,格式化为:年月日_时分秒
3. 生成合并后的文件保存路径:保存在目标文件夹的**上一级目录**,文件名为`Merged_Result_时间戳.xlsx`
4. 保存这个新建的空白工作簿

```powershell
$sheetCount = 0
$fileCount = 0
$hiddenCount = 0
```
**翻译**:初始化3个统计变量:
- `$sheetCount`:最终合并的工作表总数
- `$fileCount`:处理的Excel文件总数
- `$hiddenCount`:跳过的隐藏工作表总数

```powershell
Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host "开始合并Excel文件" -ForegroundColor Cyan
Write-Host "========================================`n" -ForegroundColor Cyan
```
**翻译**:在控制台输出**青蓝色**的分割线和文字:开始合并Excel文件

```powershell
Get-ChildItem $folder -Include *.xls, *.xlsx -Recurse | ForEach-Object {
```
**翻译**:
1. 遍历目标文件夹(包括子文件夹)
2. 筛选出所有`.xls`和`.xlsx`格式的Excel文件
3. 对每一个文件执行后续操作

```powershell
    $fileCount++
    Write-Host " 【$($_.Name)】" -ForegroundColor White -BackgroundColor DarkBlue
    Write-Host "   路径: $($_.FullName)" -ForegroundColor Gray
```
**翻译**:
1. 处理文件数+1
2. 用**白字深蓝底**显示当前处理的文件名
3. 用灰色文字显示文件完整路径

```powershell
    $inputWB = $excel.Workbooks.Open($_.FullName)
```
**翻译**:打开当前遍历到的Excel文件

```powershell
    $visibleSheetsInThisFile = @()
    $hiddenSheetsInThisFile = @()
```
**翻译**:定义两个空数组,分别存储**当前文件的可见工作表**和**隐藏工作表**

```powershell
    foreach ($sheet in $inputWB.Worksheets) {
```
**翻译**:遍历当前Excel文件中的**每一个工作表**

```powershell
        if ($sheet.Visible -eq -1) {
```
**翻译**:判断工作表**是否为可见状态**(Excel中可见值为-1)

```powershell
            # 复制工作表
            $sheet.Copy([System.Type]::Missing, $outputWB.Sheets($outputWB.Sheets.Count))
```
**翻译**:将可见的工作表**复制**到合并后的总文件末尾

```powershell
            $sheetName = $_.BaseName + "_" + $sheet.Name
            if ($sheetName.Length -gt 31) { $sheetName = $sheetName.Substring(0, 31) }
```
**翻译**:
1. 新工作表命名规则:**原文件名_原工作表名**
2. Excel工作表名最长31个字符,超出则自动截取前31位

```powershell
            # 处理重名
            $newSheet = $outputWB.Sheets($outputWB.Sheets.Count)
            $finalName = $sheetName
            $counter = 1
            while ($true) {
                try {
                    $newSheet.Name = $finalName
                    break
                } catch {
                    $finalName = $sheetName + "_$counter"
                    $counter++
                }
            }
```
**翻译**:
1. 自动处理**工作表重名问题**
2. 如果名称重复,自动在末尾加`_1、_2、_3`依次命名

```powershell
            $sheetCount++
            $visibleSheetsInThisFile += $sheet.Name
            Write-Host "    已合并: $($sheet.Name)" -ForegroundColor Green
```
**翻译**:
1. 合并工作表总数+1
2. 记录当前可见工作表名称
3. 绿色文字提示:已合并XX工作表

```powershell
        } else {
            $hiddenCount++
            $hiddenSheetsInThisFile += $sheet.Name
            Write-Host "    跳过隐藏: $($sheet.Name)" -ForegroundColor DarkGray
        }
    }
```
**翻译**:
1. 如果工作表是**隐藏状态**,则跳过不合并
2. 跳过的隐藏工作表总数+1
3. 深灰色文字提示:跳过隐藏XX工作表

```powershell
    # 显示本文件的汇总
    Write-Host "    本文件汇总: 合并 $($visibleSheetsInThisFile.Count) 个, 跳过隐藏 $($hiddenSheetsInThisFile.Count) 个" -ForegroundColor Cyan
    Write-Host ""  # 空行分隔
```
**翻译**:青蓝色文字显示**单个文件处理结果**:合并X个,跳过隐藏X个

```powershell
    $inputWB.Close($false)
}
```
**翻译**:关闭当前打开的Excel文件(不保存修改),继续处理下一个文件

```powershell
# 删除默认的空白工作表
while ($outputWB.Sheets.Count -gt 1) {
    if ($outputWB.Sheets(1).Name -ne "Sheet1") { break }
    $outputWB.Sheets(1).Delete()
}
```
**翻译**:删除新建Excel默认生成的空白Sheet1工作表(只保留合并过来的内容)

```powershell
$outputWB.Save()
$outputWB.Close()
$excel.Quit()
```
**翻译**:
1. 保存合并完成的总文件
2. 关闭总文件
3. 退出Excel应用程序

```powershell
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
```
**翻译**:释放Excel组件占用的系统资源(防止后台残留Excel进程)

```powershell
Write-Host "========================================" -ForegroundColor Green
Write-Host " 合并完成!" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Green
Write-Host " 统计信息:" -ForegroundColor Yellow
Write-Host "   处理文件数: $fileCount" -ForegroundColor Cyan
Write-Host "   合并工作表数: $sheetCount" -ForegroundColor Cyan
Write-Host "   跳过隐藏表: $hiddenCount" -ForegroundColor DarkGray
Write-Host "   保存位置: $outputPath" -ForegroundColor Yellow
Write-Host "========================================" -ForegroundColor Green
```
**翻译**:输出**绿色/黄色**的最终结果统计:
- 合并完成
- 处理了多少个Excel文件
- 合并了多少个工作表
- 跳过了多少个隐藏工作表
- 合并后文件的保存路径

```powershell
Read-Host "`n按回车键退出"
```
**翻译**:暂停脚本,提示按回车键退出窗口

---

### 总结
这段脚本的**核心功能**:
1. 批量合并**指定文件夹(含子文件夹)**内所有Excel文件
2. **只合并可见工作表**,自动跳过隐藏工作表
3. 自动处理工作表**重名、超长名称**问题
4. 生成带时间戳的合并文件,保存在原文件夹上级目录
5. 完整展示处理过程和统计结果,后台运行无弹窗
3#
Mzhang2008 发表于 2026-4-20 11:22
4#
 楼主| yptkyp 发表于 2026-4-20 11:30 |楼主
Mzhang2008 发表于 2026-4-20 11:22
是分享还是宣传啊

是分享,有需要的可以下载使用
5#
ak47tok8 发表于 2026-4-20 11:49
谢谢分享啊,工作中经常会有这样场景,需要合并多个EXCEL到一个总表上
6#
zhaojiehu123 发表于 2026-4-20 11:55
感谢分享,工作需要合并多个工作表时非常有用
7#
vminghuav 发表于 2026-4-20 12:07
刚刚下载了,但是打不开
8#
haotian319 发表于 2026-4-20 12:15
这个要下载,谢谢分享,给你加分
9#
宜城小站 发表于 2026-4-20 12:47
已下载,普通使用就行,谢谢
10#
zuq001 发表于 2026-4-20 12:57
没必要,豆包写串vba跑一下就可以了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2026-6-7 01:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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