Я пытаюсь работать с файлом .ods, используя PHP. Файл по сути выглядит так:
[пустая ячейка] | title1 | title2 | title3 18.12.2012 | 2,5 | 9,4 | 0,1 19.12.2012 | 4.5 | 1,23 | 0.2 20.12.2012 | 12,4 | 21,1 | 0.8 21.12.2012 | 0,5 | 11,0 | 0.6
Мне нужно прочитать цифры, получить суммы строк и столбцов и сгенерировать файлы .odt на основе информации, которую я получаю из этого файла.
Множественный стекопоток и другие потоки предполагают, что OpenTBS будет действительно достаточно для этой цели, но я немного новичок в концепции Template Engine и немного в самом PHP, поэтому я читал документы в течение нескольких дней, и единственное, что я кажется, понимают, как объединять и генерировать документы на основе шаблона.
Но могу ли я прочитать данные из шаблона или другого файла, загруженного в OpenTBS, и обработать его? Я полагаю, что если я смогу прочитать данные, я могу выложить их в браузере, например, с помощью шаблона HTML. И если это не так уж и сложно, я бы очень хотел увидеть примеры кода для этого, спасибо.
Если OpenTBS не может этого сделать, какую другую библиотеку я должен использовать для чтения файлов ODF (ODS)?
Несмотря на то, что средство чтения данных входит в план OpenTBS, текущая версия (1.9.5) не может извлечь данные из электронной таблицы. Но он может извлечь XML из электронной таблицы.
Таким образом, вы можете читать, извлекать XML из электронной таблицы, содержащей данные, иметь фрагмент кода для извлечения данных, а затем объединять данные с шаблоном ODS.
// Initialize the TBS instance
$TBS = new clsTinyButStrong; // new instance of TBS
$TBS->Plugin(TBS_INSTALL, OPENTBS_PLUGIN); // load the OpenTBS plugin
// Retrieve xml from the source file
$TBS->LoadTemplate('data_to_extract.ods');
$xml = $TBS->Source;
// your code saving the data from $xml into $data
// ...
// Merge the data with the template
$TBS->LoadTemplate('template.ods');
$TBS->MergeBlock('d', $data);
$TBS->Show(OPENTBS_FILE, 'result.ods');
Для извлечения данных из XML вы можете заметить, что числовые значения в ячейке хранятся в атрибуте офис: значение ячейки. Пример :
<table:table-cell office:value-type="float" office:value="2.4" calcext:value-type="float">
<text:p>2.4000</text:p>
</table:table-cell>
Значения даты в ячейке хранятся в атрибуте офис: дата-значение ячейки. Пример :
<table:table-cell office:value-type="date" office:date-value="2016-03-02" calcext:value-type="date">
<text:p>02/03/16</text:p>
</table:table-cell>
Других решений пока нет …