প্রতি কলাম মান থেকে এক্সেল থেকে পাঠ্য ফাইলগুলি কীভাবে তৈরি করা যায়?


0

আমি ভিবিএতে নতুন, আমি নিজেই এটি করছি। কলাম এ-তে প্রতিটি মানের জন্য পৃথক পাঠ্য ফাইল তৈরি করতে আমাকে স্বয়ংক্রিয় করতে হবে I আমি কলাম এটির মান সহ পাঠ্য ফাইলের নামকরণ করতে চাই, কলাম বিএফের সাথে টেক্সট ফাইলগুলির বিষয়বস্তু রয়েছে,

উদাহরণস্বরূপ: আমার কাছে 20000 সারি (এবং 5 টি কলাম) সহ নীচের মতো কিছু সহ একটি মাস্টার এক্সেল ফাইল রয়েছে:

VendorCode | ItemCode | Price1 | Price2 | Price3 
____________________________________________________
033204     | svk3409  | 23.2   | 23.3   | 23.4
_____________________________________________________
033204     | svk5619  | 24.2   | 24.3   | 24.4
_____________________________________________________
033204     | cli7890  | 34.2   | 34.3   | 34.4
_____________________________________________________
023272     | svk3413  | 18.9   | 18.2   | 18.3
_____________________________________________________
023272     | svk4567  | 90.2   |90.3    | 90.4

আমার কাছে রেফারেন্সগুলি থেকে এখন পর্যন্ত নিম্নলিখিত কোড রয়েছে তবে এটি প্রতিটি বিক্রেতার কোডের জন্য সমস্ত সারি ফেরত দেয় না। এটি প্রতিটি vendorcode.txt এর জন্য কেবল একটি সারি দেয়।

Sub SaveRangeToCsvFiles()
    Dim FileName As String
    Dim Ws As Worksheet
    Dim rngDB As Range
    Dim r As Long, c As Long
    Dim pathOut As String
    Dim i As Long

    pathOut = ThisWorkbook.Path & "\" '<~~ set your path:  C:\temp\

    Set Ws = ActiveSheet 'Sheets("AllData")
    With Ws
        r = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        'c = .Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
        For i = 2 To r
            Set rngDB = .Range("a" & i).Resize(1, 6)
            FileName = .Range("a" & i).Offset(, 4)
            TransToCSV pathOut & FileName & ".txt", rngDB
        Next i
    End With
    MsgBox ("Files Saved Successfully")
End Sub


Sub TransToCSV(myfile As String, rng As Range)
    Dim vDB, vR() As String, vTxt()
    Dim i As Long, n As Long, j As Integer
    Dim objStream
    Dim strTxt As String

    Set objStream = CreateObject("ADODB.Stream")
    vDB = rng
    For i = 1 To UBound(vDB, 1)
        n = n + 1
        ReDim vR(1 To UBound(vDB, 2))
        For j = 1 To UBound(vDB, 2)
            vR(j) = vDB(i, j)
        Next j
        ReDim Preserve vTxt(1 To n)
        vTxt(n) = Join(vR, vbTab)
    Next i
    strTxt = Join(vTxt, vbCrLf)
    With objStream
        '.Charset = "utf-8"
        .Open
        .WriteText strTxt
        .SaveToFile myfile, 2
        .Close
    End With
    Set objStream = Nothing
End Sub

সম্পাদনা করুন: আমি অন্য সংস্থার সহায়তায় চেষ্টা করেছি এবং কোডটি পরিবর্তন করেছি। নিচে দেখ. এখন এটি প্রতিটি ভেন্ডর কোডের জন্য সমস্ত সারি দেয়। পূর্ববর্তী কোডের বিপরীতে, এটি প্রতিটি বিক্রেতার পাঠ্য ফাইলে সারিগুলি ওভাররাইট করে না, পরিবর্তে এটি এতে যুক্ত করে। তবে এই ফলাফলটি নিয়ে সমস্যাটি কলামগুলি পৃথক লাইনে রয়েছে। আমার যা দরকার তা হ'ল সমস্ত কলামগুলি একই লাইনে ট্যাব-সীমান্ত দিয়ে পৃথক করা। আমি কীভাবে দ্বিতীয় কোডটি ঠিক করতে পারি দয়া করে পরামর্শ দিন। আমি যা অর্জন করতে চাই তার খুব কাছাকাছি।

সাব টু ফাইল ()

Dim FilePath As String, CellData As String, LastCol As Long, LastRow As Long
Dim Filenum As Integer, loc As String

LastCol = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
LastRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

'Application.DefaultFilePath = "C:\Users\9418\Desktop\Work Files"
'loc = Application.DefaultFilePath

