为啥将excel格式数据保存为csv格式时,开头为0的数据都把0丢失了呢??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥将excel格式数据保存为csv格式时,开头为0的数据都把0丢失了呢??相关的知识,希望对你有一定的参考价值。

比如说09330保存为csv格式时在打开后就变为9330
那怎么打开时可以不丢失0呢

将excel格式数据保存为csv格式时,开头为0的数据都把0丢失了是设置错误造成的,解决方法为;

1、如下图,打开一张空白表格。

2、选中A1单元格,单击鼠标右键,在弹出的下拉菜单中选择【设置单元格格式】选项。

3、在弹出的【设置单元格格式】对话框中选择“文本”选项。

4、单击【确定】按钮,返回到工作表中输入0开头的数据按回车即可。

参考技术A

这是由于设置不当导致的。

解决办法:

    打开文件,鼠标选择要更改的单元格。

    Ctrl+H  ,替换功能,上面那个框输入0,下面那个框不输入任何值。

    回车。这样就把账号里边的0全部去掉了。


如果账号里边本身含有0,这也好办。

    在账号右侧插入列。

    比如账号为K列,那在L列的K2位置输入:

    =MID(K2,1,LEN(K2)-1)

    这样账号后边的那个0就自动没有了。

参考技术B CSV格式是以纯文本形式存储表格数据(数字和文本),如果你在Excel里格式设置单元格为5位数的,不足5位,前面自动添0的这类格式,在保存为csv格式时将自动清掉格式,从而丢失。 参考技术C .csv格式的文件是一种纯文本格式,因此,某个单元格中的数字,哪怕设置成了“文本”属性或者“特殊”属性,另存为.csv格式文件后,这些特性会被丢失的本回答被提问者采纳 参考技术D 将单元格属性设置为文本,或在0前面加上 ' 符号

DB Csv 导出和 Excel 数字格式

【中文标题】DB Csv 导出和 Excel 数字格式【英文标题】:DB Csv export and Excel numbers formating 【发布时间】:2021-03-17 09:06:21 【问题描述】:

我正在从数据库中以 csv 格式导出表格。我有以 0 开头的数字,例如 04596 或 059438。 如果我在 LibreOffice 或 Excel 中打开这个 csv,0 将被丢弃,数字显示为 4596 和 59438。 我正在将数字导出为文本,如果我在 notepad++ 中打开 csv 文件,0 就在那里,所有这些。

是否有一种解决方法可以使数字在文件中时可见?

【问题讨论】:

这些数字在 CSV 文件中是否有引号? 不。只是一个纯文本。我做了 $temp['number'] = " ' " . $arr['number'] . " ' " 这样的技巧,它在 Excel 中将数字显示为 '04569' 但对这个文件的进一步操作并不容易 也许可以试试双引号? $temp = '"' . $arr['number'] . '"'; 不幸的是,这也没有成功。它们都在 Excel 或 LibreOffice 中显示为“04569”或“04569”,并带有引号。 不要打开文件。您必须将文件导入到 Excel 中,并在导入时将该列指定为文本。为此,您可以使用 Power Query(和转换)或旧版向导。 【参考方案1】:

当您在 Calc 中手动打开 CSV 文件时,您会看到文本导入过滤器设置窗口。花点时间点击确定,不要跳过这一步!

选择不应被识别为数字但应保留带有前导零的文本的列,并将其类型指定为文本。还要为其余列设置正确的类型。您可以为不需要的列指定隐藏。检查其余参数的状态 - 代码页、语言、文本字段的引号类型等。

现在单击“确定”。确保导入按预期进行。

现在运行这个简单的宏

Sub getMeCode
Dim oDoc As Variant
Dim aArgs As Variant
Dim sResult As String
Dim sTemp As String
    oDoc = ThisComponent
    aArgs = oDoc.getArgs()
    sTemp = getValArg(aArgs, "URL")
    sResult = "Dim sUrl As String, oDoc As Variant" + Chr(10) + "sUrl = convertToURL(""" + convertFromURL(sTemp) +""")" + Chr(10)
    sResult = sResult + "Dim OpenProp(1) as New com.sun.star.beans.PropertyValue" + Chr(10)
    sResult = sResult + "OpenProp(0).name=""FilterName""" + Chr(10)
    sResult = sResult + "OpenProp(1).name=""FilterOptions""" + Chr(10)
    sTemp = getValArg(aArgs, "FilterName")
    sResult = sResult + "OpenProp(0).value=""" + sTemp + """" + Chr(10)
    sTemp = getValArg(aArgs, "FilterOptions")
    sResult = sResult + "OpenProp(1).value=""" + sTemp + """" + Chr(10)
    sResult = sResult + "If Not FileExists(sUrl) Then Exit Sub" + Chr(10)
    sResult = sResult + "oDoc = stardesktop.LoadComponentFromURL(sUrl, ""_blank"",0, OpenProp())"
    MsgBox(sResult,0,"Select, Press Ctrl+C and Paste to macro")
End Sub

这个宏使用 getValArg 辅助函数,这里是它的文本

Function getValArg(aArg As Variant, sNameArg As String) As Variant
Dim i As Long
Dim tmp As Variant
    getValArg = ""
    For i = LBound(aArg) To UBound(aArg)
        tmp = aArg(i)
        If UCase(tmp.Name) = UCase(sNameArg) Then
            getValArg = tmp.Value
            Exit Function
        EndIf
    Next i
End Function

因此,您会收到这样的消息。

注意下划线。如果您只对文件使用这样的参数(无论您使用哪种编程语言在 Calc 中打开文件),那么结果在大多数情况下都是正确的。

【讨论】:

所以,您评论的第一部分成功了!现在我可以看到此列中的所有零,但每次打开文件时都必须更改列类型。我几乎无法理解的带有宏的第二部分。它必须在 LibreOffice 中运行吗?我必须向客户解释,例如,他必须在打开 csv 文件之前运行这个宏? 您可以教客户端在手动打开文件时使用设置窗口。如果客户不愿意学习,您可以使用我的宏输出的代码为那个顽固的客户创建自定义扩展。扩展将是一个宏,但客户不需要知道它——他只会在工具栏上有一个按钮,例如“打开您的价格”,它将始终以所需的形式打开您的文件。我不知道你的任务,我不知道你会训练你的客户多少,我不知道你要花多少努力 明白。那将是 B 计划,你是对的,客户对此非常固执。【参考方案2】:

将其转换为字符串,例如: echo "'".$number."'";

【讨论】:

它已经作为字符串来自db,我不需要转换它

以上是关于为啥将excel格式数据保存为csv格式时,开头为0的数据都把0丢失了呢??的主要内容,如果未能解决你的问题,请参考以下文章

关于excel保存为csv格式后,重新打开文本型数字变为科学计数,且15位后面变成0??

为啥Navicat导出为CSV格式比excel和sql格式的快?

怎样用宏把EXCEL里C列的数据全部自动导出保存为CSV格式?

关于excel保存为csv格式后,重新打开文本型数字变为科学计数,且15位后面变成0??

如何将 Excel 中的日期转换为 ISO 8601 格式

如何批量将CSV格式的文件转化成excel格式