linux 在excel里面找内容

news2024/12/25 12:45:37

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/783218.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python web开发之gunicorn 和 uWSGI 对比和配置

关于uWSGI的定义&#xff0c;在上一篇文章中写了&#xff0c;链接&#xff1a;WSGI/uwsgi/uWSGI详解 python开发常见的容器就只有的uWSGI和Gunicorn&#xff0c;本文介绍两者的区别和配置 1. 共同点 在架构上&#xff0c;nginx负责动态的转发和静态文件的直接访问&#xff0c;…

三、万物皆对象(2)

本章概要 类的创建 类型字段基本类型默认值方法使用 返回类型参数列表 程序编写 命名可见性使用其他组件static 关键字 小试牛刀 编译和运行 编码风格 类的创建 类型 如果一切都是对象&#xff0c;那么是什么决定了某一类对象的外观和行为呢&#xff1f;换句话说&#xff…

2023年华数杯数学建模竞赛ABC题思路代码论文资料汇总贴

下文包含&#xff1a;2023华数杯数学建模竞赛ABC题思路解析代码参考论文等及如何准备数学建模竞赛 C君将会第一时间发布选题建议、所有题目的思路解析、相关代码、参考文献、参考论文等多项资料&#xff0c;帮助大家取得好成绩。2023华数杯数学建模竞赛于8月3号下午6点正式开赛…

Origin科学绘图分析软件2023最新版下载安装教程

在科学研究和工程领域&#xff0c;数据的处理和分析是至关重要的一环&#xff0c;而Origin则是这方面的一款重要工具。Origin软件是由OriginLab公司开发的&#xff0c;主要用于各种科学数据的处理和分析&#xff0c;以及高质量的科学图形的创建。#乐享周末分享吧# 下载地址文末…

Spring Cloud Eureka 服务发现速度慢配置优化总结

文章目录 一、 Eureka-server 服务端缓存问题1.1 服务端缓存1.2 客户端从服务端获取实例数据的过程1.3 优化 二、客户端 Eureka-client 缓存导致2.1 Eureka客户端和服务端交互缓存2.2 Ribbon 缓存了EurekaClient的缓存2.3 优化 使用Eureka时&#xff0c;常常会发现服务发现慢&a…

Stable Diffusion 本地部署教程

1.前言&#xff1a; 最近看Stable Diffusion开源了&#xff0c;据说比Disco Diffusion更快&#xff0c;于是从git上拉取了项目尝试本地部署了&#xff0c;记录分享一下过程~ 这里是官网介绍&#xff1a;https://stability.ai/blog/stable-diffusion-public-release 2.必要前提…

jar 更新 jar包内的 class,以及如何修改class

一、提取Jar 内文件 #提取jar内的配置文件jar -xvf a.jar META-INF\plugin.xml-已解压: META-INF/plugin.xml#提取jar内的class文件&#xff0c; 提示&#xff1a;反编译为java文件&#xff0c;修改后再使用javac xxx.java编译为class&#xff0c;jar -xvf a.jar io.config.**…

三维测量技术在高端精密制造中的应用

科技创新是新时代的重要发展动力。三维测量技术以精密机械为基础&#xff0c;综合应用了电子技术、计算机技术、光学技术和数控技术等先进技术&#xff0c;可以对机械、汽车、航空、家具、工具原型等测量出高精度的几何零部件以及测量复杂形状的机械零部件&#xff0c;给各行业…

Autosar IOC机制(核间通信)

文章目录 一、IOC二、诊断代码实例一、IOC IOC和操作系统紧密相关,是操作系统实现的一部分 ①ECU间通信:通过通信协议栈定义好的API进行通信,通俗来讲就是通过总线(CAN/LIN/Flexlay)进行通信。 ②OS-Application内SWC间的通信:通过RTE处理。 ③OS-Application间的通信:通信…

【iOS】自定义字体

文章目录 前言一、下载字体二、添加字体三、检查字体四、使用字体 前言 在设计App的过程中我们常常会想办法去让我们的界面变得美观&#xff0c;使用好看的字体是我们美化界面的一个方法。接下来笔者将会讲解App中添加自定义字体 一、下载字体 我们要使用自定义字体&#x…

