gpt4 book ai didi

php - 使用 PHPExcel 以文本格式读取数字

转载 作者:bug小助手 更新时间:2023-10-28 10:46:13 27 4
gpt4 key购买 nike

我有一个可以存储数字的数组,例如 01、01A、01B、02、2,当我使用 PHPExcel 获取此值时,例如,在 01、02 的情况下,它会被删除“0”。为了解决这个问题,我尝试将这些值将存储在excel中的行格式化并将其设置为文本类型,就像在下面的代码中一样:

    $objPHPExcel->setActiveSheetIndexByName('BlocksList');
$objPHPExcel->getActiveSheet()->fromArray($blockNames, null, 'A2');
$latestBLColumn = $objPHPExcel->getActiveSheet()->getHighestDataColumn();
$column = 'A';
$row = 1;
for ($column = 'A'; $column != $latestBLColumn; $column++) {
$objPHPExcel->getActiveSheet()->getStyle($column.$row)->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_TEXT );
}
$objPHPExcel->getActiveSheet()->fromArray($blockNames, null, 'A1');

因此,通过这样做,我得到了具有 01、01A、02、02B 等数字的数组,并将其存储在 A2 行中。我得到了在条件 For 中使用此值的最高列。在这种情况下,我将范围 A 中的第 1 行设置为最高列,以格式化为文本。

我的模板生成了,所有的数字都是文本格式,但问题是我认为当我使用“fromArray()”方法时,它转换了之前数组的数字我可以在excel中做对。你知道我该如何解决这个问题吗??

最佳答案

使用数字格式进行格式化会影响数字显示的方式,而不是存储的方式。

您必须将数字明确存储为字符串,因此您不能使用 fromArray()。改用 setCellValueExplicit() 或 setCellValueExplicitByColumnAndRow(),传递 PHPExcel_Cell_DataType::TYPE_STRING 的 $pDataType 参数。

编辑

请注意,您还可以为一系列单元格设置样式,因此无需添加 for 循环的开销:

$range = 'A'.$row.':'.$latestBLColumn.$row;
$objPHPExcel->getActiveSheet()
->getStyle($range)
->getNumberFormat()
->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_TEXT );

编辑#2使用单元格 Binder

创建自定义单元格值绑定(bind)器:

class PHPExcel_Cell_MyValueBinder extends PHPExcel_Cell_DefaultValueBinder
implements PHPExcel_Cell_IValueBinder
{
public function bindValue(PHPExcel_Cell $cell, $value = null)
{
// sanitize UTF-8 strings
if (is_string($value)) {
$value = PHPExcel_Shared_String::SanitizeUTF8($value);
}

// Implement your own override logic
if (is_string($value) && $value[0] == '0') {
$cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_STRING);
return true;
}

// Not bound yet? Use default value parent...
return parent::bindValue($cell, $value);
}
}

为避免自动加载器出现任何问题,请在/Classes/PHPExcel/Cell 目录中创建它。否则,为类指定您自己的非 PHPExcel 名称,并确保它是独立加载的。

然后,在使用 fromArray() 调用之前,告诉 PHPExcel 使用您的值绑定(bind)器而不是默认绑定(bind)器:

PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_MyValueBinder() );

关于php - 使用 PHPExcel 以文本格式读取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12457610/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com