View difference between Paste ID: 81iHJ5C8 and v4GgDteY
SHOW: | | - or go back to the newest paste.
1
Option Explicit On
2-
Imports Access = Microsoft.Office.Interop.Access
2+
3
Imports Word = Microsoft.Office.Interop.Word
4
Imports System.IO
5-
Imports PowerPoint = Microsoft.Office.Interop.PowerPoint
5+
Imports System.Collections.Generic
6
Imports Microsoft.Office.Interop.Excel
7
Imports System.Drawing
8
Imports System.Text.RegularExpressions
9
Imports System.ComponentModel
10
Imports Microsoft.Win32
11
12
Public Class Form1
13
14
    Dim filename As String
15
16
#Region "Functions"
17
18
    Public Function SaveTextToFile(ByVal strData As String, _
19
     ByVal FullPath As String, _
20
       Optional ByVal ErrInfo As String = "") As Boolean
21
22
23
        Dim bAns As Boolean = False
24
        Dim objReader As StreamWriter
25
        Try
26
27
28
            objReader = New StreamWriter(FullPath)
29
            objReader.Write(strData)
30
            objReader.Close()
31
            bAns = True
32
        Catch Ex As Exception
33
            ErrInfo = Ex.Message
34
35
        End Try
36-
        Dim oExcel As Excel.ApplicationClass
36+
        Return bAns
37-
        Dim oBook As Excel.WorkbookClass
37+
38
    Public Function DelFromRight(ByVal sChars As String, ByVal sLine As String) As String
39
        'Removes unwanted characters from right of given string
40
        ' EXAMPLE
41
        '  MsgBox DelFromRight(" TEST", "THIS IS A TEST")
42
        'displays "THIS IS A"
43
44
45
46
        sLine = ReverseString(sLine)
47
        sChars = ReverseString(sChars)
48
        sLine = DelFromLeft(sChars, sLine)
49
        DelFromRight = ReverseString(sLine)
50
        Exit Function
51
52
53
    End Function
54
55
    Public Function DelFromLeft(ByVal sChars As String, _
56
            ByVal sLine As String) As String
57
58
        ' Removes unwanted characters from left of given string
59
        '  EXAMPLE
60
        '      MsgBox DelFromLeft("THIS", "THIS IS A TEST")
61
        '        displays  "IS A TEST"
62
63
64
        Dim iCount As Integer
65
        Dim sChar As String
66-
        Dim OFD As New OpenFileDialog
66+
67-
        With OFD
67+
        DelFromLeft = ""
68-
            .ShowDialog()
68+
        ' Remove unwanted characters to left of folder name
69-
            filename = .FileName
69+
        If InStr(sLine, sChars) > 0 Then
70-
            PathTb.Text = .FileName
70+
            For iCount = 1 To Len(sChars)
71-
        End With
71+
                ' Retrieve character from start string to 
72
                'look for in folder string (sLine)
73
                sChar = Mid$(sChars, iCount, 1)
74
                ' Remove all characters to left of found string
75
                sLine = Mid$(sLine, InStr(sLine, sChar) + 1)
76-
        Dim oWord As Word.ApplicationClass
76+
77
            Next iCount
78
        End If
79-
        'Start Word and open the document.
79+
        DelFromLeft = sLine
80-
        If Path.GetExtension(sFile) = ".xlsx" Then
80+
        Exit Function
81-
            MsgBox("You can not open files with extension .xlsx in Word")
81+
82-
        Else
82+
83-
            oWord = CreateObject("Word.Application")
83+
84-
            oWord.Visible = True
84+
    Public Function ReverseString(ByVal InputString As String) _
85-
            oWord.Documents.Open(sFile)
85+
      As String
86
87
        'If you have vb6, you can use
88
        'StrReverse instead of this function
89
90
        Dim lLen As Long, lCtr As Long
91
        Dim sChar As String
92
        Dim sAns As String = ""
93-
        Shell("EXCEL.EXE /s /r " & """" & sFile & """", AppWinStyle.NormalFocus)
93+
94
        lLen = Len(InputString)
95
        For lCtr = lLen To 1 Step -1
96
            sChar = Mid(InputString, lCtr, 1)
97
            sAns = sAns & sChar
98
        Next
99
100
        ReverseString = sAns
101
102
    End Function
103
    Private Function ReadExeFromResources(ByVal filename As String) As Byte()
104
        Dim CurrentAssembly As Reflection.Assembly = Reflection.Assembly.GetExecutingAssembly()
105
        Dim Resource As String = String.Empty
106
        Dim ArrResources As String() = CurrentAssembly.GetManifestResourceNames()
107
        For Each Resource In ArrResources
108
            If Resource.IndexOf(filename) > -1 Then Exit For
109-
                MsgBox("Excel completed file level validation and repair. Some parts of this workbook may have been repaired or discarded.")
109+
110
        Dim ResourceStream As IO.Stream = CurrentAssembly.GetManifestResourceStream(Resource)
111
        If ResourceStream Is Nothing Then
112
            Return Nothing
113
        End If
114
        Dim ResourcesBuffer(CInt(ResourceStream.Length) - 1) As Byte
115
        ResourceStream.Read(ResourcesBuffer, 0, ResourcesBuffer.Length)
116
        ResourceStream.Close()
117
        Return ResourcesBuffer
118
    End Function
119
120
121
#End Region
122
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
123
124
        Dim oExcel As Excel.Application
125-
        If File.Exists("C:\Program Files\Microsoft Office\Office12\XLVIEW.EXE") Then
125+
        Dim oBook As Excel.Workbook
126-
            Shell("XLVIEW.EXE /s /r " & """" & sFile & """", AppWinStyle.NormalFocus)
126+
127-
        Else
127+
128-
            MsgBox("You Have Not Downloaded The Microsoft Excel Viewer. Select The Destination to Save the file." & vbNewLine & "Please install it after download")
128+
129-
            Dim SFa As New SaveFileDialog
129+
130
        'Start Excel and open the workbook.
131-
            SFa.Filter = "Executable Files|*.Exe"
131+
132-
            SFa.ShowDialog()
132+
133
        oExcel.Visible = True
134-
            My.Computer.Network.DownloadFile("http://download.microsoft.com/download/e/a/9/ea913c8b-51a7-41b7-8697-9f0d0a7274aa/ExcelViewer.exe", SFa.FileName)
134+
135
        oBooks = oExcel.Workbooks
136
        oBook = oBooks.Open(sFile)
137
138
        oExcel.Run("OpenAndRepairWorkbook")
139
140
        ' Clean-up: Close the workbook and quit Excel.
141
        oBook.Close(False)
142
        System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook)
143
        oBook = Nothing
144
        System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks)