JQuery全部过滤选择器详细介绍下

文章目录 JQuery全部过滤选择器详细介绍-下属性过滤选择器● 属性过滤选择器-应用实例代码演示 子元素过滤选择器● 子元素过滤选择器基本介绍5. nth-child() 选择器详解如下&#xff1a;● 子元素过滤选择器示例-应用实例代码演示 表单属性过滤选择器● 此选择器主要对所选择的…

壹牛NFT数字艺术藏品数藏系统源码 全开源

这套源码小白大致测试了一下发现几点问题&#xff0c;uniapp少了几个文件不能编译只能用public/h5里面web端,后台账号密码似乎不正确&#xff0c;这类源码挺少的感兴趣的自己下来研究修复一下吧。 壹牛NFT数字艺术藏品数藏系统源码 全开源 这个版本新增了不少功能&#xff0c…

动态规划入门第2课,经典DP问题1 --- 线性

动态规划要点 阶段的2个方向&#xff1a;从上到下&#xff1b;从下到上。 动态规划要点 从递归到DP 动态规划要点 两个2个方向 优化的可能性 第1题 合唱队形 N位同学站成一排&#xff0c;音乐老师要请其中的(N-K)位同学出列&#xff0c;使得剩下的K位同学排成合唱队形…

Apple M1 Pro macOS 切换中文输入法卡住

(macOS 在切换中文输入法时出现卡住的情况 1&#xff0c;切换为中文输入法后再次卡住2&#xff0c;杀死 简体中文输入方式的进程参考 将光标移到菜单栏的输入法切换为英文输入法 多次切换为英文输入法&#xff0c;可以切换为英文输入法 切换为英文输入法后电脑不卡顿了&#xf…

基于springboot+jpa+mysql+html网上商城系统

基于springbootjpamysqlhtml网上商城系统 一、系统介绍二、功能展示1.主页(客户)2.登陆&#xff08;客户&#xff09;3.注册&#xff08;客户&#xff09;4.购物车(客户)5.我的订单&#xff08;客户&#xff09;6.用户管理&#xff08;管理员&#xff09;7.分类管理&#xff08…

iOS--编译链接的过_1

iOS 开发中使用的是编译语言&#xff0c;所谓编译语言是在执行的时候&#xff0c;必须先通过编译器生成机器码&#xff0c;机器码可以直接在CPU上执行&#xff0c;所以执行效率较高&#xff0c;是使用 Clang / LLVM 来编译的。LLVM是一个模块化和可重用的编译器和工具链技术的集…

Java基本数据类型默认初始化值测试

1.基本数据类型为成员变量 public class Test {boolean b;char c;byte bt;short s;int i;long l;float f;double d;public static void main(String[] args) {Test t new Test();System.out.println("boolean类型默认值&#xff1a;" t.b);System.out.println(t.c…

Android 中 cgroup抽象层详解

源码基于&#xff1a;Android R 0. 前言 在之前的博文《Android中app freezer原理》一文中&#xff0c;我们看到冻结器的enable、freeze、unfreeze 都是通过 cgroup 的机制进行处理。 本文将介绍下 Android 中 cgroup 的抽象层基本信息和使用方式。 1. cgroups 简介 cgroups…

Linux常用命令——dump命令

在线Linux命令查询工具 dump 用于备份ext2或者ext3文件系统 补充说明 dump命令用于备份ext2或者ext3文件系统。可将目录或整个文件系统备份至指定的设备&#xff0c;或备份成一个大文件。 语法 dump(选项)(参数)选项 -0123456789&#xff1a;备份的层级&#xff1b; -b&…

layui框架学习(32:表单)

Layui中的分页模块laypage支持在指定的容器中显示分页信息&#xff0c;主要是指总页数、当前页面、上一页/下一页等信息&#xff0c;可以配合其它组件实现分页显示数据或者分页显示内容&#xff0c;事实上&#xff0c;Layui中的动态数据表格等模块都附带有显示分页功能。laypag…