Jump to content

Export text file contents to Excel


Recommended Posts

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

#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.

:bye:

Link to comment
Share on other sites

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:

; 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

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:

; 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

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:

#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 by mistersquirrle

We ought not to misbehave, but we should look as though we could.

Link to comment
Share on other sites

 

#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 by ioa747

I know that I know nothing

Link to comment
Share on other sites

 

I changed the StringSplit to the _ArrayFromString  for a better fit in the cells with the | and the @CRLF

#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)

 

I know that I know nothing

Link to comment
Share on other sites

5 hours ago, ioa747 said:

 

I changed the StringSplit to the _ArrayFromString  for a better fit in the cells with the | and the @CRLF

#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. :thumbsup:

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...