Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Excel电子表格中的每一行创建文本文件_Excel_File_Text_Rows - Fatal编程技术网

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

从Excel电子表格中的每一行创建文本文件,excel,file,text,rows,Excel,File,Text,Rows,我需要帮助从excel电子表格中的每一行创建单独的文本文件,称为“工作表”。我希望文本文件以A列的内容命名,B-G列为内容,最好在文本文件的每列之间有一个双硬回车,这样每列之间都有一个空行 这可能吗?我该怎么办呢。谢谢 附加的VBA宏将执行此操作,并将txt文件保存在C:\Temp中\ Sub WriteTotxt() Const forReading = 1, forAppending = 3, fsoForWriting = 2 Dim fs, objTextStream, sText A

我需要帮助从excel电子表格中的每一行创建单独的文本文件,称为“工作表”。我希望文本文件以A列的内容命名,B-G列为内容,最好在文本文件的每列之间有一个双硬回车,这样每列之间都有一个空行


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

附加的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

@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

为了他人的利益,我把问题解决了。我将“Chr(10)&Chr(10)”替换为“Chr(13)&Chr(10)”,它工作得非常好。

我使用下面的简单代码将excel行保存为文本文件或许多其他格式已有相当长的一段时间了,它一直适用于我。

子savemyrowsastext()
尺寸x

对于Sheet1.Range(“A1:A”和Sheet1.UsedRange.Rows.Count)中的每个单元格
'您可以将sheet1更改为您自己的选择
saveText=单元格。Text
打开“C:\wamp\www\GeoPC\u NG\sogistate\igala\u land\”&saveText&“.php”,输出为#1
打印#1,单元格。偏移量(0,1)。文本
关闭#1
对于x=1到3'循环3次。
“哔”的一声发出提示音。
下一个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\u NG\kogistate\igala\u land\
我的文件扩展名=.php,您可以根据自己的选择更改扩展名(.txt、.htm和.csv等) 我在每次保存结束时都加入了bip声音,以了解我的工作是否正在进行
尺寸x
对于x=1到3'循环3次。

“哔”的一声发出提示音。

您想用什么语言完成此任务?谢谢您的帮助。我可能做错了什么,但我得到了一个“下一个没有为”的错误。有什么想法吗?@nutsch我收到一个错误,上面写着“ActiveX组件无法创建对象”,我收到一个“400”错误。我确实有几个单元格在内容中是空白的。不确定这是否是原因。宏在a列中遇到空白单元格时停止(因为按照您的说明,文件名是空白的)。我从来没有遇到过400错误,我只是查了一下。有没有可能某些“空白”单元格实际上包含一串空格?还有,你用的是什么版本的Excel?奇怪,我在2010年测试过,没有问题。宏在出错之前是否写入任何文本文件?我编辑了以Do-Until开头的行,请使用新行尝试宏。我仍然收到相同的“400”错误。我确实看到它在一秒钟内为每个文本文件创建电子表格。“400”错误后打开的电子表格是第二行,其中包含A-G列中的文本。现在我认为问题的原因可能是通过第一列的内容命名它。如果按顺序编号命名文本文件如何?谢谢我做了一些轻微的编辑来创建新工作簿的特定引用,不确定它是否有用。你能把前几个单元格放在A列吗?它们可以作为有效的文件名吗?谢谢,这只做了一点小改动:打印#1,cell.Offset(0,1).Value2而不是打印#1,cell.Offset(0,1).Text。文本似乎只打印了前1025个字符,而不是整个字符text@Igalapedia但是如果您想在文本文件中包含列B>中的所有列作为内容转发,该怎么办?我将在哪里更改该变量?