Script Shell – convertir Excel (xlsx) en CSV – supprimer espace vide / espace de tabulation

Je reçois un file excel (xslx) avec plusieurs feuilles pour mon projet. Le nombre d'loggings sur ces feuilles varie de 15k à 70k par feuille. J'ai besoin d'effectuer les tâches suivantes sur ces données, puis de la convertir en CSV. Ou caché à CSV, puis traiter datatables de toute façon, c'est bien.

Exemple d'input:

call_no uniq_no Type Strength Description 2456 15 TX SomeSting SomeSting 5263 15 BLL SomeSting SomeSting 4263 162 TX SomeSting 2369 215 LH SomeSting 4269 426 BLL SomeSting SomeSting 7412 162 TX SomeSting SomeSting 

Selon l'exigence dont j'ai besoin

  1. Trouvez les valeurs dupliquées dans la colonne 'uniq_no' et supprimez tous les loggings en double, à l'exception de l'logging original (premier logging).
  2. Remplacer les blancs par des données. (Il suffit de find en blanc et de replace par une logique de valeur)
  3. Supprimez l'espace / espace de tabulation dans n'importe quelle cellule. (Ce point n'est pas important, c'est comme une quête)

Exemple de sortie:

 call_no uniq_no Type Strength Description 2456 15 TX SomeSting SomeSting 4263 162 TX **NewDATA** SomeSting 2369 215 LH SomeSting **NewDATA** 4269 426 BLL SomeSting SomeSting 

C'est une tâche de routine pour moi. J'ai une connaissance juste des scripts shell. Donc, si quelqu'un peut me guider même avec un schéma approximatif d'un script pour cela, je peux faire des ajustements à ma fin. Aidez-nous.

Mise à jour: la plate-forme souhaitée pour le script a été clarifiée et une réponse au script vb n'est plus applicable. Cependant, je laisserai cette réponse ici au cas où un futur spectateur de cette question trébuchera sur elle et le jugera utile. Quiconque rédige un script shell dans une langue Ubuntu peut également transmettre certains aspects de ce vbscript.

Voici quelque chose pour vous aider à démarrer. Si vous enregistrez des actions avec l'enregistreur de macro Excel, callbackez-vous que l'utilisation des mêmes commands dans un VBS signifie que vous devez vous débarrasser de tous les parameters nommés.

prep_xlsx.vbs

 Set objExcel = WScript.CreateObject ("Excel.Application") objExcel.Visible = true 'False 'True for testing strFileName = "c:\tmp\vbs_test.xlsx" set objWb = objExcel.WorkBooks.open(strFileName) set objWs = objWb.Worksheets(1) with objWs with .cells(1, 1).CurrentRegion .Cells.SpecialCells(4) = "**NewDATA**" ' 4 is xlCellTypeBlanks .Cells.RemoveDuplicates 2, 1 ' Columns:=2, Header:=xlYes for c = 1 to .Columns.Count with .columns(c) .TextToColumns .Cells(1), 2 ', Array(0, 1) 'Range("C1"), DataType:=xlFixedWidth, FieldInfo:=Array(0, 1) end with next 'next c end with end with objWb.Close True 'save on close objExcel.Quit Set objExcel = Nothing 

Il convient de noter que l'élimination des espaces avant / arrière avec la méthode Range.TextToColumns avec xlFixedWidth peut tenter de split la colonne en deux s'il y a trop d'espaces de tête. Actuellement, cela stoppera le process car il requestra une confirmation lors de l'écrasement des valeurs des colonnes suivantes (que vous ne voulez pas faire). Il doit y avoir un nombre important d'espaces pour que Excel pense qu'il appartient à deux colonnes, à less qu'il n'y ait plus d'espaces qu'un mot typique, il n'y a rien à craindre; juste quelque chose à prendre en count. par exemple s'il y avait deux fois plus d'espaces avant dans D6, il pourrait vouloir se split en deux colonnes.

vbscript_before
vbs_test.xlsx avant prep_xlsx.vbs

vbscript_after
vbs_test.xlsx après prep_xlsx.vbs