在 php excel 列级别设置数据类型
Set data type in the php excel in column level
我正在使用 PHPExcel 并使用 fromArray 我已将值添加到单元格中。现在我想将某些单元格的数据类型设置为字符串。
某些列具有特定类型的值(例如数字或日期或文本)。为此,使用字符串数据类型绰绰有余,否则长度超过 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);
但是没用
设置数据后设置数据类型不会改变数据;它的实际类型是在您首先调用 setCellValue()
或 setCellValueExplicit()
时定义的。
如果您使用 setCellValueExplicit()
,则您明确告诉 PHPExcel 要使用的数据类型。如果您使用 setCellValue()
,您是在告诉 PHPExcel 计算出它应该使用的数据类型。 "Excel DataTypes".
部分的 "Value Binder". The fromArray()
method uses setCellValue()
, so it uses the "Value binder" to identify datatypes, and sets the cell values accordingly. How this works is explained in the PHPExcel Documentation 中定义了解决此问题的规则
除非您另外指定,否则 PHPExcel 使用 Default Value Binder, which contains some very basic and simple rules. The Library also provides an AdvancedValueBinder 中的规则和更复杂的规则,例如将 5%
之类的字符串转换为浮点数0.05
的值并为单元格设置格式掩码,以便它仍将显示为 5%
,这与 MS Excel 的方式大致相同。您还可以使用自己的规则创建自己的 "Value Binder",并使用它代替 "Default Value Binder".
可以读取数组如下
$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;
}
我正在使用 PHPExcel 并使用 fromArray 我已将值添加到单元格中。现在我想将某些单元格的数据类型设置为字符串。
某些列具有特定类型的值(例如数字或日期或文本)。为此,使用字符串数据类型绰绰有余,否则长度超过 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);
但是没用
设置数据后设置数据类型不会改变数据;它的实际类型是在您首先调用 setCellValue()
或 setCellValueExplicit()
时定义的。
如果您使用 setCellValueExplicit()
,则您明确告诉 PHPExcel 要使用的数据类型。如果您使用 setCellValue()
,您是在告诉 PHPExcel 计算出它应该使用的数据类型。 "Excel DataTypes".
fromArray()
method uses setCellValue()
, so it uses the "Value binder" to identify datatypes, and sets the cell values accordingly. How this works is explained in the PHPExcel Documentation 中定义了解决此问题的规则
除非您另外指定,否则 PHPExcel 使用 Default Value Binder, which contains some very basic and simple rules. The Library also provides an AdvancedValueBinder 中的规则和更复杂的规则,例如将 5%
之类的字符串转换为浮点数0.05
的值并为单元格设置格式掩码,以便它仍将显示为 5%
,这与 MS Excel 的方式大致相同。您还可以使用自己的规则创建自己的 "Value Binder",并使用它代替 "Default Value Binder".
可以读取数组如下
$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;
}