Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 高效地从.xlsx电子表格中提取工作表名称_Excel_Bash_Csv_Ubuntu - Fatal编程技术网

Excel 高效地从.xlsx电子表格中提取工作表名称

Excel 高效地从.xlsx电子表格中提取工作表名称,excel,bash,csv,ubuntu,Excel,Bash,Csv,Ubuntu,我正在将一组约200个.xlsx文件(每个文件都有多个工作表)转换为.csv。in2cv允许使用-s开关提取单个工作表,但首先我需要从命令行获取.xlsx电子表格中所有工作表的名称 我尝试过python的xlrd包,但是对于一个大于100MB的文件来说需要几分钟,因为它需要加载整个工作簿才能读取工作表包装 我知道gnumeric ssconvert的-S开关的技巧,但宁愿不安装一个600MB的软件包,只有一个功能 是否有方法在不加载整个电子表格/工作簿的情况下提取工作表名称?如果没有,如何将每个

我正在将一组约200个.xlsx文件(每个文件都有多个工作表)转换为.csv。in2cv允许使用-s开关提取单个工作表,但首先我需要从命令行获取.xlsx电子表格中所有工作表的名称

我尝试过python的xlrd包,但是对于一个大于100MB的文件来说需要几分钟,因为它需要加载整个工作簿才能读取工作表包装

我知道gnumeric ssconvert的-S开关的技巧,但宁愿不安装一个600MB的软件包,只有一个功能

是否有方法在不加载整个电子表格/工作簿的情况下提取工作表名称?如果没有,如何将每个工作表和输出分别转换为单独的输出文件

下面是到目前为止我的解决方案,首先是用于查找所有未转换文件的bash脚本,其次是用于提取工作表名称的python脚本

!/bin/bash 路径 原始数据目录EBS=/mnt/DATA/shared/RAW CSV\u DATA\u DIR\u EBS=/mnt/DATA/shared/CSV ETL_CONVERT_DIR=$pwd/$dirname$0 函数检查与转换{ 如果filesize=0字节,则退出时出错 文件大小=$wc-b$1 如果[$filesize==0];则 回显错误:转换失败。空输出文件:$1 出口1 fi; } 对于每个数据源目录 对于$RAW_DATA_DIR_EBS/中的源;做 dir=$basename$source 如果不存在,则创建输出目录 mkdir-p$CSV\u DATA\u DIR\u EBS/$DIR 对于该源的每个文件 对于$RAW_DATA_DIR_EBS/$DIR/*.xlsx中的fin;做 获取图纸名称并存储在数组中 echo从$fin获取工作表名称 sheets=$python$ETL_CONVERT_DIR/check_sheet_names.py-x$fin | tr-d'[]'| tr-d[:punt:] 如果s=,则读取-r-a sheets\u数组$fout; 检查转换$fout; gzip$fout 其他的 echo电子表格$fin已转换:$fout fi; 完成; fi; 完成; 完成; 出口0 !/usr/bin/env python '检查工作表\u names.py 获取.xlsx电子表格中包含的工作表的名称 ' 导入xlrd 导入argparse 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': parser=argparse.ArgumentParserdescription='CLI' parser.add_参数'-xlsx','-x',type=str,required=True args=parser.parse_args xls=xlrd.open\u workbooks args.xlsx,on\u demand=True 打印xls.sheet\u名称 xls.release_资源 德尔xls
-n标志将在xlsx文档中提供不同工作表的名称

in2csv -n filename.xlsx

两个想法。。。我怀疑安装一个600MB的软件包,完成这项工作并将其删除,比写一个SO问题并等待2天的答案要快。其次,您可以非常简单地将其中一个/两个脚本并行化以获得更好的性能—这是前进的方向,因为CPU获得了更多的内核,而不是更多的GHz。