Excel提取文件信息方法总结

发表于2016-04-28
评论0 4.6k浏览

excel中(xls或者启动宏的工作表)中 alt +f11打开代码窗口

下面是一些常用代码:

 

1判断工作表是否存在,不存在则添加工作表

 For i = 1 To Sheets.Count

    If Sheets(i).Name = "Comparison" Then

    k = 1

    'MsgBox "此工作表存在"

    End If

    Next i

   

    If k = 0 Then

    'MsgBox "此工作表不存在"

    Sheets.Add After:=Sheets(Sheets.Count)

    ActiveSheet.Name = "Comparison"

End If

 

2提取plist文件,并按照一列排布在excel

这里可以用在所有能用txt打开的文件,如lua等,步骤如下:

              录制宏,插入文件plist,断开连接

              录制宏,选择A1ctrl+shift+ctrl+shift+,定位条件:空置,删除(单元格右移)

              结合两个宏即达到提取Plist文件的效果(新建一个文件夹放置Plist内容)

              Eg

    Sub link_soul()

  ‘避免表格已存在的情况  

    For i = 1 To Sheets.Count

    If Sheets(i).Name = "Comparison" Then

    k = 1

    'MsgBox "此工作表存在"

    End If

    Next i

  

    If k = 0 Then

    'MsgBox "此工作表不存在"

    Sheets.Add After:=Sheets(Sheets.Count)

    ActiveSheet.Name = "Comparison"

    End If

   

              plist内容放入前先清空一下,避免重叠

 Sheets("Comparison").Range("a:a").ClearContents

    

‘录制宏出现的代码

    Sheets("Comparison").Select

    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Plist_dress, Destination:=Range("$A$1"))

            .Name = Plist_name & ".plist"

            .FieldNames = True

            .RowNumbers = False

            .FillAdjacentFormulas = False

            .PreserveFormatting = True

            .RefreshOnFileOpen = False

            .RefreshStyle = xlInsertDeleteCells

            .SavePassword = False

            .SaveData = True

            .AdjustColumnWidth = True

            .RefreshPeriod = 0

            .TextFilePromptOnRefresh = False

            .TextFilePlatform = 936

            .TextFileStartRow = 1

            .TextFileParseType = xlDelimited

            .TextFileTextQualifier = xlTextQualifierDoubleQuote

            .TextFileConsecutiveDelimiter = False

            .TextFileTabDelimiter = True

            .TextFileSemicolonDelimiter = False

            .TextFileCommaDelimiter = False

            .TextFileSpaceDelimiter = False

            .TextFileColumnDataTypes = Array(1)

            .TextFileTrailingMinusNumbers = True

            .Refresh BackgroundQuery:=False

        End With

        '这里要注意一下.断开连接,否则改动会保存到plist文件中;断开连接后,改动的数据不会对原文件造成影响

        ActiveWorkbook.Connections(Plist_name).Delete

                            plist内容提取到一列,方便提取信息

        Selection.CurrentRegion.Select

        Selection.SpecialCells(xlCellTypeBlanks).Select

        Selection.Delete Shift:=xlToLeft

 

End Sub

             

3plist数据存入数组,下一步依次检验是否是需要的数据

Dim arr_Comparison

Dim arr_Num As Long

‘统计一共有多少项

    arr_Num=Range(Sheets("Comparison").Range("A1"),Sheets("Comparison").Range("A1").End(xlDown)).Count

‘装入数据 

    arr_Comparison=Range(Sheets("Comparison").Range("A1"),Sheets("Comparison").Range("A1").End(xlDown))

‘重新定义数组

ReDim Preserve arr_Comparison(1 To arr_Num, 1 To 1)

 

在用完数组之后,记得释放数组内存,否则运行次数多了,文件会崩溃。

释放数据是 Earse  arr_Comparison

 

4select case 语句逐语句判断是否是自己需要的内容,如果需要,则进入提取数据的流程。这是提前把数据存在数组中的好处之一,可以用变量i进行逐个判断,且不用再次调用单元格,提高运行速度。

 

Eg

Select Case arr_Comparison(i, 1)

        '关卡序号,不得已才用《》,正常应是<>

   CaseIs = "《key》LevelID《key》"

            进入plist文件下一行(下一行是数据)

             i = i + 1

           提取数据

   Sheets("Record").Cells(Record_row_num, 1 + 1) = Mid(arr_Comparison(i, 1), 9,Len(arr_Comparison(i, 1)) - 17)

                            重复判断

                            Case is

                           

           End Select

 

              提取数据中以下代码较为有用

                            Y= Mid(X, a, Len(X) - b)

              ab代表常数;

              x代表待提取的字符;

              Y代表需要的信息。

              Eg:

              x= 5000

              Y=Mid(x, 9, Len(x) - 17)

              Y=5000

             

