Excel Dosyasındaki Resimleri Çıkarma

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,853
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Excel Dosyasındaki Resimleri Çıkarma bu kod ile kısaca şu işlem yapılmakta Açılan pencereden bir excel dosyasını seçip sonra farklı kaydet seçeneklerinden htm uzantılı kayıt yapıp sonra bu kayıtta ki resimleri dosyanın hemen yanına Resimler klasörü oluşturup içine resim dosyalarını aktarmakta kod bunları otomatik yapıyor.

Kod:
Sub Dasyadaki_resimleri_çıkart()

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Dim fs As Object, f As Object
Set fs = CreateObject("Scripting.FileSystemObject")

aranan_Uzanti = fs.GetExtensionName(Application.AddIns.Item(1).FullName)
uzanti = fs.GetExtensionName(ThisWorkbook.Name)

If aranan_Uzanti = "xlam" Then
If uzanti = "xls" Or uzanti = "xlsm" Or uzanti = "xlsx" Or uzanti = "xlsb" Then
uzanti1 = "DosyalarExcel Files (*.xls,*.xlsx,*.xlsm,*.xlsb)|*.xls;*.xls;*.xlsm;*.xlsb"

Else
End If
End If

If aranan_Uzanti = "xla" Then
If uzanti = "xls" Then
uzanti1 = "DosyalarExcel Files (.xls)|*.xls"
Else
End If
End If


Dim fL As Object
Set fL = CreateObject("Scripting.FileSystemObject")

Dim objDialog, intResult
Set objDialog = CreateObject("MSComDlg.CommonDialog")
objDialog.flags = 4
objDialog.Filter = uzanti1 '"DosyalarExcel Files (.xls)|*.xls"
objDialog.FilterIndex = 1
objDialog.InitDir = ThisWorkbook.Path
objDialog.ShowOpen
intResul = objDialog.Filename
Dosya = intResul

If fL.GetFileName(intResul) = ThisWorkbook.Name Or Mid(fL.GetFileName(intResul), 1, 2) = "~$" Then
MsgBox "Bu dosya kendi dosyası işlem yapılamaz.", vbInformation + vbCritical
Exit Sub
End If

If Len(intResul) = 0 Then
MsgBox "Dosya seçmediniz.", vbInformation + vbCritical
Exit Sub
Else
End If

dosya_adi = fL.GetBaseName(Dosya)
'On Error Resume Next
Klasor = fL.GetParentFolderName(Dosya)
If Right(Klasor, 1) <> "\" Then Klasor = Klasor & "\"

Hedef = ThisWorkbook.Path & "\Resimler"
If fL.FolderExists(Hedef) = False Then
MkDir Hedef
End If

Dim wb As Workbook
Set wb = Workbooks.Open(Dosya)
ActiveWorkbook.SaveAs Filename:=Klasor & dosya_adi & ".htm" _
, FileFormat:=xlHtml, ReadOnlyRecommended:=False, CreateBackup:=False
wb.Close

For Each dosya2 In fL.GetFolder(Klasor & dosya_adi & "_dosyalar").Files
uzanti = LCase(fL.GetExtensionName(dosya2))
If uzanti = "jpg" Or uzanti = "gif" Or uzanti = "png" Then
eski = dosya2
Say = fL.GetFolder(Hedef).Files.Count + 1
yeni = Hedef & "\Resim" & Say & "." & uzanti
FileCopy eski, yeni
End If
Next

fL.DeleteFile Klasor & "\" & dosya_adi & ".htm", True
fL.DeleteFolder Klasor & dosya_adi & "_dosyalar", True

Set objDialog = Nothing
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "İşlem Tamam"

End Sub
 

Ekli dosyalar

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,853
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Bu kod klasörün içindeki bütün excel dosyalarının içindeki resimleri çıkartıyor.

Kod:
Sub mevcut_dosyaları()

Set Klasor = CreateObject("shell.application").browseforfolder(0, "Kaynak Dosyaları İçeren Klasörü Seçin", 50, &H0)
If Not Klasor Is Nothing Then
Kaynak = Klasor.SELF.Path
If InStr(1, Kaynak, "{") > 0 Then GoTo atla
Application.ScreenUpdating = False
Application.DisplayAlerts = False

Liste (Kaynak)
Set Klasor = Nothing

Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "İşlem Tamam"

Else
atla:
MsgBox "Lütfen Kaynak Klasör Seçimini Yapınız !", vbInformation, "DİKKAT"
End If
End Sub
Private Sub Liste(yol As String)
Dim fL As Object, f As Object, i As Long
Set fL = CreateObject("Scripting.FileSystemObject")