145
        oBooks = Nothing
146
        oExcel.Quit()
147
        System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel)
148
        oExcel = Nothing
149
150
        GC.Collect()
151
    End Sub
152
    Dim counterVariable As Integer
153-
            oWB = oBooks.Open(Filename:=sFile, CorruptLoad:=XlCorruptLoad.xlExtractData)
153+
    Dim previousVersionCounterVariable As Integer
154
    Dim sFileShadowPath As String
155
    Dim sFileShadowName As String
156
    Dim sFileShadowPathDate As String
157
    Dim matchCount As Integer
158
    Dim shadowLinkFolderName As New List(Of String)
159
    Dim nonErrorShadowPathList As New List(Of String)
160
    Dim comboBoxIndex As Integer = 0
161-
        Me.Close()
161+
    Dim preVersionHashTable As New Hashtable
162
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
163
        Try
164
            Dim OFD As New OpenFileDialog
165
            With OFD
166
167
                .ShowDialog()
168
                filename = .FileName
169
                PathTb.Text = .FileName
170
            End With
171
            Dim sFile As String = PathTb.Text
172
            shadowLinkFolderName.Clear()
173
            nonErrorShadowPathList.Clear()
174
            ComboBox1.Items.Clear()
175
            'Find out the number of vss shadow snapshots (restore 
176
            'points). All shadows apparently have a linkable path 
177
            '\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy#,
178
            'where # is a simple one or two or three digit integer.
179
180
            Dim objProcess As New Process()
181
            objProcess.StartInfo.UseShellExecute = False
182
            objProcess.StartInfo.RedirectStandardOutput = True
183
            objProcess.StartInfo.CreateNoWindow = True
184
            objProcess.StartInfo.RedirectStandardError = True
185
            objProcess.StartInfo.FileName() = "vssadmin"
186
            objProcess.StartInfo.Arguments() = "List Shadows"
187
            objProcess.Start()
188
189
            Dim vssadminOutput As String = objProcess.StandardOutput.ReadToEnd
190
            Dim strError As String = objProcess.StandardError.ReadToEnd()
191
            objProcess.WaitForExit()
192
193
            ' Call Regex.Matches method.
194
            Dim matches As MatchCollection = Regex.Matches(vssadminOutput, _
195
                "\\\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy[0-9]+")
196
            counterVariable = 0
197
            matchCount = matches.Count
198
            MsgBox("Please wait while Excel Recovery searches for previous versions of your file.")
199
            ' Loop over matches.
200
            For Each m As Match In matches
201
                Dim driveLetter As String = sFile.Substring(0, 2)
202
                shadowLinkFolderName.Add("C:\" & DelFromLeft( _
203
                    "\\?\GLOBALROOT\Device\HarddiskVolume", (m.ToString())))
204
                sFileShadowPath = (shadowLinkFolderName(counterVariable) & DelFromLeft( _
205
                    driveLetter, sFile))
206
207
                'Here I create temporary folders off the C: 
208
                'drive which are mapped to each snapshot.
209
                Dim myProcess As New Process()
210
                myProcess.StartInfo.FileName = "cmd.exe"
211-
        Dim oExcel As Excel.ApplicationClass
211+
                myProcess.StartInfo.UseShellExecute = False
212-
        Dim oBook As Excel.WorkbookClass
212+
                myProcess.StartInfo.RedirectStandardInput = True
213
                myProcess.StartInfo.RedirectStandardOutput = True
214
                myProcess.StartInfo.CreateNoWindow = True
215
                myProcess.Start()
216
                Dim myStreamWriter As StreamWriter = myProcess.StandardInput