5用完之后删除放置plist的表格(下一个重复的步骤)

                 Sub link_soul_delete()

                  Application.DisplayAlerts = False

                               Sheets("Comparison").Select

                              ActiveWindow.SelectedSheets.Delete

                  Application.DisplayAlerts = ture '避开确定删除文件

                            End Sub

              ‘解释:Application.DisplayAlerts是为了规避删除中表格弹出二次确认框。

 

6、依次按照plist列表顺序提取文件,如果文件不存在,则提示文件未找到

 

Public Record_row_num As Long

Public Plist_name As String, Plist_dress As String

 

Sub main()

 

Sheets("Record").Range("2:1000").ClearContents’删除内容

 

'record 数据表中的行号,将用在Analysis_plist

Record_row_num = 2


Application.ScreenUpdating = False

 

Do Until Sheets("Plist_name").Cells(Record_row_num, 1) = ""

    '依据列表打开文件

    Plist_name = Sheets("Plist_name").Cells(Record_row_num, 1)

    Plist_dress = ThisWorkbook.Path & "¥待提取plist文件¥" & Plist_name & ".plist"

   

     On Error GoTo AAA 如果报错则跳转AAA语句

   

    '打开plist文件(这些是自己写的子过程)

    Call link_soul

    Call Analysis_plist

    '用完之后干掉文件

Call link_soul_delete

 

'异常情况中断代码Record_row_num < 0代表该情况永远不会发生AAA语句可以跳转过来)

If Record_row_num < 0 Then

AAA:

    Sheets("Plist_name").Select

'打开屏幕更新(与开头Application.ScreenUpdating = false对称

Application.ScreenUpdating = True

    MsgBox ("plist文件夹中未找到" & Plist_name)

End If


进入下一行,继续判断

Record_row_num = Record_row_num + 1

Loop

 

Application.ScreenUpdating = ture

End Sub

             

              这里有用的是异常情况中断的处理。

 

7有了文件名,提取图片,放置在单元格中

这个可以用作提取项目的一堆图标到excel表格中。如装备,掉落物,截图等

 

Sub put_into()

Dim x As Integer

 

x = 待提取文件名

P_look.Cells(1, 1)代表需要放入的单元格这一步是先提取单元格的尺寸再把图片尺寸修改成合适的大小

ah = P_look.Cells(1, 1).Height

aw = P_look.Cells(1, 1).Width

 al = P_look.Cells(1, 1).Left

    ap = P_look.Cells(1, 1).Top

    '尚未加入其它处理

    P_look.Pictures.Insert(ThisWorkbook.Path & "¥文件名¥" & x & ".jpeg").Select

With Selection

看需求处理

    .Top = ap + 5

    .Left = al + 17.5

    .Width = aw * 3

    .Height = ah * 12.5

    End With

    Next

Next

x = 0

ah = 0

aw = 0

at = 0

al = 0

End Sub

 

8、判断当前文件夹的某文件是否存在

这个是与7相关的,判断它是否存在。

              ThisWorkbook.Path 这个是表示找到当前工作簿的位置,比较有用

              name= ThisWorkbook.Path & xxx

              If dir(name)=”” then

              Msgbox当前名称不存在

              Endif

 

9、提取当前文件夹下的用户名

这个也是与7相关的。

Sub get_name()

    i = 1

    Name_path = ThisWorkbook.Path & ""

    Name_file = Dir(Name_path)

    Do While file <> ""

        Cells(i, 1) = Name_file

        i = i + 1

        file = Dir

    Loop

End Sub

 

10、批量更改名称

              7的基础上,A列已经提取好目录下的名称,在B列放入需要修改的名称

              则用name方法即可达到这一目的。

Dim OldName, NewName

OldName = "OLDFILE": NewName = "NEWFILE"    ' 定义文件名。

Name OldName As NewName    ' 更改文件名。

 

OldName = "C:MYDIROLDFILE": NewName = "C:YOURDIRNEWFILE"

Name OldName As NewName    ' 更改文件名,并移动文件。

 

 

11、删除图标中的所有形状

方便一次性删除图片(插入图片后批量清空有用)

              Sheet1.drawingobject.delete

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引