'On Error Resume Next
For Each Dosya In fL.GetFolder(yol).Files

If fL.GetFileName(Dosya) = ThisWorkbook.Name Or Mid(fL.GetFileName(Dosya), 1, 2) = "~$" Then
GoSub atla1
End If

uzanti = fL.GetExtensionName(Dosya.Name)

aranan_Uzanti = fL.GetExtensionName(Application.AddIns.Item(1).FullName)
uzanti = fL.GetExtensionName(Dosya)

If aranan_Uzanti = "xlam" Then
If uzanti = "xls" Or uzanti = "xlsm" Or uzanti = "xlsx" Or uzanti = "xlsb" Then

Else
GoSub atla1
End If
End If

If aranan_Uzanti = "xla" Then
If uzanti = "xls" Then

Else
GoSub atla1
End If
End If

dosya_adi = fL.GetBaseName(Dosya)
'On Error Resume Next
Klasor = fL.GetParentFolderName(Dosya)
If Right(Klasor, 1) <> "\" Then Klasor = Klasor & "\"

Hedef = ThisWorkbook.Path & "\Resimler"
If fL.FolderExists(Hedef) = False Then
MkDir Hedef
End If

Dim wb As Workbook
Set wb = Workbooks.Open(Dosya)
ActiveWorkbook.SaveAs Filename:=Klasor & dosya_adi & ".htm" _
, FileFormat:=xlHtml, ReadOnlyRecommended:=False, CreateBackup:=False
wb.Close


If CreateObject("Scripting.FileSystemObject").FolderExists(Klasor & dosya_adi & "_dosyalar") = False Then
fL.DeleteFile Klasor & "\" & dosya_adi & ".htm", True
GoSub atla1
End If

For Each dosya2 In fL.GetFolder(Klasor & dosya_adi & "_dosyalar").Files
uzanti = LCase(fL.GetExtensionName(dosya2))
If uzanti = "jpg" Or uzanti = "gif" Or uzanti = "png" Then
eski = dosya2
say = fL.GetFolder(Hedef).Files.Count + 1
yeni = Hedef & "\Resim" & say & "." & uzanti
FileCopy eski, yeni
End If
Next

fL.DeleteFile Klasor & "\" & dosya_adi & ".htm", True
fL.DeleteFolder Klasor & dosya_adi & "_dosyalar", True

atla1:

Next

On Error GoTo sonraki
For Each f In fL.GetFolder(yol).SubFolders
Liste (f.Path)
sonraki:
Next

Set fL = Nothing
End Sub
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,853
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Bu exe dosyasıda VB6 hazırlandı. Dosyanın çalışması için Command1 , Command2 , Label1 , Option1 i Option2 nesneleri eklenmeli

Kodlar.

Kod:
Private Sub Form_Initialize()
Option1.Caption = "Kendi Klasörüne Kaydet"
Option2.Caption = "Resimler Klasörüne Kaydet"
End Sub

Private Sub Form_Unload(Cancel As Integer)
End
End Sub

Private Sub Command1_Click()


If Val((CreateObject("Excel.Application").Application.Version)) > 11 Then
Liste = "DosyalarExcel Files (*.xls,*.xlsx,*.xlsm,*.xlsb)|*.xls;*.xlsx;*.xlsm;*.xlsb"
Else
Liste = "DosyalarExcel Files (.xls)|*.xls"
End If

Dim fL As Object
Set fL = CreateObject("Scripting.FileSystemObject")

Dim objDialog, intResult
Set objDialog = CreateObject("MSComDlg.CommonDialog")
objDialog.flags = 4
objDialog.Filter = Liste

objDialog.FilterIndex = 1
objDialog.InitDir = App.Path
objDialog.ShowOpen
intResul = objDialog.FileName

Dosya = intResul
If Len(intResul) = 0 Then
MsgBox "Dosya seçmediniz.", vbInformation + vbCritical
Exit Sub
Else
End If

Label1.Visible = True
Command1.Visible = False
Command2.Visible = False
Option1.Top = 3120
Option2.Top = 3120
Label1 = "Lütfen İşlem Bitene Kadar Bekleyiniz. İşeminiz Devam Ediyor"
dosya_adi = fL.GetBaseName(Dosya)
Klasor = fL.GetParentFolderName(Dosya)

