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-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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Java+SpringBoot+Vue+uniapp微信小程序实现仓储管理系统

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

windos 服务器设置指定ip访问指定端口,其他ip不能访问

需求&#xff1a;设置指定ip访问指定端口&#xff0c;其他ip不能访问 一&#xff0c;禁止所有ip访问 需要打开IP安全策略 或者winR 输入secpol.msc 1.先创建一个ip安全策略 2.点击添加&#xff0c;不使用添加向导&#xff0c;建一个安全策略 继续点添加 二&#xff0c;放开需…

Echarts 柱状图显示百分比

以下是生成的 option option {yAxis: { name: 金额&#xff08;元&#xff09;, type: value },xAxis: { type: category },legend: {},series: [{stack: x,name: 早餐,label: {normal: {show: true,position: insideRight,// 格式化显示formatter: function (params) {let …

LabVIEW使用自定义模板和示例项目来开发LabVIEW项目

LabVIEW使用自定义模板和示例项目来开发LabVIEW项目 创建项目时&#xff0c;LabVIEW将显示“创建项目”对话框&#xff0c;以帮助您选择模板或示例项目来作为开发起点。如果要使用您创建的项目作为自定义模板和示例项目&#xff0c;您必须将每个项目的源文件和元数据添加到相应…

软件外包开发的需求分析

需求分析是软件开发中的关键步骤&#xff0c;其目的是确定用户需要什么样的软件&#xff0c;以及软件应该完成哪些任务。需求分析是软件工程的早期工作&#xff0c;也是软件项目成功的基础&#xff0c;因此花费大量精力和时间去做好需求分析是值得的。今天和大家分享软件需求分…

Macbook M1编译安装Java OpenCV

OpenCV-4.8.0编辑安装 查询编译依赖 brew info opencv确保所有需要模块都打上了✔&#xff0c;未打✔的需要使用brew进行安装 下载OpenCV源码 在此处下载OpenCV源代码&#xff0c;选择Source&#xff0c;点击此处下载opencv_contrib-4.8.0 或者使用如下命令&#xff0c;通…

MultipartFile类型接收上传文件报出的UncheckedIOException以及删除tomcat临时文件失败源码探索

1、描述异常背景&#xff1a; 因为需要分析数据&#xff0c;待处理excel文件的数据行数太大&#xff0c;手动太累&#xff0c;花半小时写了一个定制的数据入库工具&#xff0c;改成了通用的&#xff0c;整个项目中的万级别数据都在工具上分析&#xff0c;写SQL进行分析&#x…

2_Apollo4BlueLite中断控制器NVIC

1.概述 Apollo4BlueLite 的中断控制器是采用 ARM Cortex-M4 内核&#xff0c;并集成了 NVIC&#xff08;Nested Vectored Interrupt Controller&#xff0c;嵌套向量中断控制器&#xff09;作为其中断控制器。 NVIC 是 ARM Cortex-M 系列处理器中常用的中断控制器&#xff0c…

算法(2)

二叉树 镜像二叉树 树轴对称 第一个节点的左子树与第二个节点的右子树同步递归对比&#xff0c;第一个节点的右子树与第二个节点的左子树同步递归比较。 二叉树序列化、反序列化 当然你也可以根据满二叉树结点位置的标号规律来序列化&#xff0c;还可以根据先序遍历和中序遍…

余切拉普拉斯算子推导 cotangent Laplace-Beltrami operator

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 参考自polygon mesh proccessing这本书 基本思路及原理 余切拉普拉斯算子是一种考虑了网格底层几何联系的一种算子&#xff0c;在网格平滑&#xff0c;参数化等算法中…

Llama 2: Open Foundation and Fine-Tuned Chat Models

文章目录 TL;DRIntroduction背景本文方案 实现方式预训练预训练数据训练细节训练硬件支持预训练碳足迹 微调SFTSFT 训练细节 RLHF人类偏好数据收集奖励模型迭代式微调&#xff08;RLHF&#xff09;拒绝采样&#xff08;Rejection Sampling&#xff09;PPO多轮一致性的系统消息&…

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B:美国纽约公共自行车使用量预测分析 问题二Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B&#xff1a;美国纽约公共自行车使用量预测分析 问题二 相关链接 【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B&#xff1a;美国纽约公共自行车使用量预测分析 问题一Python代码分析 【2023 年第二届钉钉杯大学生大数据挑…

Tensorflow学习

一、处理数据的结构 案例代码如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior() import numpy as np# create data x_data np.random.rand(100).astype(np.float32) y_data x_data*0.1 0.3# 创建结构(一维结构) Weights tf.Variable(tf.random.uniform(…

Megatron-LM、NVIDIA NeMo、model_optim_rng.pt 文件是什么?

本文涉及以下几个概念&#xff0c;分别是&#xff1a; Megatron和Megatron-LM-v1.1.5-3D_parallelism NVIDIA NeMo Megatron和Megatron-LM-v1.1.5-3D_parallelism是什么&#xff1f; Megatron是由NVIDIA开发的一种用于训练大规模语言模型的开源框架。它旨在提供高效的分布式…

安科瑞能源物联网以能源供应、能源管理、设备管理、能耗分析的能源流向为主线-安科瑞黄安南

摘要&#xff1a;随着科学技术的发展&#xff0c;我国的物联网技术有了很大进展。为了提升电力抄表服务的稳定性&#xff0c;保障电力抄表数据的可靠性&#xff0c;本文提出并实现了基于物联网的智能电力抄表服务平台&#xff0c;结合云计算、大数据等技术&#xff0c;提供电力…

雷达信号处理自学总结(持续更新)

傅里叶变换的频率分辨率 频率分辨率 采样频率 信号长度 频率分辨率 \frac{采样频率 }{信号长度} 频率分辨率信号长度采样频率​ 可用numpy模块的fft.fftfreq函数求出傅里叶变换的频率分辨率。 https://numpy.org/doc/stable/reference/generated/numpy.fft.fftfreq.html

opencv 图像距离变换 distanceTransform

图像距离变换&#xff1a;计算图像中每一个非零点距离离自己最近的零点的距离&#xff0c;然后通过二值化0与非0绘制图像。 #include "iostream" #include "opencv2/opencv.hpp" using namespace std; using namespace cv;int main() {Mat img, dst, dst…

关于position:fixed定位的位置不对的问题(即没有按照浏览器的窗口进行定位)

问题&#xff1a; 今天在开发过程中发现元素使用 position: fixed 时位置有问题&#xff0c;位置跟我写的位置对不上&#xff0c;后面在 MDN 上面找到了答案&#xff0c;下面是关于 position: fixed 的描述&#xff1a; fixed&#xff1a; 元素会被移出正常文档流&#xff0c;并…

通过Vue-cli解决前端跨域问题

1、找到vue.config.js 在vue.config.js当中增加如下配置 devServer: {port: 3001,proxy: {/agent: {target: http://10.8.50.250:6666,ws: false, //true,开启ws, 如果是http代理此处可以不用设置changeOrigin: true, // 如果接口跨域&#xff0c;需要进行这个参…

Rust之包、单元包及模块

包&#xff1a;一个用于构建、测试并分享单元包的Cargo功能&#xff1b;单元包&#xff1a;一个用于生成库或可执行文件的树形模块结构&#xff1b;模块及use关键字&#xff1a;被用于控制文件结构、作用域及路径的私有性&#xff1b;路径&#xff1a;一种用于命名条目的方法&a…