2015-11-01 91 views
1

我很难理解为什么excel在打开时包含文本文件的数据更改在Excel中更改数据

比方说,我有一个包含以下几行改变了扩展名“mydata.xls”的文本文件:

01E0 
01E1 

,当我在Excel中打开它,它给了我下面的结果:

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

有什么办法可以避免这种情况?

我宁愿VB解决这个问题。

更新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'意思是一个BIFF格式的Excel文件。而且“我更喜欢vba解决这个问题。”意味着什么?你有Excel运行,需要打开文本文件作为新的工作簿或需要导入文本文件的内容在现有的工作表? –

+0

因为我使用SAP将数据导出到本地文件,而我不知道SAP仅将文本文件的扩展名更改为xls。我有一个excel工作簿正在运行,而我只需要打开导出的文件以将数据复制到现有工作簿。 –

+0

然后,您应该更多地解释文本文件的种类,因为我怀疑有多个字段。那么什么样的文本文件?制表符分隔的不同字段是?逗号分隔?分号分隔?固定宽度?请在您的问题中发布至少3行内容的示例。还有什么是编码? UFT-8? ANSI又名Windows 1252?其他? –

回答

0

所以我认为该文件是制表符分隔,并有8列并且4.列是具有内容01E1的“系统状态”。

​​

我建议以下方法:

让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