zoukankan      html  css  js  c++  java
  • Excel 导出指定行为txt文件(VBA,宏)

    要从Excel 多个sheet内导出指定行为txt文件,懒得用C#了,写个VBA宏

      1 Sub Export()
      2     Dim FileName As Variant
      3     Dim Sep As String
      4     Dim StartSheet As Integer
      5     Dim EndSheet As Integer
      6     
      7     Dim ExportIndex As Integer
      8     
      9     '文件名
     10     FileName = Application.GetSaveAsFilename(InitialFileName:=vbNullString, FileFilter:="Text Files (*.txt),*.txt")
     11     If FileName = False Then
     12         ''''''''''''''''''''''''''
     13         ' user cancelled, get out
     14         ''''''''''''''''''''''''''
     15         Exit Sub
     16     End If
     17     '分隔符
     18    ' Sep = Application.InputBox("Enter a separator character.", Type:=2)
     19     
     20     '开始Sheet
     21     'StartSheet = Application.InputBox("开始Sheet.", Type:=2)
     22     '结束Sheet
     23     EndSheet = Application.InputBox("结束Sheet.", Type:=2)
     24     
     25     '导出行
     26     ExportIndex = Application.InputBox("导出行号.", Type:=2)
     27    
     32     ShartSheet:=StartSheet, EndSheet:=EndSheet, ExportRow:=ExportIndex
     33      ExportRangeToTextFile FName:=CStr(FileName), SelectionOnly:=False, AppendData:=False, _
     34     ShartSheet:=1, EndSheet:=EndSheet, ExportRow:=ExportIndex
     35 End Sub
     36 
     37 
     38 
     39 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     40 ' 将Excel内多个Sheet中的某一行导出Text
     41 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     42 Public Sub ExportRangeToTextFile(FName As String, _
     43     SelectionOnly As Boolean, _
     44     AppendData As Boolean, ShartSheet As Integer, _
     45     EndSheet As Integer, ExportRow As Integer)
     46 
     47 Dim WholeLine As String
     48 Dim FNum As Integer
     49 Dim RowNdx As Long
     50 Dim ColNdx As Integer
     51 Dim StartRow As Long
     52 Dim EndRow As Long
     53 Dim StartCol As Integer
     54 Dim EndCol As Integer
     55 Dim CellValue As String
     56 Dim X As Variant
     57 
     58 Application.ScreenUpdating = False
     59 On Error GoTo EndMacro:
     60 FNum = FreeFile
     61  Open FName For Output Access Write As #FNum
     62 
     63 For i = 1 To Application.sheets.Count
     64     X = Application.sheets(i).UsedRange.Value
     65     WholeLine = ""
     66    With Application.sheets(i).UsedRange
     67         StartRow = .Cells(1).Row
     68         StartCol = .Cells(1).Column
     69         EndRow = .Cells(.Cells.Count).Row
     70         EndCol = .Cells(.Cells.Count).Column
     71     End With
     72     
     73     For j = 1 To EndCol
     74         WholeLine = WholeLine + X(ExportRow, j) + Chr("9") '	
     75     Next
     76     Print #FNum, WholeLine
     77 Next
     78     MsgBox "OK" '
     79 EndMacro:
     80 On Error GoTo 0
     81 Application.ScreenUpdating = True
     82 Close #FNum
     83 'XT = Application.Transpose(X)转置
     84 
     85 End Sub
     86 
     87 
     88 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     89 ' 导出单个sheet
     92 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     93 Public Sub ExportSingleSheetToTextFile(FName As String, _
     94     Sep As String, SelectionOnly As Boolean, _
     95     AppendData As Boolean)
     96 
     97 Dim WholeLine As String
     98 Dim FNum As Integer
     99 Dim RowNdx As Long
    100 Dim ColNdx As Integer
    101 Dim StartRow As Long
    102 Dim EndRow As Long
    103 Dim StartCol As Integer
    104 Dim EndCol As Integer
    105 Dim CellValue As String
    106 
    107 
    108 Application.ScreenUpdating = False
    109 On Error GoTo EndMacro:
    110 FNum = FreeFile
    111 
    112 If SelectionOnly = True Then
    113     With Selection
    114         StartRow = .Cells(1).Row
    115         StartCol = .Cells(1).Column
    116         EndRow = .Cells(.Cells.Count).Row
    117         EndCol = .Cells(.Cells.Count).Column
    118     End With
    119 Else
    120     With ActiveSheet.UsedRange
    121         StartRow = .Cells(1).Row
    122         StartCol = .Cells(1).Column
    123         EndRow = .Cells(.Cells.Count).Row
    124         EndCol = .Cells(.Cells.Count).Column
    125     End With
    126 End If
    127 
    128 If AppendData = True Then
    129     Open FName For Append Access Write As #FNum
    130 Else
    131     Open FName For Output Access Write As #FNum
    132 End If
    133 
    134 For RowNdx = StartRow To EndRow
    135     WholeLine = ""
    136     For ColNdx = StartCol To EndCol
    137         If Cells(RowNdx, ColNdx).Value = "" Then
    138             CellValue = Chr(34) & Chr(34)
    139         Else
    140            CellValue = Cells(RowNdx, ColNdx).Value
    141         End If
    142         WholeLine = WholeLine & CellValue & Sep
    143     Next ColNdx
    144     WholeLine = Left(WholeLine, Len(WholeLine) - Len(Sep))
    145     Print #FNum, WholeLine
    146 Next RowNdx
    147 
    148 EndMacro:
    149 On Error GoTo 0
    150 Application.ScreenUpdating = True
    151 Close #FNum
    152 
    153 End Sub
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' 将Excel内多个Sheet中的某一行导出New Sheet
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub ExportRangeToNewSheet(FName As String, _
        SelectionOnly As Boolean, _
        AppendData As Boolean, ShartSheet As Integer, _
        EndSheet As Integer, ExportRow As Integer)
    Dim FNum As Integer
    Dim RowNdx As Long
    Dim ColNdx As Integer
    Dim StartRow As Long
    Dim EndRow As Long
    Dim StartCol As Integer
    Dim EndCol As Integer
    Dim CellValue As String
    Dim X As Variant
    Dim Xsheet As Worksheet
    
    Set Xsheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    Xsheet.Name = FName 'Format(Now(), "HHmmss")
    
    Application.ScreenUpdating = False
    
    Dim index As Integer
     index = 1
    'For i = 1 To Application.Sheets.Count
    For i = ShartSheet To EndSheet 'Application.Sheets.Count
       With Application.Sheets(i).UsedRange
            EndCol = .Cells(.Cells.Count).Column
        For j = 1 To EndCol
            Xsheet.Cells(j, 2 * index - 1).Value = .Cells(1, j).Text
            Xsheet.Cells(j, 2 * index).Value = .Cells(ExportRow, j).Text
        Next
        End With
        index = index + 1
    Next
        MsgBox "导出OK,Sheet名" + FName '
    'XT = Application.Transpose(X)转置
    
    End Sub

     //从text文件导入Excel sheet里面

    Sub OpenFile()
    
     Dim filter As String
        Dim fileToOpen
       
        filter = "All Files(*.*),*.*,Word Documents(*.do*),*.do*," & _
                "Text Files(*.txt),*.txt"
        fileToOpen = Application.GetOpenFilename(filter, 4, "请选择文件")
       
        If fileToOpen = False Then
            MsgBox "你没有选择文件", vbOKOnly, "提示"
        Else
        
         ' Workbooks.Open FileName:=fileToOpen
         '   MsgBox "你选择的文件是:" & fileToOpen, vbOKOnly, "提示"
           With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;" + fileToOpen, Destination:=Range("$A$1") _
            )
            .Name = "Sample"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 437
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = True
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = True
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
        End If
    End Sub
    

      

    vba: Importing text file into excel sheet

    http://blog.csdn.net/ldwtill/article/details/8571781

    Using a QueryTable
    
    
    Sub Sample()
        With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;C:Sample.txt", Destination:=Range("$A$1") _
            )
            .Name = "Sample"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 437
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = True
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = True
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
    End Sub
    Open the text file in memory
    
    Sub Sample()
        Dim MyData As String, strData() As String
    
        Open "C:Sample.txt" For Binary As #1
        MyData = Space$(LOF(1))
        Get #1, , MyData
        Close #1
        strData() = Split(MyData, vbCrLf)
    End Sub
    Once you have the data in the array you can export it to the current sheet.
    
    Using the method that you are already using
    
    Sub Sample()
        Dim wbI As Workbook, wbO As Workbook
        Dim wsI As Worksheet
    
        Set wbI = ThisWorkbook
        Set wsI = wbI.Sheets("Sheet1") '<~~ Sheet where you want to import
    
        Set wbO = Workbooks.Open("C:Sample.txt")
    
        wbO.Sheets(1).Cells.Copy wsI.Cells
    
        wbO.Close SaveChanges:=False
    End Sub
    FOLLOWUP
    
    You can use the Application.GetOpenFilename to choose the relevant file. For example...
    
    Sub Sample()
        Dim Ret
    
        Ret = Application.GetOpenFilename("Prn Files (*.prn), *.prn")
    
        If Ret <> False Then
            With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;" & Ret, Destination:=Range("$A$1"))
    
                '~~> Rest of the code
    
            End With
        End If
    End Sub
    

      

  • 相关阅读:
    微信小程序-上传多张图片加进度条(支持预览、删除)
    php中120个内置函数
    angular6 NgModule中定义模块module
    Aliasing input/output properties
    angular6 Can't bind to 'zzst' since it isn't a known property of
    [转]DOM 中 Property 和 Attribute 的区别
    Angular6
    [转]VirtualBox 修改UUID实现虚拟硬盘复制
    pthread_create如何传递两个参数以上的参数
    linux 线程操作问题undefined reference to 'pthread_create'的解决办法(cmake)
  • 原文地址:https://www.cnblogs.com/senion/p/3660718.html
Copyright © 2011-2022 走看看