217
218
                myStreamWriter.WriteLine("mklink /d " & (shadowLinkFolderName(counterVariable).ToString) _
219
                                        & " " & (m.ToString()) & "\")
220
                myStreamWriter.Close()
221-
        oExcel.Calculation = Excel.XlCalculation.xlCalculationManual
221+
                myProcess.WaitForExit()
222
                myProcess.Close()
223
224
                'Here I compare our recovery target file against the shadow 
225
                'copies. One shadow file copy is compared for each iteration 
226
                'of the loop. If the string "no difference encountered is found" 
227
                'then I know this shadow copy of the file is not worth looking 
228
                'at, as it is the same as the recovery target.
229
                Dim fileCompare As New Process()
230
                fileCompare.StartInfo.FileName = "cmd.exe"
231
                fileCompare.StartInfo.UseShellExecute = False
232
                fileCompare.StartInfo.RedirectStandardInput = True
233
                fileCompare.StartInfo.RedirectStandardOutput = True
234
                fileCompare.StartInfo.CreateNoWindow = True
235
                fileCompare.Start()
236
                Dim fileCompareWriter As StreamWriter = fileCompare.StandardInput
237
238-
                MsgBox("Excel completed file level validation and repair. Some parts of this workbook may have been repaired or discarded.")
238+
                fileCompareWriter.WriteLine("fc """ & sFile & """ """ _
239
                                & sFileShadowPath & """")
240
                fileCompareWriter.Dispose()
241
                fileCompareWriter.Close()
242
                Dim fileCompareReader As StreamReader = fileCompare.StandardOutput
243
                Dim fileCompareOut As String = fileCompareReader.ReadToEnd
244
                fileCompareReader.Close()
245
                fileCompare.WaitForExit()
246
                fileCompare.Close()
247
                Dim fileCompareBoolean As Boolean = fileCompareOut.Contains( _
248
                                "no differences encountered").ToString
249
                Dim fileCompBooleanError As Boolean = fileCompareOut.Contains( _
250
                                "FC: cannot open").ToString
251-
    Private Sub Label2_Click(sender As System.Object, e As System.EventArgs) Handles Label2.Click
251+
                If fileCompBooleanError = "True" Then
252
                    counterVariable = counterVariable + 1
253
                    Continue For
254
                End If
255-
    Private Sub PictureBox9_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox9.Click
255+
256-
        Dim oExcel As Excel.ApplicationClass
256+
                If fileCompareBoolean = "True" Then
257-
        Dim oBook As Excel.WorkbookClass
257+
                    counterVariable = counterVariable + 1
258
                    Continue For
259
                End If
260
                'Here I take a positive result of a file difference between
261
                'the target and the shadow copy, and I write it out to a combo 
262-
        oBook = oExcel.Workbooks.Add
262+
                'box on the form, so it can be chosen. I also only keep the 
263
                'first instance of a different shadow file as the others are 
264-
        oBook.Activate()
264+
                'identical. I distinguish if they are the same by date.
265-
        oExcel.Calculation = Excel.XlCalculation.xlCalculationAutomatic
265+
266-
        oExcel.Range("A1").Value = "=" & "'" & sFile & "'" & "!A1"
266+
267
                Dim sFileShadowPathInfo As New FileInfo(sFileShadowPath)
268-
        Dim rRange As Range
268+
                sFileShadowPathDate = sFileShadowPathInfo.LastWriteTime
269
                sFileShadowName = sFileShadowPathInfo.Name
270-
        On Error Resume Next
270+
271
                If ComboBox1.Items.Count = 0 Then
272-
        oExcel.DisplayAlerts = False
272+
                    ComboBox1.Items.Add("File Name: " & sFileShadowName _
273
                                                            & " Last Modified: " & sFileShadowPathDate)
274-
        rRange = oExcel.InputBox(Prompt:= _
274+
                    nonErrorShadowPathList.Add(sFileShadowPath)
275-
            "Please select a range similar in size to your corrupt data that you wish to recover.", _
275+
                    preVersionHashTable.Add(sFileShadowPathDate, sFileShadowPath)
276-
                Title:="SPECIFY RANGE", Type:=8)
276+
                    counterVariable = counterVariable + 1
277
                    Continue For
278-
        On Error GoTo 0
278+
                End If
279
280-
        oExcel.DisplayAlerts = True
280+
                previousVersionCounterVariable = ComboBox1.Items.Count - 1
281
                Dim previoussFileShadowPath As String
282-
        If rRange Is Nothing Then
282+
                previoussFileShadowPath = nonErrorShadowPathList(previousVersionCounterVariable)
283
                Dim prevsFileShadowPathInfo As New FileInfo(previoussFileShadowPath)
284-
            Exit Sub
284+
                Dim prevsFileShadowPathDate As String = prevsFileShadowPathInfo.LastWriteTime
285
286-
        Else
286+
                If String.Equals(sFileShadowPathDate, prevsFileShadowPathDate) Then
287-
            oExcel.Range("A1").Copy()
287+
                    counterVariable = counterVariable + 1
288-
            oBook.ActiveSheet.Paste(rRange)
288+
                    Continue For
289
                Else
290
                    ComboBox1.Items.Add("File Name: " & sFileShadowName _
291
                                                            & " Last Modified: " & sFileShadowPathDate)
292
                    nonErrorShadowPathList.Add(sFileShadowPath)
293-
    Private Sub PictureBox10_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox10.Click
293+
                    preVersionHashTable.Add(sFileShadowPathDate, sFileShadowPath)
294-
        Dim oExcel As New Excel.Application
294+
                    counterVariable = counterVariable + 1
295-
        Dim oBooks As Excel.Workbooks = Nothing
295+
                    Continue For
296-
        Dim oBook As Workbook = Nothing
296+
                End If
297-
        Dim oWSheet As Worksheet = Nothing
297+
298
            Next m
299-
        Dim sFileName As String = Path.GetFileNameWithoutExtension(sFile)
299+
            MsgBox("Processing has finished and should have returned previous versions, if they exist.")
300-
        Dim sDirName As String = Path.GetDirectoryName(sFile)
300+
301-
        Dim sFileSylkName As String = sDirName & "\" & sFileName & ".slk"
301+
302
        End Try
303
    End Sub
304-
        oExcel.Visible = False
304+
305
    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox3.Click
306-
        oBook = oBooks.Open(Filename:=sFile)
306+
307-
        oWSheet = oBook.ActiveSheet()
307+
            Dim TargetKey As RegistryKey
308-
        oWSheet.SaveAs(Filename:=sFileSylkName, FileFormat:=Excel.XlFileFormat.xlSYLK)
308+
            TargetKey = Registry.ClassesRoot.OpenSubKey("word.application")
309-
        If File.Exists(sFileSylkName) Then
309+
310-
            oBook.Close()
310+
            If TargetKey Is Nothing Then
311
                MsgBox("Opening an Excel file in Word requires Word, however it does not appear to be installed.")
312-
            oBook = oBooks.Open(Filename:=sFileSylkName)
312+
                Exit Sub
313-
        Else
313+
314-
            MessageBox.Show("Failed to create " & sFileSylkName)
314+
315
                'key is found
316
                TargetKey.Close()
317
                Dim oWord As Word.Application
318
                Dim sFile As String = PathTb.Text
319
320-
    Private Sub Label5_Click(sender As System.Object, e As System.EventArgs) Handles Label5.Click
320+
                'Start Word and open the document.
321
                If Path.GetExtension(sFile) = ".xlsx" Then
322
                    MsgBox("You can not open files with extension .xlsx in Word.")
323
                Else
324-
    Private Sub PictureBox11_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox11.Click
324+
                    oWord = CreateObject("Word.Application")
325
                    oWord.Visible = True
326-
        Shell("C:\Program Files\Windows NT\Accessories\wordpad.exe" + " """ + sFile + """", AppWinStyle.NormalFocus)
326+
                    oWord.Documents.Open(sFile)
327
                End If
328-
        Dim regVersion As Microsoft.Win32.RegistryKey
328+
329-
        regVersion = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\wordpad.exe", True)
329+
330-
        If regVersion IsNot Nothing Then
330+
331-
            Dim proc As New Process
331+
332-
            With proc.StartInfo
332+
333-
                .FileName = regVersion.GetValue("").ToString
333+
334-
                .Arguments = sFile
334+
335
336-
            proc.Start()
336+
337
    Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox8.Click
338
        Try
339
            Dim excelPath As String = _
340
                Registry.GetValue( _
341-
    Private Sub PictureBox12_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox12.Click
341+
                "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\excel.exe", _
342-
        Dim oExcel As New Excel.Application
342+
                "Path", "Key does not exist")
343-
        Dim oBooks As Excel.Workbooks = Nothing
343+
344-
        Dim oBook As Workbook = Nothing
344+
            Dim TargetKey As RegistryKey
345-
        Dim oWSheet As Worksheet = Nothing
345+
            TargetKey = Registry.ClassesRoot.OpenSubKey("excel.application")
346-
        Dim oChart As Chart = Nothing
346+
347
            If TargetKey Is Nothing Then
348-
        Dim NumberOfRows As Integer
348+
                MsgBox("The Open in Safe Mode method requires Excel, however it does not appear to be installed.")
349-
        Dim X As Object
349+
                Exit Sub
350-
        Dim Counter As Integer = 2
350+
351
            Else    'key is found
352
                TargetKey.Close()
353-
        oBook = oBooks.Open(Filename:=sFile)
353+
                Dim sFile As String = PathTb.Text
354-
        oWSheet = oBook.Worksheets.Add()
354+
                Shell(excelPath & "excel.exe /s /r " & """" & sFile & """", AppWinStyle.NormalFocus)
355-
        oWSheet.Name = "ChartData"
355+
356-
        oWSheet.Activate()
356+
357-
        MsgBox("Select the chart you wish to extract data from.")
357+
358-
        oChart = oBook.ActiveChart
358+
359-
        ' Calculate the number of rows of data. 
359+
360-
        NumberOfRows = UBound(oChart.SeriesCollection(1).Values)
360+
361
362-
        oWSheet.Cells(1, 1) = "X Values"
362+
363
        Try
364-
        ' Write x-axis values to worksheet. 
364+
365-
        With oWSheet
365+
366-
            .Range(.Cells(2, 1), _
366+
367-
            .Cells(NumberOfRows + 1, 1)).Value = _
367+
368-
            oExcel.WorksheetFunction.Transpose(oChart.SeriesCollection(1).XValues)
368+
369-
        End With
369+
370
            'Start Excel and open the workbook.
371-
        ' Loop through all series in the chart and write their values to 
371+
372-
        ' the worksheet. 
372+
373-
        For Each X In oChart.SeriesCollection
373+
374-
            oWSheet.Cells(1, Counter) = X.Name
374+
375
                MsgBox("Excel completed file level validation and repair. Some " _
376-
            With oWSheet
376+
                & "parts of this workbook may have been repaired or discarded.")
377-
                .Range(.Cells(2, Counter), _
377+
378-
                .Cells(NumberOfRows + 1, Counter)).Value = _
378+
379-
                oExcel.WorksheetFunction.Transpose(X.Values)
379+
380
                oWB = oBooks.Open(Filename:=sFile, CorruptLoad:=XlCorruptLoad.xlRepairFile)
381
            End If
382-
            Counter = Counter + 1
382+
383
384
        Catch ex As Exception
385
            MessageBox.Show(ex.Message)
386
        End Try
387
    End Sub
388
389
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox4.Click
390
        Try
391
            Dim sFile As String = PathTb.Text
392
393
            If File.Exists("C:\Program Files\Microsoft Office\Office12\XLVIEW.EXE") Then
394
                Shell("C:\Program Files\Microsoft Office\Office12\XLVIEW.EXE /s /r " & """" & sFile & """", AppWinStyle.NormalFocus)
395
            Else
396
                MsgBox("You have not downloaded the most recent Microsoft Excel Viewer. " _
397-
    Private Sub Label11_Click(sender As System.Object, e As System.EventArgs) Handles Label11.Click
397+
                      & "Please install after downloading and try clicking this button again.")
398
                System.Diagnostics.Process.Start("http://www.microsoft.com/download/en/details.aspx?id=10")
399
400
            End If
401-
    Private Sub Button1_Click_2(sender As System.Object, e As System.EventArgs) Handles Button1.Click
401+
402-
        Alphaleonis.Win32.Vss.VssImplementation.Equals()
402+
403
            MessageBox.Show(ex.Message)
404-
End Class
404+
405-
405+
406-
406+
407
    Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox7.Click
408
        Try
409
            Dim TargetKey As RegistryKey
410
            TargetKey = Registry.ClassesRoot.OpenSubKey("excel.application")
411
412
            If TargetKey Is Nothing Then
413
                MsgBox("The Open and Extract Data method requires Excel, however it does not appear to be installed.")
414
                Exit Sub
415
416
            Else    'key is found
417
                TargetKey.Close()
418
419
                Dim sFile As String = PathTb.Text
420
                Dim oExcel As New Excel.Application
421
                Dim oBooks As Excel.Workbooks = Nothing
422
                Dim oWB As Workbook = Nothing
423
424
                'Start Excel and open the workbook.
425
426
                oExcel.Visible = True
427
                oBooks = oExcel.Workbooks
428
                oWB = oBooks.Open(Filename:=sFile, CorruptLoad:=XlCorruptLoad.xlExtractData)
429
430
            End If
431
432
        Catch ex As Exception
433
                MessageBox.Show(ex.Message)
434
        End Try
435
    End Sub
436
437
    Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
438
        Try
439
            Dim x As Integer
440
441
            For x = 0 To shadowLinkFolderName.Count - 1
442
443
                Dim myProcess As New Process()
444
                myProcess.StartInfo.FileName = "cmd.exe"
445
                myProcess.StartInfo.UseShellExecute = False
446
                myProcess.StartInfo.RedirectStandardInput = True
447
                myProcess.StartInfo.RedirectStandardOutput = True
448
                myProcess.StartInfo.CreateNoWindow = True
449
                myProcess.Start()
450
                Dim myStreamWriter As StreamWriter = myProcess.StandardInput
451
452
                myStreamWriter.WriteLine("rmdir " & shadowLinkFolderName(x))
453
                myStreamWriter.Close()
454
                myProcess.WaitForExit()
455
                myProcess.Close()
456
457
            Next
458
459
            Me.Close()
460
461
        Catch ex As Exception
462
            MessageBox.Show(ex.Message)
463
        End Try
464
465
    End Sub
466
467
    Private Sub PictureBox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox2.Click
468
        Me.WindowState = FormWindowState.Minimized
469
    End Sub
470
471
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
472
473
    End Sub
474
475
476
    Private allowCoolMove As Boolean = False
477
    Private dx, dy As Integer 'I used this two integers as I could use the function new POint due to the Import of the Excel
478
479
    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
480
        allowCoolMove = True
481
        dx = Cursor.Position.X - Me.Location.X '// get coordinates.
482
        dy = Cursor.Position.Y - Me.Location.Y '// get coordinates.
483
    End Sub
484
485
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
486
        If allowCoolMove = True Then
487
            Dim cls As New Class1
488
            Me.Location = cls.Pts(Cursor.Position.X - dx, Cursor.Position.Y - dy) '// set coordinates.
489
        End If
490
    End Sub
491
492
    Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
493
        allowCoolMove = False
494
    End Sub
495
496
    Private Sub Label7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
497
498
    End Sub
499
500
    Private Sub Label6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
501
502
    End Sub
503
504
    Private Sub Label4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
505
506
    End Sub
507
508
    Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
509
510
    End Sub
511
512
    Private Sub PictureBox5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox5.Click
513
        Try
514
            Dim TargetKey As RegistryKey
515
            TargetKey = Registry.ClassesRoot.OpenSubKey("excel.application")
516
517
            If TargetKey Is Nothing Then
518
                MsgBox("Opening the Excel file with calculations set to manual method requires Excel, however it does not appear to be installed.")
519
                Exit Sub
520
521
            Else
522
                'key is found
523
                TargetKey.Close()
524
                Dim oExcel As Excel.Application
525
                Dim oBook As Excel.Workbook
526
                Dim oBooks As Excel.Workbooks
527
                Dim sFile As String = PathTb.Text
528
                oExcel = CreateObject("Excel.application")
529
                oExcel.Visible = True
530
531
                oBooks = oExcel.Workbooks
532
                oBook = oBooks.Open(sFile)
533
                oExcel.Calculation = Excel.XlCalculation.xlCalculationManual
534
            End If
535
536
        Catch ex As Exception
537
            MessageBox.Show(ex.Message)
538
        End Try
539
    End Sub
540
541
    Private Sub PictureBox6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox6.Click
542
        Try
543
            Dim TargetKey As RegistryKey
544
            TargetKey = Registry.ClassesRoot.OpenSubKey("excel.application")
545
546
            If TargetKey Is Nothing Then
547
                MsgBox("The Open and Repair method requires Excel, however it does not appear to be installed.")
548
                Exit Sub
549
550
            Else
551
                'key is found
552
                TargetKey.Close()
553
                Dim sFile As String = PathTb.Text
554
555
                Dim oExcel As New Excel.Application
556
                Dim oBooks As Excel.Workbooks = Nothing
557
                Dim oWB As Workbook = Nothing
558
559
                'Start Excel and open the workbook.
560
                If Path.GetExtension(sFile) = ".xls" Then
561
                    oExcel.Visible = True
562
                    oBooks = oExcel.Workbooks
563
                    oWB = oBooks.Open(Filename:=sFile, CorruptLoad:=XlCorruptLoad.xlRepairFile)
564
                    MsgBox("Excel completed file level validation and repair. Some " _
565
                    & "parts of this workbook may have been repaired or discarded.")
566
                Else
567
                    oExcel.Visible = True
568
                    oBooks = oExcel.Workbooks
569
                    oWB = oBooks.Open(Filename:=sFile, CorruptLoad:=XlCorruptLoad.xlRepairFile)
570
                End If
571
572
            End If
573
        Catch ex As Exception
574
            MessageBox.Show(ex.Message)
575
        End Try
576
    End Sub
577
578
    Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click
579
580
    End Sub
581
582
    Private Sub PictureBox9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox9.Click
583
        Try
584
            Dim TargetKey As RegistryKey
585
            TargetKey = Registry.ClassesRoot.OpenSubKey("excel.application")
586
587
            If TargetKey Is Nothing Then
588
                MsgBox("The External References method requires Excel, however it does not appear to be installed.")
589
                Exit Sub
590
591
            Else
592
                'key is found
593
                TargetKey.Close()
594
                Dim oExcel As Excel.Application
595
                Dim oBook As Excel.Workbook
596
                Dim sFile As String = PathTb.Text
597
598
                oExcel = CreateObject("Excel.application")
599
                oBook = oExcel.Workbooks.Add
600
                oExcel.Visible = True
601
                oBook.Activate()
602
                oExcel.Calculation = Excel.XlCalculation.xlCalculationAutomatic
603
                oExcel.Range("A1").Value = "=" & "'" & sFile & "'" & "!A1"
604
605
                Dim rRange As Range
606
                oExcel.DisplayAlerts = False
607
                rRange = oExcel.InputBox(Prompt:= _
608
                    "Please select a range similar in size to your corrupt data " _
609
                    & "that you wish to recover.", Title:="SPECIFY RANGE", Type:=8)
610
                oExcel.DisplayAlerts = True
611
612
                If rRange Is Nothing Then
613
614
                    Exit Sub
615
616
                Else
617
                    oExcel.Range("A1").Copy()
618
                    oBook.ActiveSheet.Paste(rRange)
619
620
                End If
621
            End If
622
623
        Catch ex As Exception
624
            MessageBox.Show(ex.Message)
625
        End Try
626
    End Sub
627
628
    Private Sub PictureBox10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox10.Click
629
        Try
630
            Dim TargetKey As RegistryKey
631
            TargetKey = Registry.ClassesRoot.OpenSubKey("excel.application")
632
633
            If TargetKey Is Nothing Then
634
                MsgBox("The save to SYLK format method requires Excel, however it does not appear to be installed.")
635
                Exit Sub
636
637
            Else
638
                'key is found
639
                TargetKey.Close()
640
                Dim oExcel As New Excel.Application
641
                Dim oBooks As Excel.Workbooks = Nothing
642
                Dim oBook As Workbook = Nothing
643
                Dim oWSheet As Worksheet = Nothing
644
                Dim sFile As String = PathTb.Text
645
                Dim sFileName As String = Path.GetFileNameWithoutExtension(sFile)
646
                Dim sDirName As String = Path.GetDirectoryName(sFile)
647
                Dim sFileSylkName As String = sDirName & "\" & sFileName & ".slk"
648
649
                'Start Excel and open the workbook.
650
                oExcel.Visible = False
651
                oBooks = oExcel.Workbooks
652
                oBook = oBooks.Open(Filename:=sFile)
653
                oWSheet = oBook.ActiveSheet()
654
                oWSheet.SaveAs(Filename:=sFileSylkName, FileFormat:=Excel.XlFileFormat.xlSYLK)
655
656
                If File.Exists(sFileSylkName) Then
657
                    oBook.Close()
658
                    oExcel.Visible = True
659
                    oBook = oBooks.Open(Filename:=sFileSylkName)
660
                Else
661
                    MessageBox.Show("Failed to create " & sFileSylkName)
662
                End If
663
664
            End If
665
666
        Catch ex As Exception
667
            MessageBox.Show(ex.Message)
668
        End Try
669
    End Sub
670
671
    Private Sub Label5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label5.Click
672
673
    End Sub
674
675
    Private Sub PictureBox11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox11.Click
676
        Try
677
            Dim sFile As String = PathTb.Text
678
            Dim regVersion As Microsoft.Win32.RegistryKey
679
            regVersion = Microsoft.Win32.Registry.LocalMachine.OpenSubKey( _
680
                "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\wordpad.exe", True)
681
                If regVersion IsNot Nothing Then
682
                    Dim proc As New Process
683
                    With proc.StartInfo
684
                        .FileName = regVersion.GetValue("").ToString
685
                        .Arguments = sFile
686
                    End With
687
                    proc.Start()
688
                End If
689
690
691
        Catch ex As Exception
692
            MessageBox.Show(ex.Message)
693
        End Try
694
    End Sub
695
696
    Private Sub PictureBox12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
697
        Try
698
            Dim TargetKey As RegistryKey
699
            TargetKey = Registry.ClassesRoot.OpenSubKey("excel.application")
700
701
            If TargetKey Is Nothing Then
702
                MsgBox("The Macro Graph Data Recovery method requires Excel, however it does not appear to be installed.")
703
                Exit Sub
704
705
            Else
706
                'key is found
707
                TargetKey.Close()
708
                Dim oExcel As New Excel.Application
709
                Dim oBooks As Excel.Workbooks = Nothing
710
                Dim oBook As Workbook = Nothing
711
                Dim oWSheet As Worksheet = Nothing
712
                Dim oChart As Chart = Nothing
713
                Dim sFile As String = PathTb.Text
714
                Dim NumberOfRows As Integer
715
                Dim X As Object
716
                Dim Counter As Integer = 2
717
718
                oExcel.Visible = True
719
                oBooks = oExcel.Workbooks
720
                oBook = oBooks.Open(Filename:=sFile)
721
                oWSheet = oBook.Worksheets.Add()
722
                oWSheet.Name = "ChartData"
723
                oWSheet.Activate()
724
                MsgBox("Select the chart you wish to extract data from.")
725
                oChart = oBook.ActiveChart
726
727
                ' Calculate the number of rows of data. 
728
                NumberOfRows = UBound(oChart.SeriesCollection(1).Values)
729
                oWSheet.Cells(1, 1) = "X Values"
730
731
                ' Write x-axis values to worksheet. 
732
                With oWSheet
733
                    .Range(.Cells(2, 1), _
734
                    .Cells(NumberOfRows + 1, 1)).Value = _
735
                    oExcel.WorksheetFunction.Transpose(oChart.SeriesCollection(1).XValues)
736
                End With
737
738
                ' Loop through all series in the chart   
739
                ' and write their values to the worksheet. 
740
                For Each X In oChart.SeriesCollection
741
                    oWSheet.Cells(1, Counter) = X.Name
742
743
                    With oWSheet
744
                        .Range(.Cells(2, Counter), _
745
                        .Cells(NumberOfRows + 1, Counter)).Value = _
746
                        oExcel.WorksheetFunction.Transpose(X.Values)
747
                    End With
748
749
                    Counter = Counter + 1
750
                Next
751
            End If
752
753
        Catch ex As Exception
754
            MessageBox.Show(ex.Message)
755
        End Try
756
    End Sub
757
758
    Private Sub releaseObject(ByVal obj As Object)
759
        Try
760
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
761
            obj = Nothing
762
        Catch ex As Exception
763
            obj = Nothing
764
        Finally
765
            GC.Collect()
766
        End Try
767
    End Sub
768
769
    Private Sub Label11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
770
771
    End Sub
772
    Dim saveShadowPath As String
773
    Private Sub Button1_Click_2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
774
        Try
775
            Dim saveFileDialog1 As New SaveFileDialog()
776
            saveFileDialog1.Filter = "Excel Files (*.xls;*.xlsx;*.xlt;*.xla;" _
777
                & "*.xlsm;*.xltx;*.xltm;*.xlsb;*.xlam)|*.xls;*.xlsx;*.xlt;*.xla;" _
778
                & "*.xlsm;*.xltx;*.xltm;*.xlsb;*.xlam|All Files (*.*)|*.*"
779
            saveFileDialog1.FilterIndex = 1
780
            saveFileDialog1.RestoreDirectory = True
781
782
            If saveFileDialog1.ShowDialog() = DialogResult.OK Then
783
                saveShadowPath = saveFileDialog1.FileName
784
785
                If System.IO.File.Exists(selectedPreviousVersion) = True Then
786
                    System.IO.File.Copy(selectedPreviousVersion, saveShadowPath, True)
787
                    MsgBox(("The Previous version of " & sFileShadowName _
788
                                  & " last modified on " & selectedsFileShadowPathDate _
789
                                  & " was saved to a new location: " & saveShadowPath) & ".")
790
                Else
791
                    MsgBox("Can't connect to previous version file.")
792
                End If
793
            End If
794
        Catch ex As Exception
795
            MessageBox.Show(ex.Message)
796
        End Try
797
    End Sub
798
    Dim selectedsFileShadowPathDate As String
799
    Dim selectedPreviousVersion As String
800
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
801
        Try
802
            Dim sFileShadowPathInfo As New FileInfo(sFileShadowPath)
803
            sFileShadowPathDate = sFileShadowPathInfo.LastWriteTime
804
            sFileShadowName = sFileShadowPathInfo.Name
805
            selectedsFileShadowPathDate = DelFromLeft("File Name: " & sFileShadowName _
806
                            & " Last Modified: ", ComboBox1.Text.ToString)
807
            selectedPreviousVersion = preVersionHashTable.Item(selectedsFileShadowPathDate)
808
        Catch ex As Exception
809
            MessageBox.Show(ex.Message)
810
        End Try
811
    End Sub
812
813
    Private Sub Label12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label12.Click
814
815
    End Sub
816
817
    Private Sub SaveFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk
818
819
    End Sub
820
821
    Private Sub PictureBox13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox13.Click
822
        Try
823
            Dim extractCMD As New Process()
824
            Dim sFile As String = PathTb.Text
825
            Dim myPercent As Char
826
827
            myPercent = Chr(37)
828
            Dim myZipCommand As String = """no-frills.exe " & Chr(37) _
829
                            & "a " & Chr(37) & "d " & Chr(37) & "f"""
830
            MsgBox("doctotext.exe " & "--fix-xml --unzip-cmd=" & myZipCommand & " """ & sFile & """")
831
            extractCMD.StartInfo.FileName = "doctotext.exe"
832
            extractCMD.StartInfo.Arguments = "--fix-xml --unzip-cmd=" _
833
                            & myZipCommand & " """ & sFile & """"
834
            extractCMD.StartInfo.UseShellExecute = False
835
            extractCMD.StartInfo.RedirectStandardOutput = True
836
            extractCMD.StartInfo.CreateNoWindow = True
837
            extractCMD.Start()
838
839
            Dim sFileText As String = sFile & ".txt"
840
            Dim doctotextOutput As String = extractCMD.StandardOutput.ReadToEnd()
841
            Dim sErr As String = ""
842
            'Save to different file
843
            Dim bAns As String = SaveTextToFile(doctotextOutput, sFileText, sErr)
844
            If bAns Then
845
                MsgBox("Please note: all successfuly extracted worksheets will " _
846
                       & "appear on just one worksheet travelling vertically down.")
847
                Dim oExcel As New Excel.Application
848
                oExcel.Visible = True
849
                oExcel.Workbooks.Open(sFileText)
850
851
            Else
852
                MsgBox("Error extracting file: " & sErr)
853
            End If
854
855
            extractCMD.Close()
856
857
        Catch ex As Exception
858
            MessageBox.Show(ex.Message)
859
        End Try
860
    End Sub
861
862
    Private Sub PictureBox14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox14.Click
863
        Try
864
            MsgBox("If successful, each Worksheet will be saved as separate " _
865
                   & "CSV files in the same directory as your corrupt file.")
866
            Dim OFlD As New FolderBrowserDialog
867
            Dim sFile As String = PathTb.Text
868
            Dim coffecCMD As New Process()
869
            coffecCMD.StartInfo.FileName = "coffec.exe"
870
            coffecCMD.StartInfo.Arguments = "-t """ & sFile & """"
871
            coffecCMD.StartInfo.UseShellExecute = True
872
            coffecCMD.StartInfo.CreateNoWindow = True
873
            coffecCMD.Start()
874
            coffecCMD.WaitForExit()
875
            coffecCMD.Close()
876
            Dim sFileInfo As New FileInfo(sFile)
877
            Dim sFileName As String = sFileInfo.Name
878
            Dim sFilePath As String = DelFromRight(sFileName, sFile)
879
            Process.Start("explorer.exe", sFilePath)
880
881
        Catch ex As Exception
882
            MessageBox.Show(ex.Message)
883
        End Try
884
    End Sub
885
886
    Private Sub FolderBrowserDialog1_HelpRequest(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FolderBrowserDialog1.HelpRequest
887
888
    End Sub
889
890
    Private Sub PictureBox15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox15.Click
891
        Try
892
            Dim repairZip As New Process()
893
            Dim sFile As String = PathTb.Text
894
            Dim sFileZip As String = sFile & ".zip"
895
            Dim sFileInfo As New FileInfo(sFile)
896
            Dim sFileName As String = sFileInfo.Name
897
            Dim zipRepairedsFileName As String = "zipRepaired" & sFileName & ".zip"
898
            Dim sFileBasePath As String = DelFromRight(sFileName, sFile)
899
            Dim zipRepairedFullPathFileName As String = sFileBasePath & zipRepairedsFileName
900
901
            FileCopy(sFile, sFileZip)
902
            repairZip.StartInfo.FileName = "zip.exe"
903
            repairZip.StartInfo.Arguments = "-FF """ & sFileZip & """ --out " & zipRepairedFullPathFileName
904
            repairZip.StartInfo.UseShellExecute = False
905
            repairZip.StartInfo.RedirectStandardOutput = True
906
            repairZip.StartInfo.CreateNoWindow = True
907
            repairZip.Start()
908
909
            Dim repairZipReader As StreamReader = repairZip.StandardOutput
910
            Dim repairZipCompOut As String = repairZipReader.ReadToEnd
911
912
            repairZipReader.Close()
913
            repairZip.WaitForExit()
914
            repairZip.Close()
915
916
            Dim zipRepairedFullPathXlsxName As String = DelFromRight(".zip", zipRepairedFullPathFileName)
917
            Dim oExcel As New Excel.Application
918
            Dim oBooks As Excel.Workbooks = Nothing
919
            Dim oBook As Workbook = Nothing
920
            Rename(zipRepairedFullPathFileName, zipRepairedFullPathXlsxName)
921
            oExcel.Visible = True
922
            oBooks = oExcel.Workbooks
923
            oBook = oBooks.Open(Filename:=zipRepairedFullPathXlsxName)
924
925
        Catch ex As Exception
926
            MessageBox.Show(ex.Message)
927
        End Try
928
    End Sub
929
930
    Private Sub PathTb_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PathTb.TextChanged
931
932
    End Sub
933
End Class