For i = 1 To LastRow
    FilePath = Application.DefaultFilePath & "\" & Trim(ActiveSheet.Cells(i, 1).Value) & ".txt"
    Filenum = FreeFile

    Open FilePath For Append As Filenum
    CellData = ""

    For j = 2 To LastCol
    CellData = Trim(ActiveSheet.Cells(i, j).Value)
    Print #Filenum, CellData

    Next j

    Close #Filenum

Next i
MsgBox ("Done")

শেষ সাব

** সাম্প্রতিক সম্পাদনা: ** আমি এখানে আমার নিজস্ব উত্তর পোস্ট করছি।

ইন্টারনেটে আরও উল্লেখ করার পরে, আমি অবশেষে নীচের কোডটি নিয়ে এসেছি যা ভেন্ডারকোডের প্রতি সমস্ত সারি পৃথক পাঠ্য ফাইলগুলিতে প্রদান করে এবং কলাম মানগুলিও একই লাইনে রয়েছে। তবে, এখন এই ক্যোয়ারিতে সমস্যাটি হ'ল কিছু পাঠ্য ফাইল ফেরত দেওয়ার পরে কিন্তু যখন কোনও ভেন্ডরকোডের জন্য সারি সংখ্যা বেশি থাকে তখন এটি 'ওভার ফ্লো' ত্রুটি দেয়। আমি আমার মাস্টার ফাইলে সারিগুলি আলাদা এক্সেল ফাইলগুলিতে আলাদা করার চেষ্টা করেছি। প্রতিটি ফাইলের মধ্যে 200-500 সারি থাকে। তবুও এটি ওভার প্রবাহের জন্য আমাকে ত্রুটি দেয়। এই ত্রুটিটি সংশোধন করতে আমি কী করতে পারি দয়া করে কেউ পরামর্শ দিতে পারেন।

অপশন সুস্পষ্ট

সাব ক্রিয়েটফিলইচলাইন ()

Dim myPathTo As String
myPathTo = "\\901db1\IT_Canada\Vending Price Updates"
Dim myFileSystemObject As Object
Set myFileSystemObject = CreateObject("Scripting.FileSystemObject")
Dim fileOut As Object
Dim myFileName As String

Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Dim i As Long

    For i = 2 To lastRow
        If Not IsEmpty(Cells(i, 1)) Then
            myFileName = Cells(i, 1) & ".txt"
            Set fileOut = myFileSystemObject.OpenTextFile(myFileName, 8, True)
            fileOut.write Cells(i, 4) & "   " & Cells(i, 8) & "   " & Cells(i, 8) & "   " & Cells(i, 8) & vbNewLine
            fileOut.Close
        End If
    Next

Set myFileSystemObject = Nothing
Set fileOut = Nothing

শেষ সাব

উত্তর:


0

আপনি ডেটা কাঠামোগত সেট সঙ্গে কাজ করছেন। যেমনটি, আপনি উপরে যা পোস্ট করেছেন তা অ্যালগরিদম আপনি যা করার চেষ্টা করছেন তার জন্য অতিরিক্ত জটিল।

আমার একটি পরামর্শ (সিউডো-কোড)

Set up path (pathOut) and the correct worksheet
Iterate through each row
  If FileName (Cells(1).Text & ".txt") then open file otherwise create new file
  write/append new data (Cells(2) to Cells(5)). ' Do this simply by using the string value & vbTab rather than a more complicated array function. follow up with vbCrLF
  close file

উপরেরটি সহজ তবে খুব অদক্ষ (কোডের প্রতিটি সারি একটি ফাইল অপারেশন)। উন্নত দক্ষতার জন্য, আপনি সারিগুলি ভেন্ডর কোডকে গোষ্ঠীভুক্ত করতে এবং তারপরে প্রতিটি গ্রুপের জন্য একবার ফাইলটি খুলুন এবং বন্ধ করতে পারেন। এর জন্য কোডটি কিছুটা জটিল হবে

[...]
  Set the range for the rows in each group
  Open/create the correct file for write/append
    Iterate through each row and write the data
  Close the file
[...]

আপনি যেমন বর্ণনা করছেন তেমন সহজ পাঠ্য ফাইলগুলির জন্য, আমি সাধারণ ফাইল ক্রিয়াকলাপগুলিকে পছন্দ করি (উদাহরণস্বরূপ https://www.thesPresssheetguru.com/blog/vba-guide-text-files এবং https://msdn.microsoft.com/en -us / vba / ভাষা-রেফারেন্স-ভিবিএ / নিবন্ধ / উন্মুক্ত বিবৃতি ) স্ট্রিম ব্যবহার না করে। তবে, আপনি সাধারণ ফাইল অপারেশন বা স্ট্রিম ব্যবহার করুন না কেন, আপনার স্ট্রিং ম্যানিপুলেশন অনেক সহজ হতে পারে কারণ আপনি কাঠামোগত ডেটা ব্যবহার করছেন। সহজ কোডটি ডিবাগ করা এবং চেক করা সহজ করে তোলে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.