If Right(Klasor, 1) <> "\" Then Klasor = Klasor & "\"
If Option1.Value = True Then
hedef = App.Path & "\" & dosya_adi
If fL.FolderExists(hedef) = True Then
fL.DeleteFolder hedef, True
End If
Else
hedef = App.Path & "\Resimler"
End If

If fL.FolderExists(hedef) = False Then
MkDir hedef
End If

Dim oExcel As Object
Dim oBook As Object
Dim oSheet As Object
Set oExcel = CreateObject("Excel.Application")

Set oBook = oExcel.Workbooks.Open(Dosya)
oBook.SaveAs Klasor & dosya_adi, 44
oBook.Close

If CreateObject("Scripting.FileSystemObject").FolderExists(Klasor & dosya_adi & "_dosyalar") = False Then
fL.DeleteFile Klasor & "\" & dosya_adi & ".htm", True
GoSub atla1
End If

For Each dosya2 In fL.GetFolder(Klasor & dosya_adi & "_dosyalar").Files
uzanti = LCase(fL.GetExtensionName(dosya2))

If uzanti = "jpg" Or uzanti = "gif" Or uzanti = "png" Then
say = fL.GetFolder(hedef).Files.Count + 1


If Option1.Value = True Then
yeni = hedef & "\" & dosya2.Name
Else
yeni = hedef & "\Resim" & say & "." & uzanti
End If

FileCopy dosya2, yeni
End If
Next

fL.DeleteFile Klasor & "\" & dosya_adi & ".htm", True
fL.DeleteFolder Klasor & dosya_adi & "_dosyalar", True
atla1:

Set objDialog = Nothing
Label1 = " İşlem Sona Erdi"
MsgBox "İşlem Tamam", vbInformation, "uyarı"
Label1.Visible = False
Command1.Visible = True
Command2.Visible = True
Option1.Top = 1680
Option2.Top = 2040


End Sub


Private Sub Command2_Click()

Set Klasor = CreateObject("shell.application").browseforfolder(0, "Kaynak Dosyaları İçeren Klasörü Seçin", 50, &H0)
If Not Klasor Is Nothing Then
Kaynak = Klasor.SELF.Path
If InStr(1, Kaynak, "{") > 0 Then GoTo atla
Label1.Visible = True
Command1.Visible = False
Command2.Visible = False
Option1.Top = 3120
Option2.Top = 3120
Label1 = "Lütfen İşlem Bitene Kadar Bekleyiniz. İşeminiz Devam Ediyor"
Liste1 (Kaynak)
Set Klasor = Nothing
Label1 = " İşlem Sona Erdi"
MsgBox "İşlem Tamam", vbInformation, "uyarı"
Label1.Visible = False
Command1.Visible = True
Command2.Visible = True
Option1.Top = 1680
Option2.Top = 2040



Else
atla:
MsgBox "Lütfen Kaynak Klasör Seçimini Yapınız !", vbInformation, "DİKKAT"
End If
End Sub
Private Sub Liste1(yol As String)
Dim fL As Object, f As Object, i As Long
Set fL = CreateObject("Scripting.FileSystemObject")

For Each Dosya In fL.GetFolder(yol).Files

uzanti = fL.GetExtensionName(Dosya.Name)
If Val((CreateObject("Excel.Application").Application.Version)) > 11 Then
If uzanti = "xls" Or uzanti = "xlsm" Or uzanti = "xlsx" Or uzanti = "xlsb" Then

Else
GoSub atla1
End If

Else
If uzanti = "xls" Then

Else
GoSub atla1
End If

End If


dosya_adi = fL.GetBaseName(Dosya)
Klasor = fL.GetParentFolderName(Dosya)
If Right(Klasor, 1) <> "\" Then Klasor = Klasor & "\"

If Option1.Value = True Then
hedef = App.Path & "\" & dosya_adi
If fL.FolderExists(hedef) = True Then
fL.DeleteFolder hedef, True
End If
Else
hedef = App.Path & "\Resimler"
End If


If fL.FolderExists(hedef) = False Then
MkDir hedef
End If

Dim oExcel As Object
Dim oBook As Object
Dim oSheet As Object
Set oExcel = CreateObject("Excel.Application")
Set oBook = oExcel.Workbooks.Open(Dosya)

oBook.SaveAs Klasor & dosya_adi, 44
oBook.Close

If CreateObject("Scripting.FileSystemObject").FolderExists(Klasor & dosya_adi & "_dosyalar") = False Then
fL.DeleteFile Klasor & "\" & dosya_adi & ".htm", True
GoSub atla1
End If

