Project

General

Profile

Actions

Feature #4922

closed

Excel Import via PHP

Added by Carsten Rose over 6 years ago. Updated over 5 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Elias Villiger
Target version:
Start date:
11.11.2017
Due date:
% Done:

0%

Estimated time:
Discuss:
Prio Planung:
Vote:

Description

  • Der Excel Import soll via PHP implementiert werdne.
  • Im Upload Dialog soll es moeglich sein bei einem Excel Import direkt einen Tab und eine Import region anzugeben.

PHP Excel
https://github.com/PHPOffice/PHPExcel
https://github.com/nuovo/spreadsheet-reader
https://code.google.com/archive/p/php-excel-reader/
https://stackoverflow.com/questions/11447918/php-import-excel-into-database-xls-xlsx
• Nach dem Import wird das excel sofort wieder geloescht.
https://github.com/PHPOffice/PhpSpreadsheet

Importfeatures

  • es wird alles importiert, ohne region
  • es werden die gnannten Tabs importiert, falls nichts angeegben ist tab=1
  • mariadb.spaltenamen=excel.spaltenname (A,B,...)
  • Falls zieltabelle nciht existier, wird sie erzeugt.
  • FE.parameter
    importType = auto | xls | xlsx | odt | csv |
    importMode = append | replace | replaceByIndex
    importIndexColumn = id (default)| ...
    importRegion = [tab[,[startColumn],[startRow],[endColumn],[endRow]]]
    importToTable = <mariadb.tablename>
    importToColumn = <col1>,<col2>,<col3>,...
    

Related issues

Related to QFQ - Support #7103: Notes to Excel ExportClosed27.10.2018

Actions
Actions #2

Updated by Carsten Rose over 6 years ago

  • Tracker changed from Support to Feature
Actions #3

Updated by Carsten Rose over 6 years ago

  • Description updated (diff)
Actions #4

Updated by Carsten Rose over 6 years ago

  • Description updated (diff)
Actions #5

Updated by Carsten Rose over 6 years ago

  • Description updated (diff)
Actions #6

Updated by Benjamin Baer almost 6 years ago

  • Target version changed from 55 to 18.10.3
Actions #7

Updated by Carsten Rose over 5 years ago

  • Subject changed from Excel Import via PHP to Excel Import/Export via PHP
  • Status changed from New to In Progress
  • PHPExcel ist deprecated
  • Nachfogler: PhpOffice/PhpSpreadsheet
  • https://phpspreadsheet.readthedocs.io/en/develop/topics/reading-files/
  • Via composer installiert nach vendor/PhpOffice/PhpSpreadsheet
  • Im Makefile via 'make bootstrap' wird die Lib heruntergeladen und zusaetzlich nach extension/Resources/Private/PhpSpreadsheet kopiert.
  • Beide Stellen sind im .gitignore eingetragen und werden nicht eingecheckt.
Actions #8

Updated by Elias Villiger over 5 years ago

  • Assignee changed from Carsten Rose to Elias Villiger
Actions #9

Updated by Elias Villiger over 5 years ago

Notationsvorschlag:

dataImport = destinationTable,[mode],[tabIndex],[cellStart],[cellEnd]|…

mode: append, replace

Dadurch kann eine Excel-Datei in mehrere Tabellen importiert werden, falls gewünscht.

Actions #10

Updated by Carsten Rose over 5 years ago

Hallo Elias

  1. Koennen die sheets (tab) auch via Namen angesprochen werden? `[tabIndex]` suggeriert mir einen numerischen Wert. `[tab]` oder `[tabName]` faende ich dann besser.
  2. Sollten wir noch einen `[type]` definieren, der default auf 'auto' steht und ggfs. auf 'xls', 'xlsx', 'odt', 'csv', ... gesetzt werden kann?
  3. `[mode]` koennte einen 3. Wert bekommen: `replaceByIndex`: Gibt es eine `[index]` Spalte (default 'id') und gibt es einen Wert in der DB mit gleichen Index: replace record sonst insert. Das kannst Du einfach mit dem SQL Statement 'REPLACE' machen (anstelle von INSERT). Ggfs. muss die Spalte mit dem Index konfigurierbar sein.
  4. Wir sollten keine 'position dependent' Parameter mehr machen (bad practice: _Page, _Pagee, ...). D.h. bitte bei dem urspruenglichen Ansatz mit einzelnen Parametern bleiben (ist der Standard in QFQ).
  5. Was haeltst Du von folgendem Naming scheme:
    • importType = auto | xls | xlsx | odt | csv |
    • importMode = append | replace | replaceByIndex
    • importIndexColumn = id (default)| ...
    • importRegion = [tab[,x1,y1[,x2,y2]]],...
    • importToTable = <mariadb.tablename>

