Shell脚本-将Excel(xlsx)转换为CSV-删除空白/选项卡空间

Shell脚本-将Excel(xlsx)转换为CSV-删除空白/选项卡空间,excel,shell,csv,unix,ubuntu,vb-script,Excel,Shell,Csv,Unix,Ubuntu,Vb Script,我收到了excel文件(xslx),其中包含我的项目的多个工作表。这些工作表上的记录数量从15k到70k不等。我需要对该数据执行以下任务,然后将其转换为CSV。或者转换为CSV,然后以任意方式处理数据 输入示例: call_no uniq_no Type Strength Description 2456 15 TX SomeSting SomeSting 5263 15 BLL SomeSting SomeS

我收到了excel文件(xslx),其中包含我的项目的多个工作表。这些工作表上的记录数量从15k到70k不等。我需要对该数据执行以下任务,然后将其转换为CSV。或者转换为CSV,然后以任意方式处理数据

输入示例:

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
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
按照要求,我需要

  • 在“uniq_no”列中查找重复值,并删除除原始记录(第一条记录)之外的所有重复记录
  • 用数据替换空白。(只需简单地查找空白并替换为值逻辑)
  • 删除任何单元格中的空格/制表符空格。(这一点并不重要,它就像一个侧面任务)
  • 输出示例:

    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
    
    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
    
    这是我的日常工作。我对shell脚本有相当的了解。所以,如果有人可以指导我,即使是一个粗略的脚本大纲,然后我可以在我的最后做调整。请帮忙

    更新:脚本所需的平台已澄清,响应不再适用。然而,我将把这个回答留在这里,以防这个问题的未来读者偶然发现它并发现它有用。任何用Ubuntu语言编写shell脚本的人都可以移植这个vbscript的某些方面

    这里有一些东西可以让你开始。如果使用Excel的宏记录器记录操作,请记住,在VBS中使用相同的命令意味着您必须删除所有命名参数

    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
    
    需要注意的是,如果前导空格过多,则使用with XLFIXEDWITH删除前导/尾随空格可能会尝试将列拆分为两个。当前,这将停止该过程,因为它将要求确认是否覆盖下一列的值(您不希望这样做)。必须有大量的空格才能让Excel猜测它属于两列,因此除非有比一个典型单词更多的空格,否则没有什么可担心的;只是一些需要注意的事情。e、 g.如果D6中前导空格的数量是原来的两倍,则可能需要将其拆分为两列


    准备前的vbs\u test.xlsx\u xlsx.vbs



    vbs_test.xlsx之后准备_xlsx.vbs

    谢谢,但您已经在VB脚本中提供了解决方案。我完全在linux(debian)平台上工作,所以我将无法使用它。我需要编写一个shell脚本并为此计划一个cron作业。另外,我对vb/.net几乎一无所知。你知道unix shell-in-shell中有没有任何并行命令或函数可以提供相同的输出。你需要做的第一件事是选择一个你熟悉的脚本平台,并将其添加到问题附带的技术标签中。我错误地添加了[vb脚本];你应该移除它。添加一个您希望在其中看到答案的语言标记。更好的是,当您编辑问题中的标记时,请提供您迄今为止的想法,并在叙述中注明您选择的脚本语言。如果一开始就这样做了,我就不会浪费我的时间和你的时间来提供一个你没有用的答案。对不起,Jeeped,我没有正确编辑标签,但我在主题和正文中提到了shell脚本,但我想这对寻找主题的人来说仍然是有用的信息;只是想让你对你的问题有一个集中的答案。我把“shell脚本”误认为是[vb脚本],因为vbscript没有在Excel的VBA中运行。它在自己的命令解释器(WSCRIPT)或命令shell(CSCRIPT)中运行。