当前位置: 首页 > news >正文

1686_MATLAB处理Excel文件

全部学习汇总: GreyZhang/g_matlab: MATLAB once used to be my daily tool. After many years when I go back and read my old learning notes I felt maybe I still need it in the future. So, start this repo to keep some of my old learning notes servral years ago. (github.com)

首先说明,我并不专业,但我对这些东西确实是感兴趣。在这方面,我也没有接受过专业的培训或者学习,我只是自己折腾了一下,多少有点了解。现在网络上有一种称呼叫做“野生程序员”,我觉得我自己基本就是那么一个角色。我很期待跟路过此文的朋友们进行相应的交流探讨,那也将会让我有很大的受益。当然,如果有错误的话及时给我指正,我将会十分感激!

我的邮箱:greyzhang@126.com

本想整理一下MATLAB、Perl、Python三种语言处理Excel的方式以及他们之间的优缺点,整理了一半发现这工作量实在太大。最近工作确实是有点忙,闲暇之余也很难有足够多的时间。想了一下,换个方式或许会更好些。抽取能够拿得出的空余时间把三种处理Excel的方式简单的描述一下,做几个简单的示范先积累下素材。至于这之间的差异,看过三部分的素材之后相信我已经把我能够了解的东西展示了出来,互相对比一下也就能够看出在我理解掌握的角度来看,我到底对这些差异有什么样的体验。

我觉得MATLAB在Excel的处理上属于简约派,因为它的数据处理能力固然强大但是我们强行也把那部分划归到MATLAB对Excel的功能支持稍微有些牵强了。不过,这确实不是重点。其实,我介绍的这几个函数接口都是调用了微软Office的软件。这一下子就说出了一个很重要的短板了吧!是的,你得有银子!不仅需要买价格昂贵的MATLAB,还需要买Windows,还需要Office的Excel。因此,通常情况下这种方式只有在公司的时候才会用。不过,它有一个很好的地方是对数据重写的支持,也就是对同一个单元格的多次写入。听起来似乎没什么大不了的,就是重写两次嘛!如果回到家,你没有了MATLAB以及Excel,用上Perl或者Python时,这就是你的噩梦。当然,那时候我们还有其他的解决方案。

在处理Excel的时候,其实核心就三部分读、写加上内容的处理。关于内容的处理,这跟使用的工具是绑定的,都是MATLAB、Perl或者Python的基本程序设计。而阻碍大家实现处理功能的其实就只有读和写。我说MATLAB是简约派是因为关于读写,掌握两个函数基本就够用了,掌握三个基本就是加强版的水准了。目前为止,我用到的函数没有超过三个的情况。

三个函数之一:xlsfinfo

我用到这个函数的时候一般是因为我不知道Excel中有多少个Sheet页或者不知道Sheet页的名字,用这个函数可以获取到这部分信息。比如,我将要处理图1中当前目录下的data.xls文件,现在我想获取它到底有几个Sheet页,分别是什么名字:

图1

如果不打开Excel文件,我可以直接使用以下语句实现相关信息的读取(图2)。

图2

第一个语句:[~,sheets] = xlsfinfo('data.xls');

它的作用是把Excel的数据全都加载到WorkSpace。这里面用到的接口原型是[status,sheets] = xlsfinfo(filename),其中status我用不到设置成了缺省。查一下MATLAB的文档会看到这个接口有三种原型,这跟C语言很不一样,但是用过Python或者C#的肯定熟悉。不同于C语言,MATLAB中的函数式可以重载的。

第二个语句:sheet_number = length(sheets)

它的作用是判断到底有几个Sheet页,使用了比较常用的length()函数。length()函数的参数也是可以重载的,可以接受几种不同类型的参数。这样看来,虽说MATLAB是简约派,但是其实是表面上的简约但是内功确实比较深厚。在这个语句输入的时候,我故意没有加结束时候的分号,这样就可以在命令窗口直接看到输出的结果。如果是写脚本或者程序,最好还是有print函数。一共有几个Sheet页,在WorkSpace中可以直接看到,这里保存了运行过程中所有的变量信息以及执行结果。不过,写脚本或者程序的时候我们肯定看不到。鉴于通用性,加入了length()函数。

