我正在使用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);
但它不起作用
答案 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;
}