Проблем при обработката на .csv

5 отговора 0 прегледа
#1

Проблем при обработката на .csv

Боря се с една едни файлове които ги получавам всеки ден във формат .csv да ги прехвърлям в ексел и да ги подрежда всяка от стойностите на различни листа и клетки. Проблема обаче не е в самото подреждане на информацията. Това го направих с VBA. Програмата ми започва с това цялата информация от .csv файла да я прехвърля на един sheet в ексел и съм му казал да чете по редове и да ги намества. Но изникна проблем, че като стартирам VBA кода ми преписва само първият ред от .csv документа. Помислих, че проблема е някъде в моя код, но всъщност се оказа, че ако преди да стартирам програмката отворя .csv файла, цъкна Save и после Close, кода си работи без грешка. Някакви идеи от какво може да възниква този проблем.
П.С Когато Save-на файла е само Save не е Save as, смисъл не променям абсолютно нищо.

Отговор
в отговор на nrganev-218545 #2

Re: Проблем при обработката на .csv

Явно проблемът ти е в кода на VBA. И понеже не даваш никаква информация за този код, пък и съм си забутал нейде светещото кълбо за гадаене - най-добре попитай първо в клуб ВРАЧКИ..
И после каквото ти кажат copy/paste тука и така.

Отговор
в отговор на BatiGogo #3

Re: Проблем при обработката на .csv

Ето това е кода:
Private Sub Sheet1_CommandButton1_Click()
Dim strLine As String, strMass() As String, intCount As Long, strData As String, sObject As Shape
Dim wb1, wb2 As Workbook
Dim ws1, ws2 As Worksheet

strData = InputBox(Prompt:="Âúâåäåòå äàòàòà â ðåäà:ÃîäèíàÌåñåöÄåí", _
Title:="Âúâåäåòå äàòà", Default:="YearMonthDay")
If strData = Cancel Then Exit Sub
If strData = vbNullString Then Exit Sub

On Error GoTo Errhandler
Open "FileName_" & strData & ".csv" For Input As #1
On Error GoTo 0

Do Until EOF(1)
Line Input #1, strLine
strMass() = Split(strLine, ",")
intCount = intCount + 1
Sheet1.Range("A" & intCount) = strMass(0)
Sheet1.Range("B" & intCount) = strMass(1)
Sheet1.Range("C" & intCount) = strMass(2)
Sheet1.Range("D" & intCount) = strMass(3)
Sheet1.Range("E" & intCount) = strMass(4)
Sheet1.Range("F" & intCount) = strMass(5)
Loop

Close

'Ñêðèâàíå íà áóòîíà â íîâèÿò ôàéë'
For Each sObject In ActiveSheet.Shapes
sObject.Visible = False
Next
ActiveWorkbook.SaveAs Filename:="FileName_" & strData & ".xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False

Exit Sub
Errhandler:
MsgBox "Ãðåøêà! Ôàéë ñ òàêàâà äàòà íå ñúùåñòâóâà. Ïðîãðàìàòà ùå ñå èçêëþ÷è."
End Sub

Отговор
в отговор на nrganev-218545 #4

Re: Проблем при обработката на .csv

При мен този код работи. Може би е от версията на ексела?
Аз съм с офис пакет 2003.
На твое място бих инициализирал променливата intcount. M$ я инициализира на 0 в началота, ама все пак...
Не е лошо да се провери как идва CSV файла... Ти предполагаш че е със запетайки, но може да е и с ";". Възможно и това да е проблемът...Да си идва с ";" и като му дадеш save и close твоя ексел да го прави със запетайки...
Виж дали не е така и пиши...
2 съвета:
-напиши си ника с американски букви,че дир-а не харесва кирилицата нещо.
-ако нещо не върви в код на базиката - трасирай и гледай променливите с какво се пълнят...


Ае пиши кво е станало.

Отговор
в отговор на BatiGogo #5

Re: Проблем при обработката на .csv

Проверих го още в началото, идва със запетаи.
Проверих и променливите, всичко си е ок.
Изпробвах кода и на 2003,2007 и на 2010 и е все едно и също.
В крайна сметка добавих към кода само да отваря файла, да му даде Save и тогава да работи с него, но ми е интересно, защо възниква такъв проблем
Благодаря за съветите.

Отговор
в отговор на nrganev-218545 #6

Re: Проблем при обработката на .csv

Сложи една точка на прекъсване в макрото - след Linei nput ... например.
И после трасирай и проверявай какво ти се пълни в променливите.
Ако само един път "върти" цикъла - значи има EOF в текстовия файл след първия ред....

Отговор