【问题标题】:How can leading apostrophes in a CSV file be opened and saved by Excel without data loss?Excel 如何在不丢失数据的情况下打开和保存 CSV 文件中的前导撇号?
【发布时间】:2014-05-24 01:54:51
【问题描述】:

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

  • quoted 指的是一个 CSV 单元格,其中包含使用双引号的文本引用,而 unquoted 指的是一个没有引用的单元格
  • 撇号转义指的是一个 Excel 单元格,该单元格在 Excel 的基础值中具有作为文本标记的前导撇号,但显示时没有该前导撇号

根据实验,似乎:

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

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

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

【问题讨论】:

    标签: excel csv escaping data-loss


    【解决方案1】:

    一个简单的解决方案是在将字符串存储到 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
    

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

    从那里您可以使用 Text-to-Columns 解析数据并根据您的选择进行处理。

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

    【讨论】:

    • 对;澄清一下,我希望人们通过双击打开文件(扩展名为.csv),这样运行宏代码就很尴尬。我想看看Excel的默认打开和保存csv文件是否可以不丢失数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2021-09-01
    相关资源
    最近更新 更多