【问题标题】:Create text Files from every row in an Excel spreadsheet从 Excel 电子表格中的每一行创建文本文件
【发布时间】:2012-10-16 04:14:42
【问题描述】:

我需要帮助从名为“工作表”的 Excel 电子表格中的每一行创建单独的文本文件。我希望以 A 列的内容命名文本文件,以 BG 列作为内容,最好在文本文件的每一列之间使用双硬返回,因此每一列之间都有一个空行。

这可能吗?我该怎么办。谢谢!

【问题讨论】:

  • 你想用什么语言来完成这个?

标签: excel file text rows


【解决方案1】:

@nutsch 的回答非常好,应该在 99.9% 的时间里都有效。在 FSO 不可用的极少数情况下,这里有一个没有依赖项的版本。照原样,它确实要求源工作表在内容部分中没有任何空白行。

Sub SaveRowsAsCSV()

Dim wb As Excel.Workbook, wbNew As Excel.Workbook
Dim wsSource As Excel.Worksheet, wsTemp As Excel.Worksheet
Dim r As Long, c As Long

    Set wsSource = ThisWorkbook.Worksheets("worksheet")

    Application.DisplayAlerts = False 'will overwrite existing files without asking

    r = 1
    Do Until Len(Trim(wsSource.Cells(r, 1).Value)) = 0
        ThisWorkbook.Worksheets.Add ThisWorkbook.Worksheets(1)
        Set wsTemp = ThisWorkbook.Worksheets(1)

        For c = 2 To 7
            wsTemp.Cells((c - 1) * 2 - 1, 1).Value = wsSource.Cells(r, c).Value
        Next c

        wsTemp.Move
        Set wbNew = ActiveWorkbook
        Set wsTemp = wbNew.Worksheets(1)
        'wbNew.SaveAs wsSource.Cells(r, 1).Value & ".csv", xlCSV 'old way
        wbNew.SaveAs "textfile" & r & ".csv", xlCSV 'new way
        'you can try other file formats listed at http://msdn.microsoft.com/en-us/library/office/aa194915(v=office.10).aspx
        wbNew.Close
        ThisWorkbook.Activate
        r = r + 1
    Loop

    Application.DisplayAlerts = True

End Sub

【讨论】:

  • 我收到“400”错误。 . .我确实有几个单元格在内容中是空白的。 . .不确定这是否是原因。
  • 宏在 A 列中遇到空白单元格时停止(因为按照您的说明,文件名是空白的)。我从来没有遇到过400错误,我只是查了一下。是否有可能其中一些“空白”单元格实际上包含一串空格?另外,您使用的是什么版本的 Excel?
  • 奇怪,我在 2010 年测试过,没有问题。宏是否在错误之前写入任何文本文件?我编辑了以 Do Until 开头的行,请尝试使用新行的宏。
  • 我仍然收到相同的“400”错误。我确实看到它“工作”为每个文本文件创建电子表格一秒钟。在“400”错误之后保持打开的电子表格是第二行,其中包含 A-G 列中的文本。现在我认为问题的原因可以通过第一列的内容来命名。 . .如果按序号命名文本文件怎么样?谢谢!
  • 我进行了一些细微的编辑以创建对新工作簿的特定引用,不确定它是否会有所帮助。您可以在 A 列中发布前几个单元格吗?它们可以作为有效的文件名吗?
【解决方案2】:

附加的 VBA 宏将执行此操作,将 txt 文件保存在 C:\Temp\

Sub WriteTotxt()

Const forReading = 1, forAppending = 3, fsoForWriting = 2
Dim fs, objTextStream, sText As String
Dim lLastRow As Long, lRowLoop As Long, lLastCol As Long, lColLoop As Long

lLastRow = Cells(Rows.Count, 1).End(xlUp).Row

For lRowLoop = 1 To lLastRow

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set objTextStream = fs.opentextfile("c:\temp\" & Cells(lRowLoop, 1) & ".txt", fsoForWriting, True)

    sText = ""

    For lColLoop = 1 To 7
        sText = sText & Cells(lRowLoop, lColLoop) & Chr(10) & Chr(10)
    Next lColLoop

    objTextStream.writeline (Left(sText, Len(sText) - 1))


    objTextStream.Close
    Set objTextStream = Nothing
    Set fs = Nothing

Next lRowLoop

End Sub

【讨论】:

  • 感谢您的帮助。我可能做错了什么,但我收到了“下一个没有 for”的错误。有什么想法吗?
  • @nutsch 我收到一条错误消息“ActiveX 组件无法创建对象”
【解决方案3】:

为了他人的利益,我把问题解决了。我用“Chr(13) & Chr(10)”替换了“Chr(10) & Chr(10)”,效果很好。

【讨论】:

    【解决方案4】:

    很长一段时间以来,我一直使用下面的简单代码将我的 excel 行保存为文本文件或许多其他格式,它一直对我有用。

    子 savemyrowsastext()
    暗色 x

    对于 Sheet1.Range("A1:A" & Sheet1.UsedRange.Rows.Count)
    中的每个单元格 ' 您可以将 sheet1 更改为您自己的选择
    saveText = cell.Text
    打开 "C:\wamp\www\GeoPC_NG\sogistate\igala_land\" & saveText & ".php" 输出为 #1
    打印 #1,cell.Offset(0, 1).Text
    关闭 #1
    For x = 1 To 3 ' 循环 3 次。
    Beep ' 发出提示音。
    下一个 x
    下一个单元格
    结束子

    注意:

    1. A1 列 = 文件标题
    2. B1 列 = 文件内容
    3. 直到包含文本的最后一行(即空行)

    以相反的顺序,如果你想这样;

    1. A1 列 = 文件标题
    2. A2 列 = 文件内容
    3. 直到最后一行包含文本(即空行),只需将 Print #1, cell.Offset(0, 1).Text 更改为 Print #1, cell.Offset(1, 0).Text

    我的文件夹位置 = C:\wamp\www\GeoPC_NG\kogistate\igala_land\
    我的文件扩展名 = .php,您可以将扩展名更改为您自己的选择(.txt、.htm 和 .csv 等) 我在每次保存结束时都添加了 bip 声音,以了解我的工作是否正在进行
    暗x
    For x = 1 To 3 ' 循环 3 次。
    Beep ' 发出提示音。

    【讨论】:

    • 谢谢,这做了一个小的改动:Print #1, cell.Offset(0, 1).Value2 而不是 Print #1, cell.Offset(0, 1).Text .似乎 .Text 只打印了前 1025 个字符而不是整个文本
    • @Igalapedia Project 但是,如果您想将列 B 中的所有列作为内容包含在文本文件中,该怎么办?我应该在哪里更改该变量?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 2015-07-15
    • 1970-01-01
    • 2019-04-30
    • 2021-08-04
    • 2013-11-15
    相关资源
    最近更新 更多