J'ai plusieurs fichiers Excel dans ce format.
La date et l’heure sont exactes.
--------------------------------- | Nom | Heure | --------------------------------- | Personne A | 3 juillet 17 8h15 | | Personne A | 03-jui-17 10h32 | | Personne A | 3 juillet 17 1:56 PM | | Personne A | 3 juillet 17 6h15 PM | | Personne A | 4 juillet 17 8h29 | | Personne A | 4 juillet 17 8h58 | | Personne A | 4 juillet 17 9h43 | | Personne A | 4 juillet 17 1:03 PM | | Personne A | 4 juillet 17 2:17 PM | | Personne A | 4 juillet 17 5:58 PM | . . . | Personne A | 31 juillet 17 7h45 | | Personne A | 31 juil. 17 8h10 | | Personne A | 31 juillet 17 3:26 PM | | Personne A | 31 juillet 17 7h29 PM | ----------------------------- ----
Je voudrais extraire ces données et les enregistrer en tant que nouveau fichier Excel dans ce format:
--------------------------------------------- | Nom | Date | Time In | Time Out | ---------------------------------------------- --- | Personne A | 03 juillet 17 | 08h15 | 18h15 | | Personne A | 4 juillet 17 | 08h29 | 17h58 | . . . | Personne A | 31 juillet 17 | 07h45 | 19h29 | --------------------------------------------- ----
Il s’agit essentiellement d’organiser les données une entrée par date, l’heure la plus proche pour cette date étant le Time In
et la dernière heure de cette date, le Time Out
.
Il existe plusieurs fichiers Excel dans ce format, et le faire manuellement prendra trop de temps.
Si vous voulez les convertir en .csv
première édition, puis les reconvertir en .xlsx
, c'est cool.
PS: Bounty of 200 rep à gagner.
J'ai converti les fichiers au format csv
et utilisé un script PHP pour analyser le contenu en le créant comme je le souhaitais réellement. Le résultat a ensuite été enregistré dans un nouveau fichier, puis ces fichiers ont été reconvertis en xls
, puis fusionnés dans un cahier.
La conversion et la fusion ont été effectuées manuellement. Ce n'est pas la meilleure solution mais ça marche pour le moment.
Voici le script:
// récupère la liste des fichiers du répertoire de données $ files = array_diff (scandir ('./ data'), array ('.', '..')); foreach ($ fichiers en tant que $ fichier): // récupère toutes les données du fichier csv et les enregistre dans le tableau $ data $ csvFile = file ('data /' .fichier $); $ data = $ list = []; pour chaque ($ csvFile as $ line) { $ data [] = str_getcsv ($ line); } unset ($ data [0]); // analyse le tableau de données et récupère les différentes sections: nom. date et heure pour chaque ($ data en $ v) { $ date = strtotime ($ v [1]); $ list [date ('dm-Y', $ date)] [] = tableau ( 'nom' => $ v [0], 'date' => date ('j/m/j', $ date), 'in' => $ date ); } // créer un nouveau tableau et enregistrer les données analysées avec des colonnes d’entête $ new = array (array ('Nom', 'Date', 'Heure d'arrivée', 'Délai d'attente')); foreach ($ list as $ k => $ v) { $ out = max (array_column ($ v, 'in')); $ name = $ v [0] ['name']; $ new [] = array ( 'name' => ucwords (strtolower ($ name)), 'date' => $ v [0] ['date'], 'in' = > date ('h: i A', $ v [0] ['in']), 'out' => date ('h: iA', $ out) ) ; } // Nom d'un nouveau fichier dans le nouveau répertoire utilisant ce nom de fichier $ Filename = str_replace ('.csv', '' , nom_base ($ fichier)); $ fn = st rtolower ($ filename .'- log.csv '); // ouvre le fichier et affiche le nouveau tableau au format CSV $ out = fopen (' new/'. $ fn, 'w'); pour chaque ($ new en tant que $ l) { fputcsv ($ out, $ l, ",", ""); } fclose ($ out); endforeach;
Il y a 2 scripts dont vous avez besoin. Celui qui convertit XLS au format CSV est une commande xls2csv et l'autre un script de github: csv2xls (un autre csv2xls ). Il existe également csv2xlsx (et un autre csv2xlsx ).
Entre les 2 conversions, vous pouvez éditer les fichiers en utilisant votre outil préféré.
Si vous voulez le faire vous-même: les fichiers xlsx (et le même principe: ODT (open/libeoffice) sont des archives compressées contenant un fichier XML avec les données. Vous pouvez les décompresser et les données sont au format XML. Manipuler le fichier XML est un peu C'est plus difficile qu'un CSV, mais quand la manipulation est automatisée, cela devient plutôt efficace.