Shell脚本-将Excel(xlsx)转换为CSV-删除空白/选项卡空间
我收到了excel文件(xslx),其中包含我的项目的多个工作表。这些工作表上的记录数量从15k到70k不等。我需要对该数据执行以下任务,然后将其转换为CSV。或者转换为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
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
按照要求,我需要
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)中运行。