第三个语句:

for i = 1 : sheet_number

sheets(1,i)

end

这是一个MATLAB的for循环,如果是写代码文件当然还得考虑一下排版。一般情况下,MATLAB的自动缩进就是一个很好的排版风格。这里重复执行的语句同样没有加分号,所以在命令窗口能够看到输出的结果(图3)。

图3

三个函数之二:xlsread

在很长的一段时间内,处理Excel文件我只会这一个函数。通常,我的工作是根据Excel文件中的信息处理处一个结果。这样,我其实只需要能够把Excel文件的信息导入到WorkSpace就已经万事大吉了。如果接着上面的操作继续,我们已经知道Sheet页中有一个data页,我们想把这部分读取出来。那么使用这个函数就可以完成。这里把Excel中的数据以三种方式读了出来:数字、文本、全部的原始数据。从图4,5,6中可以看到这些数据的一部分展示(嗯,是的,这里是通过其他的方式从我的博客爬取了一部分信息。把我这些年写的博客中的访问量超过50的博客全都搜集了一下。最近的确是对数据分析感兴趣,我想做个试验看看我能否通过数据分析确定热门主题然后定向导入我的博客,看看是否能够让我的博客在一年的时间中访问量超过过去5年。我觉得这会是一个很有意思的分析试验。)。

需要注意的是,如果单独以数字或者文本的形式处理数据的时候,如果Excel的内容控制不够好会丢失很多信息。如果以原始数据处理,那将会导致算法的复杂化。如果想快速处理出自己想要的结果,过去的经验告诉我最好是把数字设置为文本格式。这样,脚本将会是最简单的,不过确实是把难题扔给了Excel的管理者。在我接触了大数据的分析之后,我发现这确实是一个不太好的思维。写个简单的小脚本使用文本固然还能凑合,但是倘若遇到大数据,与数字存储相比。文本不仅意味着更多的存储资源,也意味着更慢的处理速度以及效率更低的算法。到底选择什么方式,其实这跟我们使用的场合还是很相关的。通常使用文本足以应付,我们写的脚本处理成百上千个数据其实最多也就是那么几秒钟的事儿。

图4

图5

图6

这部分就介绍了这一个语句,够简单。而数据的处理其实就是简单的M语言编程,常用的莫过于数学运算以及字符串处理。如果需要使用正则表达式,那就算得上是高级操作了。

三个函数之三:xlswrite

再接着上面来吧!我们把读出来的原始数据信息写入到一个新的名叫test.xls的Excel文件中名叫new_data的Sheet页(图7)。

图7

成功写入了信息,而且多次重复写入不会出现任何问题。如果做一下尝试你会发现,这个函数的“重写”其实不是重写功能,而是修改!这是Perl、Python等处理的时候没有的一种很不错的体验。不过我个人很不建议重写操作,因为这个需要不断把数据写入硬盘,速度实在是太慢了!因此,在处理数据的时候最好的方式是把所有的信息在MATLAB中以矩阵的方式处理,处理结束后以矩阵的方式一次性写入。每次增加sheet页的时候,会出现一个警告。如果打开生成的Excel,也会很有意思的发现里面还有其他的Sheet页。这是因为这个过程本质上就是在调用微软的Excel程序,而这种现象也是Excel程序的一种动作继承。如果在脱离了微软office的Perl或者Python处理库做相应操作时确实是干净利落的多。

最后,打开生成的Excel看一眼(图8):

图8

结束语:

相信整个处理的过程大致还是提到了,至于中间数据的处理有着灵活的方法。这个到底怎么来处理因人而异了。

想到了我前文中提到的分析,其实MATLAB肯定能够做这个分析,小菜一碟儿!不过分析是我的问题啦!

相关文章:

1686_MATLAB处理Excel文件

