除非首先手动操作XLSX文件,否则PHP SimpleXLSX解析文件不会返回所有值

时间:2018-05-16 14:23:41

标签: php excel xlsx

我已经搜索过这个问题的答案,但到目前为止还没有找到解决问题的方法。如果有人可以提供帮助,我们将不胜感激!

Backstory:我正在创建一个自动化流程,它将从FTP站点下载.xlsx文件,将数据加载到数组中,处理/计算阵列中的某些数据,然后从调整后的阵列中创建CSV文件。然后,此CSV文件将导入到仅接受CSV或JSON格式的第三方系统。

我目前正在使用SimpleXLSX来读取文件,因为它是PHPExcel,SimpleXLSX,Spout和其他一些我可以快速无问题地工作的文件(直到这一点)。

我的问题是,如果我在接收文件时尝试读取文件,则检索到数组的第一行是完全空白的。我还注意到第一个数组字段是[]:

Array
    (
        [0] => Array
            (
                [] => 
                [0] => 
                [1] => 
                [2] => 
                [3] => 
                [4] => 
                [5] => 
                [6] => 
                [7] => 
                [8] => 
                [9] => 
                [10] => 

第二行仅检索非文本的数据,并且等于零。此外,该[]字段已在第一个和第二个字段之间转换:

 [1] => Array
        (
            [0] => 
            [] => CAD
            [1] => 
            [2] => 
            [3] => 
            [4] => 
            [5] => 
            [6] => 
            [7] => 
            [8] => 
            [9] => 
            [10] => 

注意:此[]字段中的值几乎看起来像是在列中旋转 - 在一个数组上,它将是Record Id字段的值,在下一个数字上,它将是CountryCode,等等。 / p>

现在 - 如果我在Excel中打开文件,删除电子表格底部的空行,并保存,xlsx文件的大小为三倍(2,327KB到6,443KB),但数据正确加载到数组中!

Array
(
    [0] => Array
        (
            [0] => Record Id
            [1] => Owner Name
            [2] => Account Name
            [3] => Numeric Code
            [4] => Text Code
            [5] => Record Location
            [6] => Date Begins
            [7] => Date Ends
            [8] => Record Type
            [9] => Parent Id
            [10] => Country Code
            [11] => Supplier Id
            [12] => Supplier Name
            [13] => Supplier Category
            [14] => Supplier Sub Type
            [15] => Currency

第二行也正确检索值(请注意空格和零是实际数据):

[1] => Array
    (
        [0] => 12345
        [1] => John Smith
        [2] => ABC Member
        [3] => 123456
        [4] => 12345678
        [5] => Local
        [6] => 1990-03-01 00:00:00
        [7] => 1970-01-01 00:00:00
        [8] => 123 Program
        [9] => 98765
        [10] => US
        [11] => 123
        [12] => ABC Tools
        [13] => Manufacturer
        [14] => XYZ
        [15] => USD

我确信它与SimpleXLSX类有关,但我不知道如何解决它 - 我已尝试在课程中添加其他模式,如前一篇文章中所述,但这并没有改变任何事情:

const SCHEMA_REL_RELATIONSHIP  =  'http://schemas.openxmlformats.org/package/2006/relationships';
const SCHEMA_REL_OFFICEDOCUMENT_RELATIONSHIP = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';
const SCHEMA_REL_WORKSHEETRELATION =  'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet';

以下是我的代码,该文件在从FTP站点下载到本地驱动器后读取该文件: (注意:删除空白行,保存并将文件上传到FTP站点,下载并操作它按预期工作,所以我知道不是导致问题的FTP。)

我可以查找什么来确定为什么我无法在收到此文件时读取该文件?因为它是一个自动化过程,我不想手动保存文件。这个过程意味着每天运行。

function read_file($filename, $server_file)
{

    //If the file can be read, load the array
    if ( stristr($server_file, '.xlsx'))
    {
       if($file = SimpleXLSX::parse($filename))
       {
            ?><pre><?php print_r($file->rows() ); ?></pre> <?php
       }
       else
       {
           echo SimpleXLSX::parse_error();
       }
    }
}

提前感谢有人提供的任何帮助!

0 个答案:

没有答案