使用本地化在Excel中导入CSV US格式的数字?

时间:2017-03-21 12:44:55

标签: excel csv localization

我有一个包含以下值的.csv文件:

1488201602.653, 8.304700E-04, 3.079498E-03
1488201603.107, 8.677357E-04, 2.856719E-03
1488201821.012, 7.071995E-04, 4.147542E-03

从代码段中可以看出,数字的格式不同:第一列有一个完整的数字,句号.是小数点分隔符。除了使用大写E之外,第二列和第三列都有科学记数法的数字,并且小数分隔符再次使用句号;任何值都没有千位分隔符。

当我尝试在丹麦本地化版本的Excel 2016中导入它时,我得到的是这样的:

enter image description here

所以,我显然在第一列中获得了数千个分隔符.,但是,如果我选择第一个数字,则公式字段会显示:

enter image description here

...意思是1488201602.653文件中原来.csv的数字现在被解释为整数1488201602653,这是完全错误的。

对于第二和第三列,如果我选择一个数字,则公式字段显示:

enter image description here

...意思是8.304700E-04文件中最初为.csv的数字,然后在单元格中变为8,30E+02,在{{1}中显示为830,47 ,再次 - 完全错误。

如何说服Excel导入.csv文件中的数据,该文件在美国或C语言环境中以正确的数值输入,以便在丹麦语本地化下正确显示({{1} }和.csv)?

2 个答案:

答案 0 :(得分:2)

好吧,我找到了一种手动方式来处理这个问题,但是知道是否有自动问题仍然很好。

首先,如果您还没有,请获取并安装Notepad++

然后,请注意:

  • 在美国(或“C”语言)本地化下,没有千位分隔符(即它是一个空字符串,“”) - 在丹麦语本地化下,千位分隔符是句点“.
  • 在美国(或“C”语言)本地化下,小数点分隔符为句点“.” - 在丹麦语本地化下,小数点分隔符为逗号“,
  • 丹麦本地化要求电子符号指数写成微不足道的字母e,而不是大写字母E

然后,在Notepad ++中打开您的.csv文件,并可能将其另存为不同文件名下的副本。然后,按以下顺序执行以下替换:

  • 搜索逗号, - >替换为分号;(全部替换)
  • 搜索期间. - >替换为逗号,(全部替换)
  • 搜索大写E - >替换为微不足道e(全部替换)

然后保存文件,并将其导入Excel。在Excel中导入时,请记住将分号;指定为CSV字段分隔符 - 并且应该读入并正确解释数字(至少根据OP示例)。

答案 1 :(得分:1)

我会尝试使用VBA(未经测试):

Sub ImportCSVFile()
    Dim xFileName As Variant
    xFileName = Application.GetOpenFilename("CSV File (*.csv), *.csv", , "Choose CSV", , False)
    If xFileName = False Then Exit Sub

    Dim wS As Worksheet
    Set wS = ThisWorkbook.Sheets.Add
    Dim rG As Range
    Set rG = wS.Range("A1")

    Dim QT As QueryTable
    With wS
        Set QT = .QueryTables.Add("TEXT;" & xFileName, rG)
        With QT
            '''Preserve initial format
            .PreserveFormatting = True
            '''Select the delimiter
            .TextFileParseType = xlDelimited
            .TextFileCommaDelimiter = True
            '''Choose refresh options
            .RefreshStyle = xlInsertDeleteCells
            .RefreshOnFileOpen = False
            .RefreshPeriod = 0
            .SaveData = True
            '''Import the data
            .Refresh BackgroundQuery:=False
        End With 'QT
        '''Force the formatting
        Call .Columns("1:3").Replace(".", ",")
    End With 'wS
End Sub