【问题标题】:PhpSpreadsheet - how to determine if a number is formatted as text?PhpSpreadsheet - 如何确定数字是否格式化为文本?
【发布时间】:2020-03-09 15:00:33
【问题描述】:

我有一个简单的电子表格,其中的数字格式为文本:

我想使用 PhpSpreadsheet 来确定数字确实被格式化为文本而不是默认的“常规”。所以我这样做:

<?php

use PhpOffice\PhpSpreadsheet\IOFactory;

require 'vendor/autoload.php';

$reader = IOFactory::createReader('Xlsx');
$reader->setReadDataOnly(TRUE);

$cell = $reader->load('index.xlsx')->getActiveSheet()->getCell('A1');
var_dump($cell->getValue(), $cell->getStyle()->getNumberFormat()->getFormatCode());

但结果总是这样:

浮点数(12345)
string(7) "一般"

如何判断数字是否格式化为“文本”?

【问题讨论】:

  • 作为测试,再次使用 Excel 打开文件,将值从12345 更改为12346,保存文件,然后再次测试。当我这样做时,我得到了正确的结果。
  • @SeanBright 没有帮助,仍然是“一般”。我使用的是 LibreOffice 而不是 MS Office,所以这可能是一个因素。我想看看我是否可以获得 MS Office 的试用版来试用它,但这最终没有用,因为这个问题是基于用户的问题,我不能要求 MS 的软件。
  • 同意,我只是告诉你什么对我有用。在 PHPOffice/PhpSpreadsheet 存储库中有 a now closed issue 让我走上了这条路。

标签: php spreadsheet phpspreadsheet


【解决方案1】:

你把它写在你的阅读器代码'$reader->setReadDataOnly(True);'中,这意味着在你的阅读器代码中读出没有格式化的纯数据。见documentation

请参阅代码的第 5 行。

你应该使用

$reader->setReadDataOnly(FALSE);

你应该能够从 excel 文件中读出格式信息。

 $format = $sheet->getStyle("A1")->getNumberFormat()->getFormatCode();

【讨论】:

  • 这就是我正在使用的,但 getFormatCode 返回“General”,这就是重点。
  • 您应该尝试将$reader-&gt;setReadDataOnly(FALSE); 设置为带有“@”的数字格式您对读者说只读出了没有格式的纯日期。然后阅读器只返回一般的单元格格式
  • 我设置它没有意义。我必须知道用户使用 Excel 或 LibreOffice 设置它的位置。
  • 你把它写在你的阅读器代码中'$reader->setReadDataOnly(True);'在您的阅读器代码中。如果您告诉 phpspreadsheet 它应该只使用数据,您将看不到任何用户格式。请参阅代码中的第 5 行。
  • 对,这是有道理的。我稍后会尝试(我现在正在工作,我家里有测试文件)并发布结果。谢谢。
猜你喜欢
  • 2012-02-29
  • 2020-10-19
  • 2011-02-06
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 2011-07-06
相关资源
最近更新 更多