mucitbey Posted April 10, 2023 Share Posted April 10, 2023 Hello friends, I'm trying to transfer the content of text files, whose contents I will share below, are 1.04.2023.txt 2.04.22023.txt to Excel. The contents of each file with the page name on separate pages. 1.04.2023.txt Quote 00000098|1.04.2023|08:12:27|Conor McGregor 00000022|1.04.2023|08:48:26|Dwyane Wade 00000054|1.04.2023|19:50:14|Maria Sharapova 00000098|1.04.2023|19:53:16|Gareth Bale expandcollapse popup#include <Array.au3> #include <Excel.au3> #include <File.au3> Global $OutFile = "Yeni.xlsx" Local $oExcel = _Excel_Open() ; Excel uygulaması başarısız olduysa, hata mesajı yazdır ve kodu sonlandır If @error Then MsgBox(16, "Hata", "Excel uygulaması açılamadı.") Exit EndIf ; Çıktı dosyasını aç Local $oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & "\" & $OutFile) ; Çıktı dosyası açılamazsa, hata mesajı yazdır ve kodu sonlandır If @error Then MsgBox(16, "Hata", "Çıktı dosyası açılamadı.") _Excel_Close($oExcel) Exit EndIf ; Okunacak dosyaların adlarını al Local $fileList = _FileListToArray(@ScriptDir, "*.txt") ; Okunacak dosya sayısı Local $fileCount = UBound($fileList) - 1 ; Her dosyayı oku ve excel dosyasına aktar For $i = 1 To $fileCount Step 1 ; Okunacak dosyanın adı Local $inputFileName = $fileList[$i] ; Dosya okunamazsa, hata mesajı yazdır ve diğer dosyaya geç If Not FileExists(@ScriptDir & "\" & $inputFileName) Then MsgBox(16, "Hata", $inputFileName & " dosyası okunamadı.") ContinueLoop EndIf ; Dosyayı oku ve verileri diziye aktar Local $fileContent = FileRead(@ScriptDir & "\" & $inputFileName) Local $dataArray = StringSplit(StringStripCR($fileContent), @LF, 1) ; Verileri excel dosyasına aktar Local $oSheet = _Excel_BookNew($oWorkbook, 1) _Excel_RangeWrite($oSheet, $dataArray, "A1") Next ; Excel uygulamasını kapat _Excel_BookSaveAs($oWorkbook, @ScriptDir & "\" & $OutFile, "xlsx") _Excel_BookClose($oWorkbook, 0) _Excel_Close($oExcel) Thanks in advance for your help. Link to comment Share on other sites More sharing options...
mistersquirrle Posted April 10, 2023 Share Posted April 10, 2023 I don't have Excel so I can't test this myself, but what's the current problem that you're having with what you've posted? I imagine that 1 issue is that if your file is separated by a pipe ( | ), everything is maybe being put just into 1 cell in the workbook? You may want to check out this function: https://www.autoitscript.com/autoit3/docs/libfunctions/_FileReadToArray.htm, so that you can split up the text file better. Something like this: expandcollapse popup; https://www.autoitscript.com/forum/topic/210050-export-text-file-contents-to-excel/ #cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.16.1 Author: myName Script Function: Template AutoIt script. #ce ---------------------------------------------------------------------------- ; Script Start - Add your code below here #include <Array.au3> #include <Excel.au3> #include <File.au3> Global $OutFile = "Yeni.xlsx" Local $oExcel = _Excel_Open() ; Excel uygulaması başarısız olduysa, hata mesajı yazdır ve kodu sonlandır If @error Then MsgBox(16, "Hata", "Excel uygulaması açılamadı.") Exit EndIf ; Çıktı dosyasını aç Local $oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & "\" & $OutFile) ; Çıktı dosyası açılamazsa, hata mesajı yazdır ve kodu sonlandır If @error Then MsgBox(16, "Hata", "Çıktı dosyası açılamadı.") _Excel_Close($oExcel) Exit EndIf ; Okunacak dosyaların adlarını al Local $fileList = _FileListToArray(@ScriptDir, "*.txt") ; Okunacak dosya sayısı Local $fileCount = UBound($fileList) - 1 ; Her dosyayı oku ve excel dosyasına aktar For $i = 1 To $fileCount Step 1 ; Okunacak dosyanın adı Local $inputFileName = $fileList[$i] ; Dosya okunamazsa, hata mesajı yazdır ve diğer dosyaya geç If Not FileExists(@ScriptDir & "\" & $inputFileName) Then MsgBox(16, "Hata", $inputFileName & " dosyası okunamadı.") ContinueLoop EndIf ; Dosyayı oku ve verileri diziye aktar ;~ Local $fileContent = FileRead(@ScriptDir & "\" & $inputFileName) ;~ Local $dataArray = StringSplit(StringStripCR($fileContent), @LF, 1) Local $dataArray _FileReadToArray(@ScriptDir & "\" & $inputFileName, $dataArray, $FRTA_NOCOUNT, '|') _ArrayDisplay($dataArray) ; Verileri excel dosyasına aktar Local $oSheet = _Excel_BookNew($oWorkbook, 1) _Excel_RangeWrite($oSheet, $dataArray, "A1") Next ; Excel uygulamasını kapat _Excel_BookSaveAs($oWorkbook, @ScriptDir & "\" & $OutFile, "xlsx") _Excel_BookClose($oWorkbook, 0) _Excel_Close($oExcel) Does the _ArrayDisplay for $dataArray look correct? What happens in Excel, does the data get inserted? Can you provide some screenshots or more information on what the problem is with the code? We ought not to misbehave, but we should look as though we could. Link to comment Share on other sites More sharing options...
mucitbey Posted April 11, 2023 Author Share Posted April 11, 2023 20 hours ago, mistersquirrle said: I don't have Excel so I can't test this myself, but what's the current problem that you're having with what you've posted? I imagine that 1 issue is that if your file is separated by a pipe ( | ), everything is maybe being put just into 1 cell in the workbook? You may want to check out this function: https://www.autoitscript.com/autoit3/docs/libfunctions/_FileReadToArray.htm, so that you can split up the text file better. Something like this: expandcollapse popup; https://www.autoitscript.com/forum/topic/210050-export-text-file-contents-to-excel/ #cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.16.1 Author: myName Script Function: Template AutoIt script. #ce ---------------------------------------------------------------------------- ; Script Start - Add your code below here #include <Array.au3> #include <Excel.au3> #include <File.au3> Global $OutFile = "Yeni.xlsx" Local $oExcel = _Excel_Open() ; Excel uygulaması başarısız olduysa, hata mesajı yazdır ve kodu sonlandır If @error Then MsgBox(16, "Hata", "Excel uygulaması açılamadı.") Exit EndIf ; Çıktı dosyasını aç Local $oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & "\" & $OutFile) ; Çıktı dosyası açılamazsa, hata mesajı yazdır ve kodu sonlandır If @error Then MsgBox(16, "Hata", "Çıktı dosyası açılamadı.") _Excel_Close($oExcel) Exit EndIf ; Okunacak dosyaların adlarını al Local $fileList = _FileListToArray(@ScriptDir, "*.txt") ; Okunacak dosya sayısı Local $fileCount = UBound($fileList) - 1 ; Her dosyayı oku ve excel dosyasına aktar For $i = 1 To $fileCount Step 1 ; Okunacak dosyanın adı Local $inputFileName = $fileList[$i] ; Dosya okunamazsa, hata mesajı yazdır ve diğer dosyaya geç If Not FileExists(@ScriptDir & "\" & $inputFileName) Then MsgBox(16, "Hata", $inputFileName & " dosyası okunamadı.") ContinueLoop EndIf ; Dosyayı oku ve verileri diziye aktar ;~ Local $fileContent = FileRead(@ScriptDir & "\" & $inputFileName) ;~ Local $dataArray = StringSplit(StringStripCR($fileContent), @LF, 1) Local $dataArray _FileReadToArray(@ScriptDir & "\" & $inputFileName, $dataArray, $FRTA_NOCOUNT, '|') _ArrayDisplay($dataArray) ; Verileri excel dosyasına aktar Local $oSheet = _Excel_BookNew($oWorkbook, 1) _Excel_RangeWrite($oSheet, $dataArray, "A1") Next ; Excel uygulamasını kapat _Excel_BookSaveAs($oWorkbook, @ScriptDir & "\" & $OutFile, "xlsx") _Excel_BookClose($oWorkbook, 0) _Excel_Close($oExcel) Does the _ArrayDisplay for $dataArray look correct? What happens in Excel, does the data get inserted? Can you provide some screenshots or more information on what the problem is with the code? First Problem It doesn't create the new.xlsx file, I create it manually before running the code. (This is not a major issue.) There is no problem with the Array representation, it works correctly. But it does not write to Excel file. For the data in each text file read; (New.xlsx) filename to page name, read data to page content, "|" I'm trying to get it to write each data separated by a . I hope I was able to explain as I have little knowledge of English. Link to comment Share on other sites More sharing options...
mistersquirrle Posted April 11, 2023 Share Posted April 11, 2023 (edited) Try this, again I can't test it because I don't have Excel, however there were a few issues with what you had when I looked at the functions vs the helpfile: expandcollapse popup#include <Array.au3> #include <Excel.au3> #include <File.au3> Global $OutFile = "Yeni.xlsx" Global $oExcel = _Excel_Open() ; Excel uygulaması başarısız olduysa, hata mesajı yazdır ve kodu sonlandır If @error Then ConsoleWrite('Excel uygulaması açılamadı. Unable to _Excel_Open, @error: ' & @error & ', @extended: ' & @extended & @CRLF) Exit EndIf ; Çıktı dosyasını aç ; Try to open an existing book, if not it'll try to create a new one Global $oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & "\" & $OutFile) ; Çıktı dosyası açılamazsa, hata mesajı yazdır ve kodu sonlandır If @error Then ConsoleWrite('Çıktı dosyası açılamadı. Unable to do _Excel_BookOpen, @error: ' & @error & ', @extended: ' & @extended & @CRLF) ConsoleWrite('Trying to create a new book and save it...' & @CRLF) $oWorkbook = _Excel_BookNew($oExcel, 1) If @error Then ConsoleWrite('Unable to do _Excel_BookNew, @error: ' & @error & ', @extended: ' & @extended & @CRLF) Exit EndIf _Excel_BookSaveAs($oWorkbook, @ScriptDir & "\" & $OutFile, $xlWorkbookDefault, True) If @error Then ConsoleWrite('Unable to do _Excel_BookSaveAs, @error: ' & @error & ', @extended: ' & @extended & @CRLF) Exit EndIf EndIf ; Okunacak dosyaların adlarını al Global $fileList = _FileListToArray(@ScriptDir, "*.txt") ; Okunacak dosya sayısı Global $fileCount = UBound($fileList) - 1 Global $inputFileName Global $dataArray Global $oSheet ; Her dosyayı oku ve excel dosyasına aktar For $i = 1 To $fileCount Step 1 ; Okunacak dosyanın adı $inputFileName = $fileList[$i] ; Dosya okunamazsa, hata mesajı yazdır ve diğer dosyaya geç If Not FileExists(@ScriptDir & "\" & $inputFileName) Then MsgBox(16, "Hata", $inputFileName & " dosyası okunamadı.") ContinueLoop EndIf ; Dosyayı oku ve verileri diziye aktar ;~ Local $fileContent = FileRead(@ScriptDir & "\" & $inputFileName) ;~ Local $dataArray = StringSplit(StringStripCR($fileContent), @LF, 1) _FileReadToArray(@ScriptDir & "\" & $inputFileName, $dataArray, $FRTA_NOCOUNT, '|') ; _ArrayDisplay($dataArray) ; Verileri excel dosyasına aktar ;~ $oSheet = _Excel_BookNew($oExcel, 1) $oSheet = _Excel_SheetAdd($oWorkbook, -1, False, 1, $inputFileName) If @error Then ConsoleWrite('Unable to do _Excel_BookNew, @error: ' & @error & ', @extended: ' & @extended & @CRLF) ContinueLoop EndIf _Excel_RangeWrite($oWorkbook, $oSheet, $dataArray, "A1") If @error Then ConsoleWrite('Unable to do _Excel_RangeWrite, @error: ' & @error & ', @extended: ' & @extended & @CRLF) ContinueLoop EndIf Next ; Excel uygulamasını kapat _Excel_BookSaveAs($oWorkbook, @ScriptDir & "\" & $OutFile, $xlWorkbookDefault) If @error Then ConsoleWrite('Unable to do _Excel_BookSaveAs, @error: ' & @error & ', @extended: ' & @extended & @CRLF) EndIf _Excel_BookClose($oWorkbook, False) If @error Then ConsoleWrite('Unable to do _Excel_BookClose, @error: ' & @error & ', @extended: ' & @extended & @CRLF) EndIf _Excel_Close($oExcel) If @error Then ConsoleWrite('Unable to do _Excel_Close, @error: ' & @error & ', @extended: ' & @extended & @CRLF) EndIf I added some more logging, so that you can see what/where a problem exists. If you can, try this and then copy/paste the output in the console here so that I can see what messages come up. As for the issues that you had, I don't think that _Excel_BookNew is what you wanted before you wrote data. When writing data, _Excel_RangeWrite using the wrong parameters, and needed $oWorkbook first. The third parameter of _Excel_BookSaveAs was also incorrect, it should be something from: https://learn.microsoft.com/en-us/office/vba/api/excel.xlfileformat Edited April 11, 2023 by mistersquirrle mucitbey 1 We ought not to misbehave, but we should look as though we could. Link to comment Share on other sites More sharing options...
ioa747 Posted April 11, 2023 Share Posted April 11, 2023 (edited) expandcollapse popup#include <Array.au3> #include <Excel.au3> #include <File.au3> Global $OutFile = @ScriptDir & "\Yeni.xls" Local $oExcel = _Excel_Open() ; Excel uygulaması başarısız olduysa, hata mesajı yazdır ve kodu sonlandır If @error Then MsgBox(16, "Hata", "Excel uygulaması açılamadı.") Exit EndIf ; Çıktı dosyasını aç ;~ Local $oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & "\" & $OutFile) Global $oWorkbook = _Excel_BookNew($oExcel, 1) ; Çıktı dosyası açılamazsa, hata mesajı yazdır ve kodu sonlandır If @error Then MsgBox(16, "Hata", "Çıktı dosyası açılamadı.") _Excel_Close($oExcel) Exit EndIf ; Okunacak dosyaların adlarını al Global $fileList = _FileListToArray(@ScriptDir, "*.txt") ConsoleWrite("$fileList[0]=" & $fileList[0] & @CRLF) ;~ ; Okunacak dosya sayısı ;~ Local $fileCount = UBound($fileList) - 1 Global $inputFileName, $fileContent, $dataArray, $oSheet, $iRow ; Her dosyayı oku ve excel dosyasına aktar For $i = 1 To $fileList[0] ; Okunacak dosyanın adı $inputFileName = $fileList[$i] ConsoleWrite("$inputFileName=" & $inputFileName & @CRLF) ;~ ; Dosya okunamazsa, hata mesajı yazdır ve diğer dosyaya geç ;~ If Not FileExists(@ScriptDir & "\" & $inputFileName) Then ;~ MsgBox(16, "Hata", $inputFileName & " dosyası okunamadı.") ;~ ContinueLoop ;~ EndIf ; Dosyayı oku ve verileri diziye aktar $fileContent = FileRead(@ScriptDir & "\" & $inputFileName) $dataArray = StringSplit(StringStripCR($fileContent), @LF, 1) ; Verileri excel dosyasına aktar ;~ $oSheet = _Excel_BookNew($oWorkbook, 1) ;~ _Excel_RangeWrite($oSheet, $dataArray, "A1") $oSheet = _Excel_SheetAdd($oWorkbook, 1, True, 1, $inputFileName) If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_SheetAdd", "Error adding sheet." & @CRLF & "@error = " & @error & ", @extended = " & @extended) For $r = 1 To $dataArray[0] $oSheet.Cells($r, 1).Value = $dataArray[$r] Next Next ; Excel uygulamasını kapat ;~ _Excel_BookSaveAs($oWorkbook, @ScriptDir & "\" & $OutFile, "xlsx") $oWorkbook.SaveAs($OutFile) _Excel_BookClose($oWorkbook, 0) _Excel_Close($oExcel) @mistersquirrle you got me Edited April 11, 2023 by ioa747 mucitbey 1 I know that I know nothing Link to comment Share on other sites More sharing options...
ioa747 Posted April 11, 2023 Share Posted April 11, 2023 I changed the StringSplit to the _ArrayFromString for a better fit in the cells with the | and the @CRLF expandcollapse popup#include <Array.au3> #include <Excel.au3> #include <File.au3> Global $OutFile = @ScriptDir & "\Yeni.xls" Local $oExcel = _Excel_Open() ; Excel uygulaması başarısız olduysa, hata mesajı yazdır ve kodu sonlandır If @error Then MsgBox(16, "Hata", "Excel uygulaması açılamadı.") Exit EndIf ; yeni dosya aç Global $oWorkbook = _Excel_BookNew($oExcel, 1) ; Okunacak dosyaların adlarını al Global $fileList = _FileListToArray(@ScriptDir, "*.txt") ConsoleWrite("$fileList[0]=" & $fileList[0] & @CRLF) Global $inputFileName, $fileContent, $dataArray, $oSheet, $iRow ; Her dosyayı oku ve excel dosyasına aktar For $i = 1 To $fileList[0] ; Okunacak dosyanın adı $inputFileName = $fileList[$i] ConsoleWrite("$inputFileName=" & $inputFileName & @CRLF) ; Dosyayı oku ve verileri diziye aktar $fileContent = FileRead(@ScriptDir & "\" & $inputFileName) $dataArray = _ArrayFromString($fileContent) ; Verileri excel dosyasına aktar $oSheet = _Excel_SheetAdd($oWorkbook, -1, True, 1, $inputFileName) If @error Then MsgBox(16, "Hata", "Sayfa eklenirken bir hata oluştu.") Exit EndIf _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $dataArray, "A1") If @error Then MsgBox(16, "Hata", "Çalışma sayfasına yazarken hata.") Exit EndIf Next ; Excel uygulamasını kapat $oWorkbook.SaveAs($OutFile) _Excel_BookClose($oWorkbook, 0) _Excel_Close($oExcel) mucitbey 1 I know that I know nothing Link to comment Share on other sites More sharing options...
mucitbey Posted April 12, 2023 Author Share Posted April 12, 2023 5 hours ago, ioa747 said: I changed the StringSplit to the _ArrayFromString for a better fit in the cells with the | and the @CRLF expandcollapse popup#include <Array.au3> #include <Excel.au3> #include <File.au3> Global $OutFile = @ScriptDir & "\Yeni.xls" Local $oExcel = _Excel_Open() ; Excel uygulaması başarısız olduysa, hata mesajı yazdır ve kodu sonlandır If @error Then MsgBox(16, "Hata", "Excel uygulaması açılamadı.") Exit EndIf ; yeni dosya aç Global $oWorkbook = _Excel_BookNew($oExcel, 1) ; Okunacak dosyaların adlarını al Global $fileList = _FileListToArray(@ScriptDir, "*.txt") ConsoleWrite("$fileList[0]=" & $fileList[0] & @CRLF) Global $inputFileName, $fileContent, $dataArray, $oSheet, $iRow ; Her dosyayı oku ve excel dosyasına aktar For $i = 1 To $fileList[0] ; Okunacak dosyanın adı $inputFileName = $fileList[$i] ConsoleWrite("$inputFileName=" & $inputFileName & @CRLF) ; Dosyayı oku ve verileri diziye aktar $fileContent = FileRead(@ScriptDir & "\" & $inputFileName) $dataArray = _ArrayFromString($fileContent) ; Verileri excel dosyasına aktar $oSheet = _Excel_SheetAdd($oWorkbook, -1, True, 1, $inputFileName) If @error Then MsgBox(16, "Hata", "Sayfa eklenirken bir hata oluştu.") Exit EndIf _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $dataArray, "A1") If @error Then MsgBox(16, "Hata", "Çalışma sayfasına yazarken hata.") Exit EndIf Next ; Excel uygulamasını kapat $oWorkbook.SaveAs($OutFile) _Excel_BookClose($oWorkbook, 0) _Excel_Close($oExcel) Good luck with your spirit. All data is seamlessly exported to Excel spreadsheets. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now