Vielen Dank.

CU
C

Actions #11

Updated by Elias Villiger over 5 years ago

Hallo Carsten

Danke für die Rückmeldung!

1) Zu tabName vs tabIndex: Für geolean würde ich tabIndex als praktischer empfinden, da ich dann nicht jedesmal überprüfen muss, ob das Tab noch gleich benannt ist (sondern einfach das erste nehmen kann). Vielleicht sollten wir beides anbieten?

4) Meine Überlegung war, dass es Situationen geben könnte, wo man eine Excel-Datei mit mehreren Tabs hochlädt, welche unterschiedliche Daten haben. D.h. Tab 1 möchte man vielleicht in Tabelle 1 importieren, Tab 2 in Tabelle 2, etc.

Mit deinem Vorschlag wäre die Zuweisung von Tabelle zu Tab nicht möglich, d.h. die Datei müsste in separaten Upload-FEs hochgeladen werden, um Daten in verschiedene Tabellen zu importieren.

Ich weiss aber nicht, ob das Bedürfnis wirklich besteht, von mir aus können wir also schon deinen Vorschlag annehmen.

6) Zusätzlich brauchen wir evtl. auch noch eine Möglichkeit, die Spaltennamen zu definieren - damit man die DB-Spalten lesbarer benennen kann und nicht nur A, B, C, D, ...

So, für mich heisst's jetzt aber erstmals Ferien, schaue danach weiter :)
LG, Elias

Actions #12

Updated by Carsten Rose over 5 years ago

Hallo Elias

1) Vorschlag fuer 'tabindex' , 'tabname': 'importTab' oder 'importSheet'... falls numerisch dann Bedeutung als index, sonst Bedeutung als Name.

4) Mehrer Tabs auf einmal: ja, das koennte passieren - aber ich vermute es ist die grosse Ausnahme. Wenn es so komplizierte Excels sind, ist auch die Frage ob es nicht bessere Importmoeglichkeiten gibt. Mein Hauptargument ist eigentlich das mit den 'Position dependent parametern'.

6) Abbildungspaltennamen. Ja, sehr gut.

Vorschlag:

importToColumn=<col1>,<col2>,<col3>,...

CU
Carsten

Actions #13

Updated by Carsten Rose over 5 years ago

  • Subject changed from Excel Import/Export via PHP to Excel Import via PHP
Actions #14

Updated by Elias Villiger over 5 years ago

  • Description updated (diff)
Actions #15

Updated by Elias Villiger over 5 years ago

  • Description updated (diff)
Actions #16

Updated by Elias Villiger over 5 years ago

  • Description updated (diff)
Actions #17

Updated by Elias Villiger over 5 years ago

Aktuell implementiert (siehe https://git.math.uzh.ch/typo3/qfq/merge_requests/73):

importMode = append | replace
importRegion = [tab],[startColumn],[startRow],[endColumn],[endRow]|...
importToTable = <mariadb.tablename>
importToColumn = <col1>,<col2>,<col3>,...

`tab`: falls numerisch, als Index, andernfalls als Name

Vorschlag: importMode = replaceByIndex erst bei Bedarf implementieren. Ein spezifischer Usecase wäre hilfreich, um die Implementations-Details zu optimieren.

Ausserdem noch nicht implementiert:

importType = auto | xls | xlsx | odt | csv 

@Carsten: Kannst du erklären, wie der importType implementiert werden soll? Ich habe .xlsx, .ods und .xlsm getestet, und funktionieren alle gleich. Die mime-Types kann man ja bereits als upload-Parameter angeben.

Actions #18

Updated by Elias Villiger over 5 years ago

  • Status changed from In Progress to Closed

importMode ist jetzt auch implementiert.

Actions #19

Updated by Carsten Rose over 5 years ago

  • Target version changed from 18.10.3 to 18.9.2
Actions #20

Updated by Carsten Rose over 5 years ago

  • Target version changed from 18.9.2 to 18.10.2
Actions #21

Updated by Carsten Rose over 5 years ago

Actions

Also available in: Atom PDF