linux 在excel里面找内容

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-iceblueid>
        <name>e-icebluename>
        <url>https://repo.e-iceblue.cn/repository/maven-public/url>
    repository>
repositories>
<dependencies>
    <dependency>
        <groupId>e-icebluegroupId>
        <artifactId>spire.xlsartifactId>
        <version>13.7.3version>
    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"

问题

在线安装找不到安装包

linux 在excel里面找内容_第1张图片

更新源再试试

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

你可能感兴趣的:(linux,excel,运维)