У меня есть приложение PHP, которое загружает данные таблиц MySQL в электронную таблицу на клиентском компьютере.Я нашел код во многих местах в Интернете, который отлично работает для Open Office Scalc на машине с Redhat.Проблема, с которой я столкнулся, заключалась в том, что я пытался загрузить в MS Excel на ПК с Windows, а не в электронную таблицу Open Office.Проблема, кажется, связана с длиной строки, вставленной в ячейку.Если он слишком длинный, Excel считает, что файл поврежден и не загружает его.«Слишком длинный», кажется, составляет около 255 символов, хотя спецификации MS Excel говорят, что максимальная длина - 32 000.
Для дальнейшего изучения проблемы я попытался загрузить те же данные, что и файл значений, разделенных табуляцией, и позволить Excel преобразовать их в электронную таблицу.Используя этот метод, не было проблем с загрузкой очень длинных строк в ячейки электронной таблицы.Таким образом, строки, длина которых превышает 255 символов, фактически могут быть вставлены в ячейки Excel, но только с кодом, который я использую, даже если этот код работает с Open Office.Использование файлов tsv не решило бы нашу проблему, потому что длинные строки имеют возврат каретки, который мы хотим сохранить, и возврат каретки интерпретируются как разделители строк, когда файл tsv загружается в электронную таблицу.
Функция PHP, котораязаписывает строку в ячейку электронной таблицы:
function xlsWriteLabel($Row, $Col, $Value ) {
$L = strlen($Value);
echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
echo $Value;
return;
}
Другой необходимый код для переноса в электронные таблицы в дополнение к указанной выше функции можно найти по адресу:
http://www.appservnetwork.com/modules.php?name=News&file=article&sid=8
Я не нашел никаких объяснений значения различных аргументов, передаваемых функции «pack» в приведенном выше коде, и мне интересно, может ли изменение одного из аргументов в функции выше решить проблему.
Итак, если у кого-то есть решение этой проблемы, мне было бы интересно услышать его.