如何在不打开数据的情况下通过Excel打开和保存CSV文件中的前导撇号?

时间:2014-04-10 11:25:04

标签: excel csv escaping data-loss

我们尝试使用Python中的CSV文件,允许用户在Excel中编辑它们,而不会丢失数据。但是,在Excel中使用撇号来转义文本以及CSV格式的实现似乎可以防止这种情况。为清楚起见,我将使用以下术语:

  • 引用引用一个CSV单元格,该单元格使用双引号进行文字引用,不加引号引用一个不是
  • 的单元格
  • 撇号转义以引用Excel单元格,该单元格在Excel中的基础值中具有前导撇号作为文本标记,但在没有该前导撇号的情况下显示

基于实验,似乎:

  • CSV单元格中的单个不带引号的'在Excel中打开,作为包含撇号转义空白字符串的单元格(基础值为',显示为空单元格)
  • CSV单元格中的单个引用'在Excel中打开,作为包含撇号转义单撇号的单元格(基础值为'',显示为'
  • 包含撇号转义空白字符串的Excel单元格将另存为空CSV单元格
  • 包含撇号转义撇号的Excel单元格保存为单个不带引号的'

这意味着即使在CSV单元格中引用单个撇号,也会在Excel打开并保存时导致不带引号的撇号;下次打开并通过Excel保存此文件时,将生成一个空白单元格。是否有可能避免这种数据丢失?

PS我知道CSV is not a fully standardized file format;但是我找不到任何专门解决上述问题的文件。

1 个答案:

答案 0 :(得分:0)

一个简单的解决方案是在将字符串存储在Excel中之前替换单引号(撇号).........此示例使用 tilda

Sub ImportFile()
    Close #1
    Open "C:\TestFolder\TestFile.csv" For Input As #1
    j = 1
     Do While Not EOF(1)
            Line Input #1, TextLine
            TextLine = Replace(TextLine, "'", "^")
            Cells(j, 1).NumberFormat = "@"
            Cells(j, 1) = TextLine
            j = j + 1
        Loop
    Close #1
End Sub

这应该将所有数据放入一个列中。

从那里,您可以使用文字到列解析数据,并根据您的选择进行处理。

请务必在保存之前更换tildas。