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,最大为100个成员,求从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数。 要求: 第一步 必须从第一元素起 且 1<第一步步长<len/2 (len为数组长度);从第二步开始只能以所…...
3分钟搞懂:JavaScript 和 ECMAScript
JavaScript 和 ECMAScript ECMAScript 是 JavaScript 语言的国际标准,JavaScript 是 ECMAScript 的一种实现(Adobe ActionScript 和 JScript 同样实现了 ECMAScript)。 ECMAScript 是欧洲计算机制造商协会 ECMA(European Comput…...

Bito:一款 iead/webstorm 神级插件,由 ChatGPT 团队开发,堪称辅助神器
前言: idea(后端),webstorm(前端)中可以用的一款辅助插件:Bito 个人尝试体验效果: 优点是:可以自动完成一些场景代码。 缺点:太慢了,大部分时间一直转圈 摘取文档: 什么是Bito&…...

[ 云原生 | Docker ] 构建高可用性的 SQL Server:Docker 容器下的主从同步实现指南
文章目录 一、前言二、SQL Server 主从同步的原理介绍三、具体的搭建过程3.1 准备工作3.1.1 卸载旧版本(如果有,可选,非必须)3.1.2 安装 Docker3.1.3 验证本地 Docker 是否安装成功 3.2 创建 Docker 网络3.3 创建主从节点的 SQL S…...
Binary Utilities非默认目录构建和安装
在AppArmor零知识学习六、源码构建(3)中,详细介绍了libapparmor的构建步骤,但那完全使用的是官网给出的默认参数。如果需要将目标文件生成到指定目录而非默认的/usr,则需要进行一些修改,本文就来详述如何进…...

【故障检测】基于 KPCA 的故障检测【T2 和 Q 统计指数的可视化】(Matlab代码实现)
💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 …...

从“捐赠openEuler”到“向openEuler捐赠”,openEuler生态走入高速发展期
【中国,上海,2023年4月21日】openEuler Developer Day 2023于4月20-21日在线上和线下同步举办。本次大会由开放原子开源基金会指导,中国软件行业协会、openEuler社区、边缘计算产业联盟共同主办,以“万涓汇流,奔涌向前…...

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 个技巧
在当今世界,许多公司都专注于改善客户关系管理,公司管理层面临的挑战是他们不仅拥有外部客户,员工也是有痛点和需求的内部客户。正如糟糕的客户服务会导致客户流失一样,糟糕的内部客户服务会增加员工流动率。在当今瞬息万变的就业…...
使用Apache POI的SXSSFworkbook实现大量数据导出到Excel文件
Apache POI是一个开源的、用来读写微软Excel文件的Java工具包,一般用来读取Excel文件中的数据或者将数据导出到Excel文件。HSSFWorkbook用来处理早期版本的Excel文件(xls格式),而XSSFWorkbook用来处理新版本Excel文(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…...

让你立刻学会指针
☃️个人主页:fighting小泽 🌸作者简介:目前正在学习C语言和数据结构 🌼博客专栏:C语言学习 🏵️欢迎关注:评论👊🏻点赞👍🏻留言💪&am…...

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

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

【技术】《Netty》从零开始学netty源码(四十一)之PoolChunk
PoolChunk 我们再回顾以下netty中与内存相关的类: 前面我们已经分析了PoolSubpag,本章我们分析PoolChunk,先看下它的属性值: 为了更好的理解这些属性值,我们结合它的构造函数来理解,具体的源码如下: 其…...

新建虚拟机更改ip(连接xshell)
# 查看网络设备 [rootcentos79 ~]# nmcli device DEVICE TYPE STATE CONNECTION ens32 ethernet 已连接 ens32 ens33 ethernet 已连接 ens33 virbr0 bridge 已连接 virbr0 lo loopback 未托管 -- # 查看…...

什么是VBST和PVST?两者有啥区别?
在计算机网络中,VLAN(Virtual Local Area Network,虚拟局域网)是一种将局域网划分为多个逻辑上独立的子网的技术,它可以帮助网络管理员更好地管理网络资源。 在VLAN技术中,STP(Spanning Tree P…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...