2009-01-14 6 views
5

में multiline csv फ़ाइलों को आयात करें एक .csv फ़ाइल है जिसे हम अपने ग्राहकों को वितरित करना चाहते हैं, इसमें मल्टीलाइन प्रविष्टियां हैं (यानी न्यूलाइन के साथ प्रविष्टियां)। ग्राहकों की भाषा सेटिंग्स के आधार पर, फ़ाइल एक्सेल में सही ढंग से आयात की जा सकती है या नहीं। आम तौर पर, हम फ़ाइल आयात करने के लिए उपयोग करने का सुझाव देंगे, लेकिन मल्टीलाइन प्रविष्टियों के साथ कुछ बग प्रतीत होता है, इसलिए वे अलग-अलग लाइनों में 'अलग हो जाएंगे' (उत्सुकता से, यह तब नहीं होता जब फ़ाइल सीधे खुलती है)।एक्सेल में अंतरराष्ट्रीय रूप से

कुछ भाषाओं (जैसे अंग्रेजी) के साथ, अल्पविराम के साथ एक सीएसवी सही ढंग से खोला जाता है, लेकिन सेमीकॉलन वाली फ़ाइल नहीं। अन्य भाषाओं (जैसे जर्मन) के साथ, सेमीकॉलन वाला एक सीएसवी सीधे खोला जा सकता है, लेकिन अल्पविराम वाली फ़ाइल नहीं।

आयात multiline प्रविष्टियों में मदद नहीं करता है।

नमूना CSV फ़ाइल (2 सीएसवी पंक्तियां):

A; B; "some 
stuff"; C; 
1; 2; "another line"; 3; 

सही आयात (2 एक बहु प्रवेश के साथ लाइनों):

A B (some 
stuff) C 
1 2 (another line) 3 

गलत आयात (3 लाइनों):

A; B; C; "some 
stuff";D; 
1; 2; "another line"; 3; 

हस्तक्षेप करने की एक और संभावना है - कॉलम का चयन करने और डेटा के नीचे कॉलम पर टेक्स्ट दबाएं। यह एक विभाजक के आधार पर अच्छी तरह से लाइनों को विभाजित करता है, लेकिन फिर भी न्यूलाइन के आसपास नहीं मिलता है।

क्या एक सीएसवी फ़ाइल आयात करना संभव है, ताकि बहु-प्रविष्टियों को हमेशा पहचाना जा सके?

उत्तर

1

आपका प्रश्न बिल्कुल स्पष्ट नहीं है, लेकिन मुझे लगता है कि यह वही है जो आप चाहते हैं: नोट: किसी कारण से त्रुटि पकड़ने में त्रुटि सही ढंग से पेस्ट नहीं की गई। क्षमा करें

Public Sub ReadCSV() 
'' Assumes all records: 
'' Have 5 fields 
'' The fields are delimited by a ; 
'' The Last field ends in a ; 

Dim FileName As String 
Dim ExcelRow As Long 
Dim WorkSheetName As String 
Dim FieldValue(5) As String 
Dim FieldNo As Integer 
Dim StringPosition As Integer 
Dim LineFromFile As String 
Dim CharFromLine As String 

WorkSheetName = "Sheet1" 
ExcelRow = 2 '' Assumes Row 1 is a heading that you should not delete 

'' Get the FileName and Open the file 
If Application.FileDialog(msoFileDialogOpen).Show <> -1 Then Exit Sub 
FileName = Application.FileDialog(msoFileDialogOpen).SelectedItems(1) 

On Error GoTo OpenError 
Open FileName For Input As #1 

'' Clear old data from the workbook 
sRange = WorkSheetName + "!A2:E65536" 
Range(sRange).ClearContents '' Preserves formatting 

'' Read The file one line at a time 
On Error GoTo ReadError 
While Not EOF(1) 
    Line Input #1, LineFromFile 
    Debug.Print LineFromFile 
    FieldNo = 1 
    While FieldNo <= 5 '' 5 is the number of fields in a record 
     DoEvents 
     FieldValue(FieldNo) = "" 
     StringPosition = 1 
     '' Examine each character from the line 
     While StringPosition <= Len(LineFromFile) 
      CharFromLine = Mid(LineFromFile, StringPosition, 1) 
      If CharFromLine = ";" Then '' ";" is the delimitor in the delimited file 
       FieldNo = FieldNo + 1 
       If FieldNo < 6 Then FieldValue(FieldNo) = "" 
      Else 
       FieldValue(FieldNo) = FieldValue(FieldNo) + CharFromLine 
      End If 
      '' Test to see if we're at the end of a line, but haven't got all the fields yet 
      If StringPosition = Len(LineFromFile) And FieldNo < 6 Then 
       FieldValue(FieldNo) = FieldValue(FieldNo) + Chr(10) '' Add a LineFeed to represent the new line 
       Line Input #1, LineFromFile 
       StringPosition = 0 
      End If 
      StringPosition = StringPosition + 1 
     Wend 
    Wend 
    '' Put the Data in the Workbook 
    For FieldNo = 1 To 5 
     Sheets(WorkSheetName).Cells(ExcelRow, FieldNo).Value = FieldValue(FieldNo) 
    Next FieldNo 
    ExcelRow = ExcelRow + 1 
Wend 
Exit Sub 
OpenError: 
    Call MsgBox("Error Opening File:" + FileName, vbCritical, "File Open Error") 
    Exit Sub 
ReadError: 
    Call MsgBox("Error Reading File:" + FileName, vbCritical, "File Read Error") 
End Sub 
2

आपको शायद यह ओपनऑफिस में ठीक खुल जाएगा। मैंने किया।

इस मामले में, आप इसे एक्सेल शीट के रूप में सहेज सकते हैं, और दोनों फ़ाइलों को अपने ग्राहकों को वितरित कर सकते हैं।