Для чтения ods файлов, и не только их, но и xls (xml), csv, tab text, можно использовать библиотеку http://code.google.com/p/php-spreadsheetreader/. Как и написано на сайте, работать с ней довольно просто
require_once 'SpreadsheetReaderFactory.php'; $spreadsheetsFilePath = 'test.ods'; //or test.xls, test.csv, etc. $reader = SpreadsheetReaderFactory::reader($spreadsheetsFilePath); $sheets = $reader->read($spreadsheetsFilePath); echo $sheets[0][0][0];
Обнаружена проблема импорта ячеек, состоящих из нескольких строк, которую можно решить редактированием extract_tables_simplexml.xslt, в части, где идет разбор значения ячейки.
<xsl:template name="process-cell">
<xsl:param name="type"/>
<xsl:param name="count"/>
<xsl:element name="{$type}">
<xsl:if test="@office:value-type = 'float'">
<xsl:attribute name="dataType">float</xsl:attribute>
</xsl:if>
<xsl:value-of select="text:p"/>
</xsl:element>
<xsl:if test="$count > 1">
<xsl:call-template name="process-cell">
<xsl:with-param name="type" select="$type"/>
<xsl:with-param name="count" select="$count - 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
Тут
<xsl:value-of select="text:p"/>
можно заменить, например на
<xsl:for-each select="text:p"> <xsl:value-of select="." /> <xsl:if test="position() != last()"> </xsl:if> </xsl:for-each>
Для генерации файлов ods удобно пользоваться библиотекой http://odsphpgenerator.lapinator.net/.
На сайте приведено много примеров использования, так что проблем быть не должно. Конечно, много чего в этой библиотеке не хватает, но либо можно дописать самостоятельно, либо дождаться новой версии.