linux 在excel里面找内容
背景:在大数据行业中,很多数据源是excel文件,但是常常会出现查找excel内容找到对应的文件,所以制作了简单的shell脚本方便查询对应的excel文件
查看下面精简的内容即可,开箱即用
shell转换
unoconv环境安装
在线安装
yum -y install unoconv
-
制作离线安装包
yum -y install --downloadonly unoconv --downloaddir=./ # 如果就是想下载已经安装过过的RPM包,使用命令reinstall yum -y reinstall --downloadonly unoconv --downloaddir=./
离线安装
rpm -ivh --replacefiles --replacepkgs *.rpm
缺点
只能导出一个sheet
xls 转换csv sheel
vi xlsToCvs.sh
#!/bin/bash
# 当前目录
CURRENT_DIR=$(cd "$(dirname "$0")"pwd
)mkdir -p $CURRENT_DIR/csv
for i in *.xlsx;
do
fielName=${i:0:${#i}-5}
unoconv -f csv -o $CURRENT_DIR/csv/$fielName.csv $CURRENT_DIR/$i
done
for i in *.xls;
do
fielName=${i:0:${#i}-5}
unoconv -f csv -o $CURRENT_DIR/csv/$fielName.csv $CURRENT_DIR/$i
done
查找内容
grep -rn "关键字"
# 更加精确的查询
grep -rn "关键字"| grep "关键字2"
java 代码
思路:将所有的excel 和里面所有的sheet 转换成csv文件,再进行查找
安装 Spire.XLS for Java
首先,您需要在 Java 程序中添加 Spire.XLS for Java 文件作为依赖项。JAR 文件可以从此链接下载。 如果您使用 Maven,则可以将以下代码添加到项目的 pom.xml 文件中,从而轻松地在应用程序中导入 JAR 文件。
<repositories><repository><id>com.e-iceblue</id><name>e-iceblue</name><url>https://repo.e-iceblue.cn/repository/maven-public/</url></repository>
</repositories>
<dependencies><dependency><groupId>e-iceblue</groupId><artifactId>spire.xls</artifactId><version>13.7.3</version></dependency>
</dependencies>
将 Excel 转为 CSV
Excel 转为 CSV 可执行如下步骤来实现转换:
-
创建 Workbook 类的对象。
-
调用 Workbook.loadFromFile(String fileName) 方法加载 Excel 文档。
-
使用 Workbook.getWorksheets.get(int Index) 方法获取指定工作表。
-
使用 Worksheet.saveToFile(String fileName, String separator, java.nio.charset.Charset encoding) 方法将工作表保存为 CSV。
-
Java
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;import com.spire.xls.*;public class ExcelToCSV {public static void main(String[] args) {//创建Workbook类的对象Workbook workbook = new Workbook();String path = ".";String outPath = "./ExcelToCSV/ds";
// String path = "D:/Desktop/202305高项";if(args.length > 0){path = args[0];}if(args.length > 1){outPath = args[1];}if(!new File(outPath).exists()){File file = new File(outPath);file.mkdirs();}// 获取所有的excel文件List<String> FilePaths = getFilePaths(path);List<String> errorFilePaths = new ArrayList<>();for (String filePath : FilePaths) {try {File file = new File(filePath);String name = file.getName();name = name.substring(0,name.lastIndexOf("."));//加载Excelworkbook.loadFromFile(filePath);int count = workbook.getWorksheets().getCount();for (int i = 0; i < count; i++) {//获取第一张工作表sheetWorksheet sheet = workbook.getWorksheets().get(i);//保存为CSVsheet.saveToFile(outPath+File.separator+name+"-"+i+".csv", ",", Charset.forName("UTF-8"));}}catch (Exception e){errorFilePaths.add(filePath);e.printStackTrace();}}if(errorFilePaths.size() > 0){System.out.println("转换失败的文件");errorFilePaths.forEach(d->{System.out.println(d);});}}/*** 得到文件名称** @param path 路径* @return {@link List}<{@link String}>*/private static List<String> getFilePaths(String path) {File file = new File(path);if (!file.exists()) {return null;}List<String> FilePaths = new ArrayList<>();return getFilePaths(file, FilePaths);}/*** 得到文件名称** @param file 文件* @param FilePaths 文件名* @return {@link List}<{@link String}>*/private static List<String> getFilePaths(File file, List<String> FilePaths) {File[] files = file.listFiles();for (File f : files) {if (f.isDirectory()) {getFilePaths(f, FilePaths);} else {String fName = f.getName();String ext = fName.substring(fName.lastIndexOf(".") + 1);if(Objects.equals(ext,"xls") || Objects.equals(ext,"xlsx") ){try {FilePaths.add(f.getCanonicalPath());} catch (IOException e) {FilePaths.add(f.getAbsolutePath());}}}}return FilePaths;}}
编译后启动测试
ExcelToCSV.class 和spire.xls-13.7.3.jar 在同一目录
java -Xbootclasspath/a:spire.xls-13.7.3.jar ExcelToCSV /root/xlsx2csv-0.8.1/xx /root/xlsx2csv-0.8.1/xslxToCsvJava/xx
/root/xlsx2csv-0.8.1/xx 代表第一个参数 ,如果不填代表当前目录
/root/xlsx2csv-0.8.1/xslxToCsvJava/xx 代表第二个参数 ,如果不填代表当前目录生成ExcelToCSV目录
精简
文件下载地址
链接:https://pan.baidu.com/s/160pIG32L2TKwGx7sT9t7jA
提取码:p584
1、excel转换cvs
在下载文件里面 执行
/root/xlsx2csv-0.8.1/xx 代表需要转换的目录
bash excelToCsv.sh /root/xlsx2csv-0.8.1/xx
如果上面执行报错
可以执行打印出来的java命令
java -Xbootclasspath/a:spire.xls-13.7.3.jar ExcelToCSV /root/xlsx2csv-0.8.1/xx
2、查询内容
grep -rn "计划" ExcelToCSV
grep -rn "关键字" ExcelToCSV | grep "关键字2"
问题
在线安装找不到安装包
更新源再试试
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#清除所有
yum clean all #重新建立源数据
yum makecache