2014-08-25 2 views
0

У моего клиента есть файл, который они использовали в течение некоторого времени для загрузки данных в их приложение. Поле в таблице Oracle - VARCHAR 50. Поле в электронной таблице Excel, которое они используют, равно ширине столбца 50 и помечено как Общее. Я меняю его на текст и сохраняю как .csv. Все строки, которые имеют алфавитно-цифровое значение в поле, сохраняются в порядке, но те, которые все числа преобразуются в научную нотацию. Я нашел что-то здесь, изменив формат (Data> Text to columns) от General to Text. Ничто не превращает числа в текст как другие значения в поле в этой таблице. Что я могу сделать, чтобы это делалось каждый раз? Говорят, что в первый раз они видели это ... Я в этом сомневаюсь. Тем не менее, я нахожусь на пути к решению проблемы. Мне нужно предоставить им решение, чтобы при отправке мне эти данные два раза в год для загрузки, он работает правильно. Любая помощь будет принята с благодарностью. Thanx.Ошибка преобразования файла Excel в .csv

+0

Они используют последнюю версию Excel, как я. Меняются ли на устаревшую версию? –

+0

Пытался повторить проблему, но не смог получить номера, чтобы показать их в научной нотации. Являются ли эти исключительно длинные цифры? – Myles

+0

Поле, которое они импортируют в Oracle, это VARCHAR 50. Средний размер составляет от 35 до 40. –

ответ

0
Public Sub WritetxtFiles() 
    Const DELIMITER As String = "," 
    Dim myRecord As Range 
    Dim myField As Range 
    Dim nFileNum As Long 
    Dim sOut As String 
    Dim counter As Long 
    Dim holder As String 
    Dim theDate As Date 
    Dim formattedDate As String 
    Dim dailyDirectory As String 



    nFileNum = FreeFile 


theDate = Now 
    formattedDate = Format(theDate, "yyyyMMdd") 
    dailyDirectory = "C:\TEMP\" + formattedDate 

    If Dir(dailyDirectory, vbDirectory) = vbNullString Then 
    MkDir (dailyDirectory) 

    Else 
    End If 




Sheets("orig.txt").Activate ' Adjust to match your sheet name 

    Open dailyDirectory & "\orig.txt" For Output As #nFileNum ' Adjust to match your desired output 
    counter = 1 





    For Each myRecord In Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row) 

     If Cells(counter, 1) <> "" Then 


      With myRecord 
       For Each myField In Range("A" & counter, "F" & counter) 
         sOut = sOut & DELIMITER & myField.Text 
       Next myField 

       Print #nFileNum, Mid(sOut, 2) 
       sOut = Empty 
      End With 
     Else 
     End If 
     counter = counter + 1 

    Next myRecord 
    Close #nFileNum 
end sub 

Это создаст разделенный запятыми файл в C: \ Temp [ггггммдд]

+0

Не совсем дата. Я бы изменил число 35-40 на поле 35-40 символов. Я предполагаю, что это будет работать с некоторыми настройками для этого? –

+0

Для этого он должен работать из коробки. Дата используется только для создания выходного каталога и вывода текстового файла. Вы можете удалить его с небольшим количеством работы, но он ничего не вредит, находясь там. Это остаточная часть большей части кода, из которой это произошло. – Myles

+0

Фантастический! Я буду работать над этим и опубликовать свои результаты. Еще раз спасибо! –

0

Ну, это для клиента и гос они не позволяют макросы в своих файлах Excel. Я смог сохранить как книгу 97-2003, а затем сохранить как .csv. Если я открываю Notepad вместо Excel, файл .csv отображается правильно. Если я открою его в Excel, он преобразуется. Идите фигуру. Спасибо за помощь. Хотел бы я использовать его.

+0

Имеет смысл, что оно преобразуется таким образом. Когда вы открываете CSV в excel, у вас нет информации о форматировании, поэтому все ячейки начинаются как общие, поэтому применяются правила автоматической оценки. Лучшее спасибо - это upvote;) – Myles

Смежные вопросы