Project

General

Profile

Feature #4922

Excel Import via PHP

Added by Carsten Rose almost 3 years ago. Updated about 2 years ago.

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

0%

Estimated time:
Discuss:

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 ExportClosed2018-10-27

Associated revisions

Revision d5a03b6a (diff)
Added by Elias Villiger about 2 years ago

Feature #4922 - Working POC for Excel Import

Revision 92f59cd2 (diff)
Added by Elias Villiger about 2 years ago

Feature #4922 Excel Import - Implement importTable/Column/Region/Mode

Revision 6075fad6 (diff)
Added by Elias Villiger about 2 years ago

Feature #4922 - Finalize and document Excel Import

Revision d5e0f210 (diff)
Added by Elias Villiger about 2 years ago

Some minor improvements to the excel import - refs #4922

Revision 9fa9f7fa (diff)
Added by Elias Villiger about 2 years ago

Some minor improvements to the excel import 2 - refs #4922

Revision c498f58f
Added by Carsten Rose about 2 years ago

Merge branch 'excel-import-improvement' into 'master'

Some minor improvements to the excel import - refs #4922

See merge request typo3/qfq!93

History

#2 Updated by Carsten Rose almost 3 years ago

  • Tracker changed from Support to Feature

#3 Updated by Carsten Rose almost 3 years ago

  • Description updated (diff)

#4 Updated by Carsten Rose almost 3 years ago

  • Description updated (diff)

#5 Updated by Carsten Rose almost 3 years ago

  • Description updated (diff)

#6 Updated by Benjamin Baer over 2 years ago

  • Target version changed from next to 18.10.3

#7 Updated by Carsten Rose over 2 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.

#8 Updated by Elias Villiger about 2 years ago

  • Assignee changed from Carsten Rose to Elias Villiger

#9 Updated by Elias Villiger about 2 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.

#10 Updated by Carsten Rose about 2 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

#11 Updated by Elias Villiger about 2 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

#12 Updated by Carsten Rose about 2 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

#13 Updated by Carsten Rose about 2 years ago

  • Subject changed from Excel Import/Export via PHP to Excel Import via PHP

#14 Updated by Elias Villiger about 2 years ago

  • Description updated (diff)

#15 Updated by Elias Villiger about 2 years ago

  • Description updated (diff)

#16 Updated by Elias Villiger about 2 years ago

  • Description updated (diff)

#17 Updated by Elias Villiger about 2 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.

#18 Updated by Elias Villiger about 2 years ago

  • Status changed from In Progress to Closed

importMode ist jetzt auch implementiert.

#19 Updated by Carsten Rose about 2 years ago

  • Target version changed from 18.10.3 to 18.9.2

#20 Updated by Carsten Rose about 2 years ago

  • Target version changed from 18.9.2 to 18.10.2

#21 Updated by Carsten Rose almost 2 years ago

Also available in: Atom PDF