吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 345|回复: 8
上一主题 下一主题
收起左侧

[学习记录] Excel批量生成TXT(VBA)

[复制链接]
跳转到指定楼层
楼主
Lss666888 发表于 2026-7-15 10:50 回帖奖励
爽哥是因为需要批量生成TXT文件{:1_896:} ,但是每个TXT文件内容还不一样{:1_909:} ,我就想能不能制作一个Excel批量生成TXT{:1_918:} ,,爽哥就用豆包生成了函数架构:$qqq ,我自己在修改,支持按键一键生成,然后支持导出位置,文件为Excel表格,里面设置好VBA函数模块了

Sub Excel批量生成TXT()
'==================== 声明变量 ====================
Dim savePath As String
Dim lastRow As Long, lastCol As Long
Dim i As Long, j As Long
Dim fileName As String, fileContent As String
Dim fso As Object, stream As Object
Dim fileExist As VbMsgBoxResult
Dim successCount As Long, skipCount As Long, failCount As Long
Dim fd As FileDialog '文件夹选择对话框

'==================== 配置区(按需修改)====================
' 1. 保存路径模式:True=弹出对话框手动选文件夹  False=默认Excel同目录
Const useSelectFolder = True
' 2. 数据起始行:默认第1行是表头,从第2行开始生成文件;无表头则改为1
Const startRow = 2
' 3. 内容拼接模式:
'    模式1 = 同行B列及以后内容用分隔符拼接为1行
'    模式2 = 每个单元格内容单独占1行
Const contentMode = 1
' 4. 同行内容分隔符(仅模式1生效)
Const separator = vbTab
' 5. 遇到同名文件时:True=弹出提示确认是否覆盖,False=直接覆盖不提示
Const confirmOverwrite = True
' 6. B列之后无内容时:True=生成空TXT文件,False=跳过该行不生成文件
Const createEmptyFile = False
'============================================================

'关闭屏幕刷新/事件,大幅提升运行速度,避免卡顿
Application.ScreenUpdating = False
Application.EnableEvents = False

'创建文件操作对象
Set fso = CreateObject("Scripting.FileSystemObject")
Set stream = CreateObject("ADODB.Stream")

'初始化统计计数
successCount = 0
skipCount = 0
failCount = 0

'-------------------------- 选择保存目录 --------------------------
If ThisWorkbook.Path = "" Then
    MsgBox "请先将Excel文件保存到本地文件夹,再运行代码!", vbCritical, "错误"
    GoTo 恢复设置
End If

If useSelectFolder Then
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    With fd
        .Title = "请选择TXT文件存放文件夹"
        .InitialFileName = ThisWorkbook.Path '默认打开当前表格所在文件夹
        If .Show = -1 Then
            savePath = .SelectedItems(1) & "\"
        Else
            '用户点击【取消】,直接退出过程,不生成任何文件
            MsgBox "您未选择保存文件夹,本次操作已终止,不会生成TXT文件", vbInformation
            Set fd = Nothing
            GoTo 恢复设置
        End If
    End With
    Set fd = Nothing
Else
    savePath = ThisWorkbook.Path & "\"
End If

'确保保存路径存在,不存在则自动创建
If Not fso.FolderExists(savePath) Then
    fso.CreateFolder savePath
    MsgBox "已自动创建保存文件夹:" & savePath, vbInformation, "提示"
End If

'获取A列最后一行有数据的行号
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
If lastRow < startRow Then
    MsgBox "未找到符合条件的A列姓名数据,请检查起始行配置!", vbExclamation, "提示"
    GoTo 恢复设置
End If

