2012-10-25 61 views
3

我需要幫助從名爲「工作表」的Excel電子表格中的每行創建單獨的文本文件。我希望文本文件以列A的內容命名,列B-G是內容,最好是在文本文件中的每列之間使用雙重硬返回,因此每列之間將有一個空行。從Excel電子表格中的每一行創建文本文件

這可能嗎?我將如何去做。謝謝!

+1

在什麼語言你想做到這一點? –

回答

2

@ 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 
+0

我收到一個「400」錯誤的錯誤。 。 。我確實有一些內容中空白的單元格。 。 。不知道這是否是原因。當它遇到A列中空白單元(因爲這樣的文件名是空白的,按照您的指示) – user1775582

+0

宏停止。我從來沒有遇到400錯誤,我只是查了一下。這些「空白」單元中是否有可能實際上包含一串空格?另外,您使用的是什麼版本的Excel? – ExactaBox

+0

我運行Excel 2010中 – user1775582

1

所附的VBA宏將做到這一點,節省在C txt文件:\ 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 
+0

感謝您的幫助。我可能做錯了什麼,但我得到了「下一個沒有」的錯誤。有任何想法嗎? – user1775582

+0

@nutsch我收到寫着「ActiveX組件不能創建對象」 – danfo

1

爲了別人的利益,我將問題排序了出來。我用「Chr(13)& Chr(10)」代替了「Chr(10)& Chr(10)」,它的工作完美。

2

我用了下面的簡單代碼將我的excel行作爲文本文件或許多其他格式保存很長一段時間,它一直爲我工作。

子savemyrowsastext()
昏暗X

爲每個小區在Sheet1.Range( 「A1:A」 & Sheet1.UsedRange.Rows.Count)
'可以工作表Sheet1更改爲自己選擇
SAVETEXT = cell.Text
打開 「C:\瓦帕\ WWW \ GeoPC_NG \ sogistate \ igala_land \」 & SAVETEXT & 「.PHP」 以便輸出爲#1
印刷#1,cell.Offset(0, 1).Text
關閉#1
對於x = 1至3'循環3次。
嘟嘟'聽起來很有聲調。
下一個x
接着細胞
結束子

注:

1.柱A1 =文件標題
2.柱B1 =文件內容
3.直到包含文本的最後一行(即空行)

以相反的順序,如果你想使它像這樣;

1.柱A1 =文件標題
2.柱A2 =文件內容
3.直到包含文本的最後一行(即空行),只是改變印刷#1,cell.Offset(0, 1)。文本印刷#1,cell.Offset(1,0)。文本

我的文件夾位置= C:\瓦帕\ WWW \ GeoPC_NG \ kogistate \ igala_land \
我的文件extension = .php,你可以改變擴展名到你自己的選擇(.txt,.htm &。CSV等) 我包括在每個儲蓄結束BIP聲音知道如果我的工作是在
點心去X
當x = 1〜3'循環3次。
嘟嘟'聽起來很有聲調。

+0

謝謝,這個工作做了一些小的改動:打印#1,cell.Offset(0,1).Value2而不是Print#1,cell.Offset(0,1).Text。看起來.Text只打印了第一個1025字符,而不是整個文本 – Nickey

+0

@Ialadala項目但是如果你想包含列B>所有列作爲文本文件中的內容?我會在哪裏更改該變量? –

相關問題