PHPexcel 保存到 CSV 链接单元格到另一个 sheet 是空的

PHPexcel save to CSV linked cells to another sheet are empty

有人可以帮助我吗? 我有 xlsx 文件,有 2 sheets.

第二个 sheet 包含链接到另一个(第一个)sheet 的单元格。 当我将 sheet 保存到 CSV 文件时:

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');

此函数不保存(链接的)单元格值...

我的代码如下所示:

$objPHPExcel = new PHPExcel();

//  Read your Excel workbook
try 
{
    $inputFileType = PHPExcel_IOFactory::identify($excelFile);
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    $objReader->setLoadSheetsOnly('list'); 
    $objReader->setLoadSheetsOnly('main'); 
    /* I also tried like this: 
    $worksheetList = $objReader->listWorksheetNames($excelFile);
    $sheetname = $worksheetList[0]; 
    $sheetname2 = $worksheetList[1]; 
    $objReader->setLoadSheetsOnly($worksheetList[0]); 
    $objReader->setLoadSheetsOnly($sheetname); 
    */
$objPHPExcel = $objReader->load($excelFile);
}

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');
$objWriter->save($filename);

我也尝试保存到 EXCEL 文件(xls 和 xlsx)-> 同样的问题,单元格(已链接)是空的...

我的链接单元格如下所示:“=list!C46”

找了几个小时的答案,我没有找到好的解决方案: 我删除了以下任何一行:$objReader->setLoadSheetsOnly('list'); 并添加:

$activeSheetData = $objPHPExcel->getActiveSheet()->toArray(null, true, true, true);
$objPHPExcel->getActiveSheet()->fromArray($activeSheetData, false);

就在:

之后

$objPHPExcel = $objReader->load($excelFile);

并添加:$objWriter->setSheetIndex(1); 现在可以用了,但是有问题...

原始格式的一列有这样的链接单元格:"=list!$AV$46" 我的意思是用 $ 符号。

更详细: 如果我有:$objReader->setReadDataOnly(true); 并拥有这些单元格:“=list!$AV$46”然后它们在输出中为空。

但是如果我删除:$objReader->setReadDataOnly(true); 然后那些单元格:“=list!$AV$46”效果很好并且有一个值,但格式 喜欢:2017 年 11 月 17 日。
因为我删除了$objReader->setReadDataOnly(true);,所以我不能申请 这是我的代码: $objPHPExcel->setActiveSheetIndex(1)->getStyle('AV1:AV'.$highestRow)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD);

那么第二个问题,新的日期格式怎么写? 我还想说,初始日期格式是: 2017 年 11 月 17 日。 我想要 17-11-17 (FORMAT_DATE_YYYYMMDD).

同样,看起来像 "=list!AV46" 的单元格都很好。

更新: 溶剂化:$objReader->setLoadSheetsOnly(['list', 'main']); + $objPHPExcel->setActiveSheetIndex(1); 在任何一个之前:$objPHPExcel->getActiveSheet()->...

这是你的第一个问题

$objReader->setLoadSheetsOnly('list'); 
$objReader->setLoadSheetsOnly('main'); 

您只会加载一个 sheet,您告诉 PHPExcel 加载的最后一个 main。多次调用 setLoadSheetsOnly() 会覆盖上一次调用的设置。

如果您想加载两个 sheet,则需要传递一个数组,列出您要加载的所有 sheet 名称

$objReader->setLoadSheetsOnly(['list', 'main']); 

这在 PHPExcel Documentation

中有解释

文档还说不要使用 $objReader->setReadDataOnly(true); 除非你明白它在做什么;它告诉 PHPExcel 只加载 rw 数据,而不是数据的格式; Excel.

中数字与日期的区别在于格式