当前位置: 首页 > 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…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...