2015-11-01 2 views
1

У меня возникли проблемы с пониманием, почему excel изменение, содержащее данные текстового файла при его открытии.Изменение данных в Excel

Скажем, у меня есть текстовый файл с измененным расширением «mydata.xls», который содержит следующие строки:

01E0 
01E1 

и когда я открываю его в Excel это дает мне следующие результаты:

1,00E+00 
1,00E+01 

Есть ли способ избежать этого?

Я бы предпочел решение vba для этой проблемы.

Update 1

Беллоу фрагмент текстового файла:

Ordr MaterialS Description System Stat Version Tgt qty Bsc start Basic fin. 

9531422 1140413 NALSARTTING IECHO RL MSYT PCZF* 01E1  2.400 26.10.2015 01.11.2015 
21531847 1201013 XALWARTTING IECHOO RL PCYF PRC ASG AAGS APRS BASC BCRQ* 01E1  25.500 26.10.2015 02.10.2015 
    412714199 4443247826 FOKSAMAT CETZ MSPT PEC APG APGS APRS BYRQ PUMN* 0101   4.250 02.11.2015 09.11.2015 

закодированные в UCS-2 Little Endian.

Беллоу код VBA я использую, чтобы открыть файл:

Workbooks.OpenText fileName:=path, Tab:=True, ThousandsSeparator:=".", DecimalSeparator:="," 
Set openWb = ActiveWorkbook 

Вот еще один пример:

0100 goes to 100 
    0101 goes to 101 
    0102 goes to 102 
    0103 goes to 103 
+0

Почему 'текст file' называется' mydata.xls'? Расширение 'xls' означает файл Excel в формате BIFF. И «Я предпочитаю решение vba для этой проблемы». Значит что? У вас работает Excel и вам нужно открыть текстовый файл в качестве новой рабочей книги или импортировать содержимое текстового файла в существующем листе? –

+0

Поскольку я использую SAP для экспорта данных в локальный файл, и я не знал, что SAP только изменяет расширение текстового файла на xls. У меня есть рабочая книга excel, и мне просто нужно открыть экспортированный файл для копирования данных в существующую книгу. –

+0

Тогда вы должны больше объяснить тип текстового файла, так как я подозреваю, что существует более одного поля. Итак, какой текстовый файл? Разграничены ли табуляторы полей? Запятая запятая? Точка с запятой ограничена? Фиксированная ширина? Пожалуйста, разместите как минимум 3 строки примера вашего вопроса. И что такое кодировка? UFT-8? ANSI aka Windows 1252? Другие? –

ответ

0

Так я предположил, что файл с разделителями табуляции и есть 8 колонок и столбец 4. «Состояние системы» с контентом 01E1.

enter image description here

Я хотел бы предложить следующий подход:

Пусть VBA вставить новый лист, затем QueryTable в этой таблице. При этом мы больше контролируем типы столбцов. Затем, после обновления QueryTable, получите содержимое с этого листа и, если это будет сделано, удалите этот рабочий лист.

Sub Makro1() 

Dim oQueryTable As QueryTable 

Set oSheet = ThisWorkbook.Worksheets.Add 

Set oQueryTable = oSheet.QueryTables _ 
     .Add(Connection:="TEXT;C:\Users\axel\Desktop\mydata.xls", _ 
     Destination:=oSheet.Cells(1, 1)) 

With oQueryTable 
     .Name = "mydata" 
     .TextFileParseType = xlDelimited 
     .TextFileConsecutiveDelimiter = False 
     .TextFileTabDelimiter = True 
     .TextFileSemicolonDelimiter = False 
     .TextFileCommaDelimiter = False 
     .TextFileSpaceDelimiter = False 
     .TextFileColumnDataTypes = Array(xlGeneralFormat, xlGeneralFormat, xlGeneralFormat, xlTextFormat, xlGeneralFormat, xlGeneralFormat, xlDMYFormat, xlDMYFormat) 
     .TextFileTrailingMinusNumbers = True 
     .Refresh BackgroundQuery:=False 
End With 

    'from here on the code which gets the data from oSheet 

'oSheet.Delete 

End Sub 

Обратите внимание на .TextFileColumnDataTypes = Array(xlGeneralFormat, xlGeneralFormat, xlGeneralFormat, xlTextFormat, xlGeneralFormat, xlGeneralFormat, xlDMYFormat, xlDMYFormat) это описывает тип содержимого каждого из 8 столбцов. Я устанавливаю столбец 4 в текстовое содержимое. Поэтому он не будет интерпретироваться как число в экспоненциальной нотации.

Результат:

enter image description here

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