For Each dosya2 In fL.GetFolder(Klasor & dosya_adi & "_dosyalar").Files
uzanti = LCase(fL.GetExtensionName(dosya2))

If uzanti = "jpg" Or uzanti = "gif" Or uzanti = "png" Then

say = fL.GetFolder(hedef).Files.Count + 1

If Option1.Value = True Then
yeni = hedef & "\" & dosya2.Name
Else
yeni = hedef & "\Resim" & say & "." & uzanti
End If

FileCopy dosya2, yeni
End If
Next

fL.DeleteFile Klasor & "\" & dosya_adi & ".htm", True
fL.DeleteFolder Klasor & dosya_adi & "_dosyalar", True
atla1:

Next

On Error GoTo sonraki
For Each f In fL.GetFolder(yol).SubFolders
Liste1 (f.Path)
sonraki:
Next

Set fL = Nothing
End Sub
 

Ekli dosyalar

Katılım
24 Nisan 2005
Mesajlar
3,680
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
ikinci kodu denedim. Gayet başarılı.
Benim program gibi en azından antivirüs lere takılma problemi yok : )

Emeğinize sağlık.
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,853
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
ikinci kodu denedim. Gayet başarılı.
Benim program gibi en azından antivirüs lere takılma problemi yok : )

Emeğinize sağlık.
Teşekkürler sizin dosyayı gördüm ama bir işlem yapmamıştı ayrıca kodlarınız açık kaynaklı değil.
 
Katılım
24 Nisan 2005
Mesajlar
3,680
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Teşekkürler sizin dosyayı gördüm ama bir işlem yapmamıştı ayrıca kodlarınız açık kaynaklı değil.
Autoit kodları mesajlara eklendi.
Dosyayı seçtiğinizde seçtiğiniz dosyayının klasöründe resimlerdosyaadi.uzantisi şeklinde bir klasöre resimleri kaydetmektedir.

Test lerde bir sorun olmadı. Siz, exe leri çalıştırıp xlsx i seçtiğinizde klasör oluşturmadı mı?
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,853
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Autoit kodları mesajlara eklendi.
Dosyayı seçtiğinizde seçtiğiniz dosyayının klasöründe resimlerdosyaadi.uzantisi şeklinde bir klasöre resimleri kaydetmektedir.

Test lerde bir sorun olmadı. Siz, exe leri çalıştırıp xlsx i seçtiğinizde klasör oluşturmadı mı?
Dosyayı indirdim dosya çalıştı resimleri çıkardı exe dosyasını açıp hep aynı dosyayı seçtim resimleri hep üzerine yazıyor image1.png, image2.png bu isimle devamlı üzerine yazıyor halbuki image3.png , image4.png .image5.png
diye gitmeli.
 
Katılım
24 Nisan 2005
Mesajlar
3,680
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Dosyayı indirdim dosya çalıştı resimleri çıkardı exe dosyasını açıp hep aynı dosyayı seçtim resimleri hep üzerine yazıyor image1.png, image2.png bu isimle devamlı üzerine yazıyor halbuki image3.png , image4.png .image5.png
diye gitmeli.
"exe dosyasını açıp hep aynı dosyayı seçtim resimleri hep üzerine yazıyor"

Program her excel dosyasının resimlerini kendisi ile ilgili klasöre açıyor.
Bir excel dosyasında 3 tane resim var ise, her seçtiğinizde 3 tane resim vermesi doğru olan değil mi? Aynı resimleri 1,2,3,4 olarak çoğaltması gereksiz diye düşünüyorum.

Sizin kodlarda dosyada iki resim olmasına rağmen, her birinden ikişer tane oluşturuyor. Sanırım bu mantıktan dolayı.
 
Son düzenleme:

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,853
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
"exe dosyasını açıp hep aynı dosyayı seçtim resimleri hep üzerine yazıyor"

Program her excel dosyasının resimlerini kendisi ile ilgili klasöre açıyor.
Bir excel dosyasında 3 tane resim var ise, her seçtiğinizde 3 tane resim vermesi doğru olan değil mi? Aynı resimleri 1,2,3,4 olarak çoğaltması gereksiz diye düşünüyorum.

Sizin kodlarda dosyada iki resim olmasına rağmen, her birinden ikişer tane oluşturuyor. Sanırım bu mantıktan dolayı.
3 nolu mesaja da exe uzantılı dosya ekledim.
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,853
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
3 nolu mesajdaki dosya ve kodlar güncellendi
 
Üst