'-------------------------- 主循环:批量生成文件 --------------------------
For i = startRow To lastRow
    '1. 处理文件名(A列)
    fileName = Trim(Cells(i, "A").Value)
    If fileName = "" Then
        skipCount = skipCount + 1
        GoTo 下一行
    End If

    '过滤Windows文件名非法字符(半角+全角)
    Dim badChars As Variant
    badChars = Array("\", "/", ":", "*", "?", """", "<", ">", "|", "\", "/", ":", "*", "?", "<", ">", "|")
    For Each c In badChars
        fileName = Replace(fileName, c, "")
    Next c

    fileName = savePath & fileName & ".txt"

    '2. 处理文件内容(B列及以后)
    fileContent = ""
    lastCol = Cells(i, Columns.Count).End(xlToLeft).Column

    If lastCol < 2 Then
        If createEmptyFile Then
            fileContent = ""
        Else
            skipCount = skipCount + 1
            GoTo 下一行
        End If
    Else
        Select Case contentMode
            Case 1
                For j = 2 To lastCol
                    fileContent = fileContent & Trim(Cells(i, j).Value) & separator
                Next j
                fileContent = Left(fileContent, Len(fileContent) - Len(separator))
            Case 2
                For j = 2 To lastCol
                    fileContent = fileContent & Trim(Cells(i, j).Value) & vbCrLf
                Next j
                fileContent = Left(fileContent, Len(fileContent) - 2)
        End Select
    End If

    '3. 同名文件覆盖判断
    If confirmOverwrite And fso.FileExists(fileName) Then
        fileExist = MsgBox("文件已存在:" & fileName & vbCrLf & "是否覆盖?", vbYesNoCancel + vbQuestion, "确认覆盖")
        Select Case fileExist
            Case vbYes
            Case vbNo
                skipCount = skipCount + 1
                GoTo 下一行
            Case vbCancel
                GoTo 循环结束
        End Select
    End If

    '4. UTF-8写入文件
    On Error Resume Next
    stream.Charset = "UTF-8"
    stream.Mode = 3
    stream.Open
    stream.WriteText fileContent
    stream.SaveToFile fileName, 2
    stream.Close

    If Err.Number = 0 Then
        successCount = successCount + 1
    Else
        failCount = failCount + 1
        MsgBox "文件写入失败:" & fileName & vbCrLf & "错误:" & Err.Description, vbCritical
    End If
    On Error GoTo 0

下一行:
Next i
循环结束:

'结果弹窗
MsgBox "TXT文件生成任务完成!" & vbCrLf & vbCrLf & _
       "✅ 成功生成:" & successCount & " 个" & vbCrLf & _
       "⏭️ 已跳过:" & skipCount & " 个" & vbCrLf & _
       "❌ 生成失败:" & failCount & " 个", vbInformation, "任务完成"

恢复设置:
Application.ScreenUpdating = True
Application.EnableEvents = True
Set stream = Nothing
Set fso = Nothing
End Sub

2026-07-15_102931-tic.png (74.02 KB, 下载次数: 0)

VBA表格界面

VBA表格界面

2026-07-15_103431-tic.png (55.25 KB, 下载次数: 0)

TXT文本批量生成

TXT文本批量生成

2026-07-15_103025-tic.png (45.9 KB, 下载次数: 0)

VBA代码界面

VBA代码界面

2026-07-15_103304-tic.png (46.89 KB, 下载次数: 0)

TXT文本

TXT文本

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

沙发
 楼主| Lss666888 发表于 2026-7-15 10:51 |楼主
为什么上传后表情包  显示符号呢
3#
 楼主| Lss666888 发表于 2026-7-15 10:55 |楼主
VBA代码 我整体放到帖子里面了   有喜欢的可以自己在修改
4#
jiang1232 发表于 2026-7-15 13:55
可能更多的还是一个xls由多个sheet组成,每个sheet输出一个文本。只需要改改就行,增加sheet的遍历和循环就行
5#
ruanyb0721 发表于 2026-7-15 15:16
谢谢楼主分享。
6#
wjbedu 发表于 2026-7-15 15:27
Excel批量生成TXT,有什么作用吗
7#
 楼主| Lss666888 发表于 2026-7-15 15:30 |楼主
jiang1232 发表于 2026-7-15 13:55
可能更多的还是一个xls由多个sheet组成,每个sheet输出一个文本。只需要改改就行,增加sheet的遍历和循环就 ...

我感觉在一个sheet表里方便一些, 第一列是生成TXT文本的昵称,注明昵称不能重复,第二列是文本内容,内容自己设置即可
8#
 楼主| Lss666888 发表于 2026-7-15 15:32 |楼主
wjbedu 发表于 2026-7-15 15:27
Excel批量生成TXT,有什么作用吗

当然了,方便节省时间成本啊,正常咱们一个个创建TXT文件昵称,和编辑里面内容,太需要消耗时间了吧
9#
owen2000wy 发表于 2026-7-15 16:37
还有这么好的东西?!链接复制了,我也弄一下试试!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2026-7-16 06:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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