makasih pak kid, nanti saya pelajari dulu

untuk link
http://excel-mr-kid.blogspot.co.id/2011/07/koneksi-data-ke-text-file-01.html

ini kayanya jawaban dari kasus saya yang sebelumnya



Pada 20 April 2017 22.07, 'Mr. Kid' [email protected] [belajar-excel] <
[email protected]> menulis:

>
>
> oh ok, jadi urutan kolomnya tetap.
>
> Maaf ya, karena sudah terlalu banyak tanya...
> Ada baiknya Anda membaca email ini sampai akhir dan berusaha memahaminya.
>
> Untuk kasus Anda ini, sebenarnya bisa (ingat, sebenarnya bisa)
> diselesaikan dengan mendefinisikan array tersebut berisi banyak sekali
> elemen.
> Contoh : Array(2,2,2,2,2,dst sampai banyak banget sebanyak jumlah kolom
> terbanyak yang mungkin dimiliki oleh suatu text file entah yang mana)
> Meski solusinya sederhana demikian, implikasinya tidaklah sederhana walau
> tampak seakan akan sudah dinamis.
>
> Begini,
> Untuk proses membaca text file (banyak text file) dan akan disalin ke
> sebuah worsheet, umumnya dilakukan dengan salah satu cara berikut :
> 1. memanfaatkan data connection ke text file.
>     > Cara ini mengandalkan file schema.ini di sebuah folder yang berisi
> text file yang akan dibaca
>     > Cara ini cocok untuk delimited text file.
>     > Dalam schema.ini hanya berisi 1 nama file, misalnya myText.txt
>     > Di Excel, pada sebuah sheet dibuat data connection ke text file yang
> merujuk ke nama file myText.txt
>     > Proses di dalam VBA adalah :
>        1. meng-copy text file asal (misal bernama a.txt) ke folder berisi
> schema.ini tadi, dengan nama text file diganti menjadi myText.txt
>        2. melakukan proses refresh
>        3. melakukan copy dari sheet hasil data connection (misal bernama
> sheet 'Koneksi') dan paste values ke sheet 'KumpulanData'
>        *** Jadi, misal di folder bernama SumberTextFile berisi file a.txt,
> b.txt, c.txt dsb
>        *** di folder bernama Proses berisi schema.ini (dibuat dengan
> notepad) dan text file bernama myText.txt
>        *** Proses loop berisi :
>               1. copy a.txt dari folder bernama SumberTextFile ke folder
> Proses dengan nama file menjadi myText.txt
>                        Filecopy "D:\SumberTextFile\" & sFile ,
> "D:\Proses\myText.txt"      'sfile akan berganti isinya tergantung proses
> loop
>               2. Refresh
>                        thisworkbook.refreshall
>               3. copas value antar sheet
>                         sheets("Koneksi").range("a1").
> currentregion.offset(1).copy
>                         with sheets("KumpulanData")
>                                
> .cells(.rows.count,1).end(xlup).offset(1).pastespecial
> xlpastevalues   'sesuaikan opsi jenis pastenya sesuai kebutuhan
>                         end with
>
>         ## Cara ini memiliki keuntungan karena dimungkinkan adanya
> pengolahan terhadap data (bisa dilakukan ETL terhadap isi text file)
> menggunakan query, misalnya mengagregat atau memfilter dan sebagainya. Jadi
> yang diambil dari textfile bisa pada record terpilih atau kolom-kolom
> tertentu maupun kolom-kolom baru hasil komputasi tertentu.
>         ## Prosesnya cepat, nama file yang diproses tetap, yaitu myText.txt
>         ## lebih lengkap tentang membuat koneksi ke sebuah text file bisa
> dilihat mulai dari sini
> <http://excel-mr-kid.blogspot.co.id/2011/07/koneksi-data-ke-text-file-01.html>
> .
>         ## Pada dasarnya datatype akan disesuaikan dengan isi kolom
> tersebut.
>
> 2. memanfaatkan methods OpenText milik object Workbooks.
>     > Silakan lihat di Excel VBA Help -> Excel Object Model References ->
> Workbooks -> OpenText
>     > Cocok untuk text file yang mencerminkan datatype setiap kolom
> (berapapun kolomnya, statis maupun dinamis) yang konsisten.
>     > Permasalahan yang merepotkan adalah penentuan datatype setiap field
> jika memang dibutuhkan karena tidak konsistennya datatype setiap nilai
> dalam sebuah kolom tertentu. Karena diperlukan tabel referensi yang
> mendefinisikan setiap karakteristik text file pada suatu sheet
>     > Jika datatype nya sama untuk setiap kolom akan dipaksa bertipe text,
> maka perlu pendifinisian array pada inputan fieldinfo
>     > Jika datatype nya sama untuk setiap kolom, tetapi jumlah kolomnya
> dinamis, maka pendefinisian array pada inputan fieldinfo cukup
> didefinisikan sebanyak jumlah kolom terbanyak yang diperkirakan. Misal,
> semua file yang dibaca tidak mungkin punya kolom melebihi 50 bijik, maka
> langsung buat array fieldinfo berisi 49 elemen.
>     > Proses loop berisi :
>        1. membuka text file yang di loop dengan workbooks.opentext
>        2. melakukan copas value dari hasil workbooks.opentext ke workbook
> lokasi sheet tujuannya. Misal ke sheet 'kumpulan data'
>        3. menutup workbooks hasil workbooks.opentext tanpa di-save agar
> isi text file tidak berubah.
>
> 3. Membaca setiap baris text file dan melakukan parse (split text)
>      > Proses loop berisi :
>          1. membuka text file dengan Open filenya for input as blabla dan
> seterusnya
>          2. loop setiap baris isi text file dengan do while not eof blabla
>          3. menyimpan isi baris ke sebuah variabel string
>          4. melakukan split text dan menyimpannya ke sebuah variabel array
> bertipe string dengan split( variabel_isi_baris , delimiternya )
>          5. menulis array hasil split text ke worksheet tujuan
>          6. menutup text file dengan close blabla
>
> --- Kembali ke kasus ---
> Pada kasus Anda ini, yang digunakan adalah fitur Get External Data (untuk
> membentuk query table) tapi memanfaatkan opentext (Anda record macro nya
> dengan ribbon Get External Data -> pilih From Text File).
> Proses membuat query table disetiap kali membaca text file baru yang
> di-loop adalah kegiatan yang mubazir.
> Proses split text oleh opentext yang dilakukan berulang dengan ditentukan
> array fieldinfo datatype nya yang terlalu banyak karena jumlah kom yang
> berbeda-beda antar text file juga menambah beban.
> Ada baiknya, Anda beralih untuk menggunakan cara 1.
> --------------------------------
>
> Regards,
> Kid
>
>
>
> 2017-04-20 11:43 GMT+07:00 him mah [email protected] [belajar-excel] <
> [email protected]>:
>
>>
>>
>> kalau wadah sheet nya sih ngga masalah pak, berapapun kolomnya
>>
>> yang masalah adalah jumlah kolom yang ada di text filenya
>> terkait dengan TextFileColumnDataTypes
>>
>> kalau  8 kolom seperti ini
>> Array(1,1,1,1,1,1,1,1)
>>
>> kalau  10 kolom seperti ini
>> Array(1,1,1,1,1,1,1,1,1,1)
>>
>> kalau  15 kolom seperti ini
>> Array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
>>
>>
>> jadi gimana mencuat array nya menjadi dinamis sesuai dengan jumlah kolom
>> yang ada di text filenya
>>
>> terima kasih
>>
>>
>>
>> Pada 20 April 2017 10.23, 'Mr. Kid' [email protected] [belajar-excel] <
>> [email protected]> menulis:
>>
>>>
>>>
>>> hmmm....
>>>
>>> 1. Berarti a.txt yang berisi 8 kolom (misalnya) dengan b.txt yang berisi
>>> 17 kolom (misalnya) memiliki 8 kolom pertama yang sama ?
>>> 2. Sedang c.txt yang berisi 23 kolom (misalnya) akan memiliki 8 kolom
>>> pertama yang sama dengan a.txt dan b.txt, dan 17 kolom pertama yang sama
>>> dengan b.txt ?
>>> 3. Wadah data (sebuah sheet tempat menyimpan data dari kedua .txt file
>>> tersebut) berisi banyak kolom mengikuti jumlah kolom terbanyak yang sudah
>>> diketahui ? (misal 49 kolom, karena terkadang atau pernah ada z.txt yang
>>> berisi 49 kolom)
>>>
>>> Demikiankah ?
>>>
>>> Regards,
>>> Kid
>>>
>>>
>>>
>>>
>>>
>>>
>>> 2017-04-18 14:25 GMT+07:00 him mah [email protected] [belajar-excel]
>>> <[email protected]>:
>>>
>>>>
>>>>
>>>> Seperti itu pak kid. Cuma sheet hasilnya cuma satu. Data akan
>>>> ditambahkan dibaris selanjutnya.
>>>>
>>>> Yang jadi masalah adalah jumlah kolom yang ada di text file
>>>>
>>>> Pada tanggal 18 Apr 2017 12:54, "'Mr. Kid' [email protected]
>>>> [belajar-excel]" <[email protected]> menulis:
>>>>
>>>>>
>>>>>
>>>>> hmmm....
>>>>> Setiap file txt yang dibaca akan di copy menambahkan di sheet tertentu
>>>>> yang sesuai ya.
>>>>> Jadi ada 3 txt file :
>>>>> a.txt akan di-copy menambahkan data di sheet dtA,
>>>>> b.txt akan di-copy menambahkan data di sheet dtB,
>>>>> c.txt akan di-copy menambahkan data di sheet dtC.
>>>>>
>>>>> Tapi nama txt filenya tidak tetap, seperti bulan ini namanya
>>>>> a-Apr17.txt, b-Apr17.txt, c-Apr17.txt
>>>>> Jumlah kolom di a.txt berbeda dengan di b.txt dan berbeda dengan c.txt.
>>>>>
>>>>> Begitu ya ?
>>>>>
>>>>>
>>>>> 2017-04-18 7:18 GMT+07:00 him mah [email protected]
>>>>> [belajar-excel] <[email protected]>:
>>>>>
>>>>>>
>>>>>>
>>>>>> sebenarnya tujuannya akan dibuat database excel dari beberapa file txt
>>>>>> jadi untuk file D:\aku.txt
>>>>>> akan dibuat dinamis sesuai dengan lsit file yang ada di sheet
>>>>>>
>>>>>> mungkin ada cara lain pak kid
>>>>>>
>>>>>> Pada 17 April 2017 19.35, 'Mr. Kid' [email protected]
>>>>>> [belajar-excel] <[email protected]> menulis:
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Boleh tahu kenapa pakai VBA?
>>>>>>> Bagaimana kalau pakai data connection saja yang tanpa VBA?
>>>>>>>
>>>>>>> Regards,
>>>>>>> Kid
>>>>>>> Sent from my smart enough phone
>>>>>>>
>>>>>>> On Apr 17, 2017, at 13:10, him mah [email protected]
>>>>>>> [belajar-excel] <[email protected]> wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> dear all
>>>>>>>
>>>>>>> maaf mau tanya lagi terkait dengan
>>>>>>> impor data dari text file ke excel
>>>>>>>
>>>>>>> kalau dari menu record macro
>>>>>>> terbentuk kode seperti ini
>>>>>>>
>>>>>>>
>>>>>>>     With ActiveSheet.QueryTables.Add(Connection:= _
>>>>>>>         "TEXT;" & D:\aku.txt" _
>>>>>>>         , Destination:=Worksheets("Sheet 1").Range("$A$1"))
>>>>>>>         .Name = "ImportingFileName"
>>>>>>>         .FieldNames = False
>>>>>>>         .RowNumbers = False
>>>>>>>         .FillAdjacentFormulas = False
>>>>>>>         .PreserveFormatting = True
>>>>>>>         .RefreshOnFileOpen = False
>>>>>>>         .RefreshStyle = xlInsertDeleteCells
>>>>>>>         .SavePassword = False
>>>>>>>         .SaveData = True
>>>>>>>         .AdjustColumnWidth = True
>>>>>>>         .RefreshPeriod = 0
>>>>>>>         .TextFilePromptOnRefresh = False
>>>>>>>         .TextFilePlatform = 437
>>>>>>>         .TextFileStartRow = 2
>>>>>>>         .TextFileParseType = xlDelimited
>>>>>>>         .TextFileTextQualifier = xlTextQualifierDoubleQuote
>>>>>>>         .TextFileConsecutiveDelimiter = False
>>>>>>>         .TextFileTabDelimiter = False
>>>>>>>         .TextFileSemicolonDelimiter = False
>>>>>>>         .TextFileCommaDelimiter = True
>>>>>>>         .TextFileSpaceDelimiter = False
>>>>>>>         .TextFileColumnDataTypes = Array(1,1,1,1,1,1,1,1)
>>>>>>>         .TextFileTrailingMinusNumbers = True
>>>>>>>         .Refresh BackgroundQuery:=False
>>>>>>>     End With
>>>>>>>
>>>>>>>
>>>>>>> yang masih menjadi kendala adalah di baris
>>>>>>>
>>>>>>>         .TextFileColumnDataTypes = Array(2,2,2,2,2,2,2,2)
>>>>>>>
>>>>>>> kalau seperti yang diatas kan jumlah kolomnya ada 8
>>>>>>> misal kita tidak tahu jumlah kolomnya ada berapa
>>>>>>> bisa 8 bisa lebih kecil atau bisa lebih besar
>>>>>>>
>>>>>>> kira-kira untuk
>>>>>>>
>>>>>>> baris tersebut modifikasi seperti apa ya
>>>>>>>
>>>>>>>
>>>>>>> terima kasih
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>
>>
> 
>

Kirim email ke