在列级别的php excel中设置数据类型

时间:2017-12-06 11:23:02

标签: php phpexcel

我正在使用PHPExcel并使用fromArray我已将vales添加到单元格中。现在我想将某些单元格的数据类型设置为字符串。

某些列具有特定类型的值(例如数字或日期或文本)。使用字符串数据类型对于此目的来说绰绰有余,否则长度大于12的数字将以指数E显示,并且前导零被截断。

我发现在单元格中设置值时,如何以编程方式设置每个特定单元格的数据类型。但是,如何在最终电子表格中设置列级别的数据类型(因此用户在Excel中输入的新值将自动采用该类型,例如字符串,因此不会截断前导零)。我也想知道函数

$objPHPExcel->getActiveSheet()->setCellValueExplicit('A1', '1234567890', PHPExcel_Cell_DataType::TYPE_STRING);

首先使用fromArray插入值,然后在函数中给出单元格id和数据类型

或者有没有任何方法可以将数据类型设置为字符串,就像格式化单元格一样

$objPHPExcel->getActiveSheet()
->getStyle('A3:A123')
->getNumberFormat()
->setFormatCode('0000');

我试过了代码

$worksheet->getCell('A1:A50')->setDataType(PHPExcel_Cell_DataType::TYPE_STRING);

但它不起作用

2 个答案:

答案 0 :(得分:0)

设置数据后设置数据类型不会改变数据;当您首先调用setCellValue()setCellValueExplicit()时,会定义实际类型。

如果您使用setCellValueExplicit(),则明确告诉PHPExcel要使用的数据类型。如果您使用setCellValue(),则告诉PHPExcel确定它应该使用哪种数据类型。解决这个问题的规则在"Value Binder"中定义。 fromArray()方法使用setCellValue(),因此它使用“值绑定器”来标识数据类型,并相应地设置单元格值。有关其工作原理的详细信息,请参阅“{3}}”一节中的“Excel数据类型”。

除非您另有指定,否则PHPExcel使用PHPExcel Documentation中的规则,其中包含一些非常基本和简单的规则。库还提供了Default Value Binder更复杂的规则,例如将5%之类的字符串转换为浮点值0.05并为单元格设置格式掩码,使其仍然是显示为5%,与MS Excel完全相同。您也可以使用自己的规则创建自己的“价值活页夹”,并使用它而不是“默认值活页夹”。

答案 1 :(得分:0)

您可以按以下方式读取数组

    $excel = new Spreadsheet();

    $columnsNames = array_keys($clientes[0]);
    $sheet = $excel->setActiveSheetIndex(0);
    $sheet->fromArray($columnsNames, NULL, 'A1'); 

    [$startColumn, $startRow] = Coordinate::coordinateFromString('A2');
    $NumeroLinha = 1;

    foreach ($encodeClientes as $rowData) {
        $currentColumn = $startColumn;
        foreach ($rowData as $cellValue) {
                if ($cellValue !== null) {
                    switch ($currentColumn) {
                        case 'A':
                            $sheet->getCell($currentColumn . $startRow)->setValue($NumeroLinha++);
                            break;
                        case 'F':
                            $sheet->getCell($currentColumn . $startRow)->setValueExplicit($cellValue, \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING);
                            break;
                        default:
                            $sheet->getCell($currentColumn . $startRow)->setValue($cellValue);
                    }
                }
            ++$currentColumn;
        }
        ++$startRow;
    }