全部学习汇总: GreyZhang/g_matlab: MATLAB once used to be my daily tool. After many years when I go back and read my old learning notes I felt maybe I still need it in the future. So, start this repo to keep some of my old learning notes servral …...

亿发软件:中大型仓库进出货管理系统解决方案,定制软件让仓储作业高效便捷

中大型仓库出入库管理是传统厂家供应链管理流程的重要部分,直接关乎货物在仓库当中存储的安全,和员工工作的效率。一旦仓库管理当中出现了疏漏,那么货物的信息数据就会发生变动,导致实际与账目不符。人工带来的低效与不可控是传统…...

SQL Server基础 第二章 表结构管理

目录 一、数据类型 1,字符类数据类型 2,数值型数据类型 3,日期/时间型数据类型 二、主键(Primary key) 三、默认值 四、唯一键(Unique) 五、自增标识 六、约束 七、外键 一、数据类型 …...

华为OD机试真题(Java),最小步骤数(100%通过+复盘思路)

一、题目描述 一个正整数数组 设为nums&#xff0c;最大为100个成员&#xff0c;求从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数。 要求&#xff1a; 第一步 必须从第一元素起 且 1<第一步步长<len/2 (len为数组长度)&#xff1b;从第二步开始只能以所…...

3分钟搞懂:JavaScript 和 ECMAScript

JavaScript 和 ECMAScript ECMAScript 是 JavaScript 语言的国际标准&#xff0c;JavaScript 是 ECMAScript 的一种实现&#xff08;Adobe ActionScript 和 JScript 同样实现了 ECMAScript&#xff09;。 ECMAScript 是欧洲计算机制造商协会 ECMA&#xff08;European Comput…...

Bito:一款 iead/webstorm 神级插件,由 ChatGPT 团队开发,堪称辅助神器

前言&#xff1a; idea(后端)&#xff0c;webstorm(前端)中可以用的一款辅助插件&#xff1a;Bito 个人尝试体验效果&#xff1a; 优点是&#xff1a;可以自动完成一些场景代码。 缺点&#xff1a;太慢了&#xff0c;大部分时间一直转圈 摘取文档&#xff1a; 什么是Bito&…...

[ 云原生 | Docker ] 构建高可用性的 SQL Server:Docker 容器下的主从同步实现指南

文章目录 一、前言二、SQL Server 主从同步的原理介绍三、具体的搭建过程3.1 准备工作3.1.1 卸载旧版本&#xff08;如果有&#xff0c;可选&#xff0c;非必须&#xff09;3.1.2 安装 Docker3.1.3 验证本地 Docker 是否安装成功 3.2 创建 Docker 网络3.3 创建主从节点的 SQL S…...

Binary Utilities非默认目录构建和安装

在AppArmor零知识学习六、源码构建&#xff08;3&#xff09;中&#xff0c;详细介绍了libapparmor的构建步骤&#xff0c;但那完全使用的是官网给出的默认参数。如果需要将目标文件生成到指定目录而非默认的/usr&#xff0c;则需要进行一些修改&#xff0c;本文就来详述如何进…...

【故障检测】基于 KPCA 的故障检测【T2 和 Q 统计指数的可视化】(Matlab代码实现)

&#x1f4a5; &#x1f4a5; &#x1f49e; &#x1f49e; 欢迎来到本博客 ❤️ ❤️ &#x1f4a5; &#x1f4a5; &#x1f3c6; 博主优势&#xff1a; &#x1f31e; &#x1f31e; &#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 …...

从“捐赠openEuler”到“向openEuler捐赠”,openEuler生态走入高速发展期

【中国&#xff0c;上海&#xff0c;2023年4月21日】openEuler Developer Day 2023于4月20-21日在线上和线下同步举办。本次大会由开放原子开源基金会指导&#xff0c;中国软件行业协会、openEuler社区、边缘计算产业联盟共同主办&#xff0c;以“万涓汇流&#xff0c;奔涌向前…...

ambari的kafka服务开启sasl

