从Excel电子表格中的每一行创建文本文件

5
我需要帮助从名为“worksheet”的Excel电子表格的每一行创建单独的文本文件。我希望文本文件的名称是A列的内容,B-G列是文本文件的内容,最好在文本文件中每个列之间有双硬回车,因此每个列之间将有一个空行。
这是否可行?我该如何操作呢?谢谢!

1
你想用什么语言来完成这个任务? - Seth Battin
4个回答

3
附加的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循环的下一个”错误。有什么想法吗? - user1775582
@nutsch 我遇到了一个错误,提示“ActiveX 组件无法创建对象”。 - Daniel Fowler

3

@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”错误……我的内容中确实有几个单元格是空的……不确定这是否可能是原因。 - user1775582
当宏遇到A列中的空单元格时停止(因为根据您的说明,文件名为空)。我从未遇到过400错误,我刚刚查了一下。这些“空白”单元格中是否可能包含一串空格字符串?另外,您使用的Excel版本是什么? - ExactaBox
奇怪,我在2010年测试过,没有问题。宏在出错之前是否会写任何文本文件?我编辑了以Do Until开头的行,请尝试使用新行运行宏。 - ExactaBox
我仍然遇到相同的“400”错误。我看到它正在为每个文本文件创建电子表格,持续一秒钟左右。在“400”错误后保留打开的电子表格是第二行,其中包含A-G列中的文本。现在我认为问题的原因可能是按照第一列的内容进行命名...如果按顺序号命名文本文件呢?谢谢! - user1775582
太棒了……它运行成功了。当它遇到第一个A列没有内容的条目时就停止了。对于其他列中没有信息的行,它可以正常工作。现在我只需要在那些缺失的A列条目中添加一些文本,然后就可以顺利进行了。谢谢! - user1775582
显示剩余4条评论

2

为了让其他人受益,我解决了这个问题。我用"Chr(13) & Chr(10)"替换了"Chr(10) & Chr(10)",结果完美解决。


2

我已经使用以下简单的代码将我的Excel行保存为文本文件或其他格式相当长的时间了,它一直为我工作。

子句savemyrowsastext()
Dim 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
对于x = 1到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声音以知道我的工作正在进行中
Dim x
对于x = 1到3 '循环3次。
Beep '发出声音。


谢谢,这个做了一点小修改就可以了:Print #1, cell.Offset(0, 1).Value2,而不是Print #1, cell.Offset(0, 1).Text。看起来.Text只打印了前1025个字符,而没有打印整个文本。 - Nickey
@Igalapedia 项目,但是如果您想将所有列从列 B > 向前包含为文本文件中的内容,该变量应该在哪里更改? - Steve C.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接