php - 使用 PhpSpreadsheet 获取列范围
问题描述
我想要做的是从所有行而不是所有列中读取数据。我想获取从列A到E的所有行的数据。目前,我可以使用此代码读取整行(从 A到CL列)
// Read data from excel file
$reader = IOFactory::createReader($inputFileType);
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load($inputFileName);
// Convert read data to array
$sheetData = $spreadsheet->getActiveSheet()->toArray(null,true,true,true);
// Put captured array to use
for ($row=1; $row <= count($sheetData) ; $row++) {
$xData = "'".implode("','",$sheetData[$row])."'";
}
print_r($xData);
exit;
有人可以指导我实现这一目标吗?我试过了
// Specify columns to fetch data from
$cols = array('A','B','C','D','E','F','G','H','I','J','K');
// Put captured array to use
for ($row=1; $row <= count($sheetData) ; $row++) {
foreach ($cols as $col) {
$xData = "'".implode("','",$sheetData[$col.$row])."'";
}
}
print_r($xData);
exit;
但这没有用。
解决方案
使用实用程序助手,例如PhpOffice\PhpSpreadsheet\Cell\Coordinate将列转换为索引/字母。
$ws = $spreadsheet->getActiveSheet();
$firstColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString('A'); // A->1
$lastColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString('E'); // E->5
$firstRow = 1;
$lastRow = 4;
$data = [];
for($row = $firstRow; $row <= $lastRow; ++$row){
for($col = $firstColumnIndex; $col <= $lastColumnIndex; ++$col){
$data[$row][$col] = $ws->getCellByColumnAndRow($col, $row)->getValue();
}
}
print_r($data, true); // data are now collected in 2-dimensional array
还有其他方法,例如stringFromColumnIndex
, coordinateFromString
, indexesFromString
, buildRange
, rangeBoundaries
,rangeDimension
等getRangeBoundaries
可能会派上用场,但似乎没有很好的文档记录。
推荐阅读
- java - IncompatibleClassChangeError - net.sf.ehcache.config.BeanHandler.startElement
- python - 层权重形状 (1, 1) 与为 keras 模型提供的权重形状 (1,) 不兼容
- reactjs - 仅返回选中输入的选定值
- javascript - 如何多次清除图像?
- plotly-dash - 子图的绘图背景未更新
- excel - VBA:查找值是否是表中存在的第一个实例
- java - 将 jdk 8 迁移到 jdk 11,mysql 为 SSL 抛出错误
- flutter - 如何为flutter中的每个ListView项目设置不同的背景颜色
- android - 设备是否正确安装在 android 上
- microsoft-graph-api - 使用 $search 参数对共享联系人文件夹列出联系人 API 返回 403,但如果没有 $search 则返回联系人