我正试图将一个带有前导零的数字的列放入csv文件,但它不断截断前导零,我能做些什么来保持它们?
下面是我使用的代码:// fopen() here
function clean_zip($string){
if(preg_match("/^'d{5,}/", $string)){
$string = str_pad($string, 5, "0", STR_PAD_LEFT);
}
return $string;
}
while(($csv = fgetcsv($rhandle)) !== false){
// other rows here
$fcsv[9] = (string)clean_zip($csv[9]);
fputcsv($whandle, $fcsv);
}
正如在评论中已经指出的那样,用双引号("
)括起来的数字会产生类似"0123"
的结果。
方法是添加一个开头单引号('
),如文档中所写:
如果决定直接输入数字作为文本,请输入撇号(
'
)首先。例如,对于列标题中的年份,您可以输入1999年,2000年和2001年。撇号在细胞中是不可见的仅指示要将条目识别为文本。这是例如,当您输入电话号码或邮政编码时非常有用它以0(0)开头,因为a的开头是0 (0以正常数字格式删除数字序列。来源:格式化数字作为文本
数据现在被解析为字符串,这导致它在函数中被忽略。
我只需要告诉Libre Office将该列显示为Text列而不是它认为最适合列/单元格的列
用双引号(")换行。如果您确定只有数字,这很容易——如果字符串中可能有引号,则必须更加小心。