Oct 10, 2015 16:31
Столкнулся тут с сабжем, когда правил сайт на PHP: данные набиваются в Ёкселе, сохраняются в "Текстовый файл с разделителями" (т.е. CSV) и загружаются на сайт. Скрипт в цикле перебирает все столбцы таблицы, их количество явно прописывается в коде. Формат CSV: разделители - знак табуляции, без ограничителей строк.
Стало выдавать Notice (рекомендую никогда не отключать в настройках вывод этого типа ошибок: удобно ловить мелкие косяки и опечатки), что элемента массива с таким индексом нету. Код - в порядке.
Оказалось:
1) Последний столбец таблицы Excel был незаполнен (хотя и, разумеется, имел заголовок). Ёксель воспринимал это совершенно нормально, выделял таблицу целиком и т.д.
2) При экспорте в "Текстовый файл с разделителями" заголовок столбца был на месте. Однако из 70 строк только первые штук 10 имели на конце знак табуляции, соответствующий последнему столбцу с пустой строкой. А остальные - нет. И массив, в который импортировалась строка CSV, имел на 1 элемент в конце меньше.
Примечания:
1) Это наблюдалось в MS Excel 2003, формат файла XLS. Есть ли баг в современных MS Excel 7 / 10 / 13 - не в курсе.
2) Точно также, не знаю, будет ли глючить при сохранении "В формате CSV" как таковом (т.е. с разделителями точкой с запятой).
3) Непонятно, с чем связан глюк. В тех строках, которые экспортировались нормально, в ячейки последнего столбца ничего никогда не вводилось - точно так же, как и в ячейки "ошибочных" строк. Данные в других столбцах достаточно однородные, формул очень мало.
4) Не знаю, что будет, если на конце окажутся несколько пустых столбцов подряд, либо если хотя бы в некоторых строках будут заполнены значения пустого столбца.
Надеюсь, кому-нибудь пригодится.
баги,
программирование,
полезное,
ms excel