添加 sasl 配置⽂件 集群部署 Kafka2.2下载地址 http://archive.apache.org/dist/kafka/2.2.1/kafka_2.11-2.2.1.tgz 解压安装包 tar -zxvf kafka_2.11-2.2.1.tgz 部署略 ambari 数据kafka服务 在kafka的conf目录下创建sasl_conf目录,将kafka_client_jaas.conf/kafka_se…...

改善内部客户服务的 3 个技巧

在当今世界&#xff0c;许多公司都专注于改善客户关系管理&#xff0c;公司管理层面临的挑战是他们不仅拥有外部客户&#xff0c;员工也是有痛点和需求的内部客户。正如糟糕的客户服务会导致客户流失一样&#xff0c;糟糕的内部客户服务会增加员工流动率。在当今瞬息万变的就业…...

使用Apache POI的SXSSFworkbook实现大量数据导出到Excel文件

Apache POI是一个开源的、用来读写微软Excel文件的Java工具包&#xff0c;一般用来读取Excel文件中的数据或者将数据导出到Excel文件。HSSFWorkbook用来处理早期版本的Excel文件&#xff08;xls格式&#xff09;&#xff0c;而XSSFWorkbook用来处理新版本Excel文&#xff08;xl…...

【技术选型】Java 定时任务

文章目录 背景一、基础1.1 Cron表达式1.2 定时任务的三大组成部分 二、Java做定时任务的技术方案比较2.1、JDK seelp实现定时任务2.2、JDK Timer & TimerTask 实现定时任务2.3、JDK ScheduledExecutorService2.4、Quartz框架2.5、Spring Task 中的 schedule2.6、Elastic-Jo…...

让你立刻学会指针

☃️个人主页&#xff1a;fighting小泽 &#x1f338;作者简介&#xff1a;目前正在学习C语言和数据结构 &#x1f33c;博客专栏&#xff1a;C语言学习 &#x1f3f5;️欢迎关注&#xff1a;评论&#x1f44a;&#x1f3fb;点赞&#x1f44d;&#x1f3fb;留言&#x1f4aa;&am…...

重塑元宇宙体验!元宇宙实时云渲染解决方案来了

元宇宙作为人工智能、云计算和数字孪生等前沿技术的结合体&#xff0c;近年来越发受到各大企业重视。 元宇宙的应用场景层出不穷&#xff0c;不仅包括营销推广场景&#xff0c;还有品牌活动和电商销售&#xff0c;能有效提升品宣和商业转化效果。 元宇宙也具有极大的建设价值…...

Node【Global全局对象】

文章目录 &#x1f31f;前言&#x1f31f;Global全局对象&#x1f31f;Global对象属性与方法&#x1f31f;Global对象属性&#x1f31f;process&#x1f31f;Buffer类&#x1f31f;console &#x1f31f;写在最后 &#x1f31f;前言 哈喽小伙伴们&#xff0c;新的专栏 Node 已…...

【技术】《Netty》从零开始学netty源码(四十一)之PoolChunk

PoolChunk 我们再回顾以下netty中与内存相关的类&#xff1a; 前面我们已经分析了PoolSubpag&#xff0c;本章我们分析PoolChunk,先看下它的属性值&#xff1a; 为了更好的理解这些属性值&#xff0c;我们结合它的构造函数来理解&#xff0c;具体的源码如下&#xff1a; 其…...

新建虚拟机更改ip(连接xshell)

# 查看网络设备 [rootcentos79 ~]# nmcli device DEVICE TYPE STATE CONNECTION ens32 ethernet 已连接 ens32 ens33 ethernet 已连接 ens33 virbr0 bridge 已连接 virbr0 lo loopback 未托管 -- # 查看…...

什么是VBST和PVST?两者有啥区别?

在计算机网络中&#xff0c;VLAN&#xff08;Virtual Local Area Network&#xff0c;虚拟局域网&#xff09;是一种将局域网划分为多个逻辑上独立的子网的技术&#xff0c;它可以帮助网络管理员更好地管理网络资源。 在VLAN技术中&#xff0c;STP&#xff08;Spanning Tree P…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...