每100行数据创建1个文本文件

时间:2014-07-24 07:42:26

标签: excel vba excel-vba spread

让我们说:

  1. 我在Excel电子表格中有1,000行独立信息。 (1列,1,000行)

  2. 我想将每100行保存为自己的文件名。 (workbook1.txtworkbook2.txtworkbook3.txt等。)

  3. 目前,我手动执行此操作:

    • 我将突出显示100行。
    • 我使用 Control + C (复制) 然后 Control + N (新)创建一个新文件,然后 Control + V (粘贴)然后< kbd>控制 + S 要保存文件, 使用 Control + N 时使用默认名称命名文件,因此它将保存为workbook1workbook2,{{1} } ...

    我将它们保存为文本文件(.txt)。

    是否可以自动执行此过程,可能是bat文件或什么?

3 个答案:

答案 0 :(得分:1)

您可以使用简单的VBA脚本,如:

Dim counter As Integer
counter = 0
Do While counter < 10
Range("A1:A100").Select
Selection.Copy
Sheets("Sheet2").Select
ActiveSheet.Paste
ActiveWorkbook.SaveAs Filename:="C:\test" & CStr(counter) & ".txt", _
    FileFormat:=xlTextMSDOS, CreateBackup:=False
Sheets("Sheet1").Select
Range("A101:A1000").Select
Selection.Cut
Range("A1").Select
ActiveSheet.Paste
counter = counter + 1
Loop

另存为xlTextMSDOS只保存活动工作表,因此您不必创建新工作簿。

答案 1 :(得分:0)

如果您可以访问Linux系统,那么有一个名为“split”的命令行实用程序就是这样做的: 将文本文件拆分为N个文件(行,字节,单词)。

cat original_file.csv | split -l 1000

答案 2 :(得分:0)

有时,将所有内容复制到新工作表中并删除您不希望保留的内容会更容易。 Worksheet.Copy method到任意位置都会打开一个包含单个工作表的新空白工作簿;这是原件的副本。

Sub split_100()
    Dim i As Long, lr As Long, fn As String

    'Application.ScreenUpdating = false 'uncomment when it works right for you

    With Worksheets("Sheet1")
        lr = .Cells(Rows.Count, 1).End(xlUp).Row
        For i = 1 To lr Step 100
            .Copy
            With ActiveWorkbook
                With .Worksheets(1)
                    If i > 1 Then _
                        .Cells(1, 1).Resize(i - 1, 1).EntireRow.Delete
                    .Cells(101, 1).Resize(lr, 1).EntireRow.Delete
                End With
                fn = Environ("TMP") & "\Workbook" & Format(Int(i / 100) + 1, "00") 'no extension; leave that for xlTextWindows
                'Application.DisplayAlerts = False  'uncomment to avoid overwrite warnings
                .SaveAs Filename:=fn, FileFormat:=xlTextWindows
                .Close SaveChanges:=False
            End With
        Next i
    End With

    Application.ScreenUpdating = True
End Sub

删除不需要的内容后,Workbook.SaveAs method会将周期设为Workbook.Close。有许多TXT格式可供选择,上面使用xlTextWindows xlFileFormat。