Я искал SO для ответа на этот вопрос, но до сих пор не смог найти ничего, что решило бы проблему. Если кто-то может помочь, это было бы очень признательно!
Предыстория: я создаю автоматизированный процесс, который загружает файл .xlsx с FTP-сайта, загружает данные в массив, обрабатывает / вычисляет определенные данные в массиве, а затем создает файл 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 и т. Д.
СЕЙЧАС - если я открою файл в Excel, удалю пустую строку внизу электронной таблицы и сохраню, размер файла xlsx утроится (от 2,327 КБ до 6443 КБ), НО данные корректно загружаются в массив !
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.)
Что я могу найти, чтобы определить, почему я не могу прочитать этот файл по мере его поступления? Поскольку это должен быть автоматизированный процесс, я не хочу сохранять файл вручную. Этот процесс должен выполняться ежедневно.
<code>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() ); ?>
Заранее благодарим за любую помощь, которую кто-то может оказать!