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("."));
//加载Excel
workbook.loadFromFile(filePath);
int count = workbook.getWorksheets().getCount();
for (int i = 0; i < count; i++) {
//获取第一张工作表sheet
Worksheet sheet = workbook.getWorksheets().get(i);
//保存为CSV
sheet.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