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肯定能够做这个分析,小菜一碟儿!不过分析是我的问题啦!

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

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

相关文章

非常详细的阻抗测试基础知识

编者注:为什么要测量阻抗呢?阻抗能代表什么?阻抗测量的注意事项... ...很多人可能会带着一系列的问题来阅读本文。不管是数字电路工程师还是射频工程师,都在关注各类器件的阻抗,本文非常值得一读。全文13000多字&#…

基于html+css的图片展示17

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

2023年4月-近期看书

复习书记 用于读书 文章目录 复习书记一、(2001)控制工程基础二、(3001)交通管理与控制三、(1001)英语 一、(2001)控制工程基础 学习这本书的前6章节。 参看视频链接: https://www.bilibili.com/video/BV1Sb411q7jU?p8&spm_id_frompageDriver&vd_source…

数字化转型危与机,20年老厂的升级之路

“投资大、周期长、见效慢”,是每一家企业在考虑数字化战略时,都会纠结的问题。 打江山容易,守江山难 企业在快速扩张的过程中,往往可以不需要过多的考虑细节的问题,跑马圈地的打法会更加有效。 但是市场占有量开始饱…

瀚高股份吕新杰:创新开源双驱动,躬耕国产数据库

作者 | 伍杏玲 近年来,国际形势不断变幻,也给人们带来巨大警示:关键核心技术是买不来、讨不来的,中国科技企业需寻找研发自强之路。 瀚高基础软件股份有限公司(简称瀚高股份)专注数据库十八年,始…

大厂面试-算法优化:冒泡排序你会优化吗?

关注公众号:”奇叔码技术“ 回复:“java面试题大全”或者“java面试题” 即可领取资料 原文:冒泡排序及优化代码 https://blog.csdn.net/weixin_43989347/article/details/122025689原文:十大经典排序算法 https://frxcat.fun/p…

史上最详细的八大排序详解!(建议收藏)

🚀write in front🚀 📜所属专栏:初阶数据结构 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对…

问题排查记录-ffmpeg链接libavfilter和libavcodec:未定义的引用

目录 一、问题背景 二、问题现象 2.1 ffmpeg测试例程 2.2 编译脚本 2.3 错误提示 三、问题排查 3.1 关于提示找不到“stdio" "iostream"头文件的问题 3.1.1查看工具链头文件检索位置 3.1.2 根据工具链路径查找头文件 3.1.3 在编译脚本中指定头文件路径…

第一章 Maven概述

第一节 为什么要学习Maven? maven-作为依赖管理工具 ①jar 包的规模 随着我们使用越来越多的框架,或者框架封装程度越来越高,项目中使用的jar包也越来越多。项目中,一个模块里面用到上百个jar包是非常正常的。 比如下面的例子…

Flex布局

flex是 W3C 提出的一种新的布局方案 当我将某一元素设置为 display:flex 时,这个元素所包含的直接子元素就成为了我的子民 但是我发现我无法控制我的子民, 首先我要解决的是我要控制子民的方向 flex-direction: row 以行排列row-reverse…

Linux-初学者系列2——用户组管理和权限管理

用户组管理和权限管理 Linux-初学者系列2_用户组管理和权限管理一、所有者1、查看文件的所有者指令 2、修改文件所有者指令实操 二、组创建语法指令:实操: 三、所在组1、查看文件/目录所在组基本指令:实操: 2、修改文件所在组基本…

在当前互联网行情下,Android想转音视频开发,会有前景吗?

前言 近年来,由于三年疫情的影响,很多公司都开始陆陆续续的在裁员,Android开发工作岗位也是,可能有些从事Android开发的朋友还没有意识到,Android开发岗位正在变少,求职者,僧多粥少&#xff0c…

020:Mapbox GL加载高德地图(影像瓦片图)

第020个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载高德地图(影像瓦片图)。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共80行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:…

在金融领域使用机器学习的 9个技巧

机器学习已经倍证明可以预测结果和发掘隐藏的数据模式。但是必须小心使用,并遵循一些规则,否则就会在数据的荒野中徘徊而无所获。使用机器学习进行交易的道路充满了陷阱和挑战,只有那些勤奋认真地遵循规则的人才能从中获得收益。下面是一些技…

235:vue+openlayers 绘制带有径向渐变填充色的圆形

第235个 点击查看专栏目录 本示例的目的是介绍如何在vue+openlayer中绘制带有径向渐变填充色的圆形。 如果填充线性渐变的多边形,可以参考这个篇文章 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共136行)相关A…

像素是什么

像素分为设备像素和设备无关像素。 下面说说来龙去脉。 一、显示器 显示图像的电子设备。 (一)显示器种类 1.LCD LCD(Liquid crystal display),是液体晶体显示,也就是液晶显示器,LCD具有功耗低…

HTB靶机-Lame-WP

Lame 简介: Lame is a beginner level machine, requiring only one exploit to obtain root access. It was the first machine published on Hack The Box and was often the first machine for new users prior to its retirement Tags: Injection, C…

5.5G的关键一跳!将数智未来照进现实

编辑:阿冒 设计:沐由 作为数字时代的三大思想家之一,乔治吉尔德在1993年就指出,未来25年内主干网的带宽每6个月增长一倍,其增长速度是摩尔定律预测的CPU增长速度的3倍。 这就是著名的吉尔德定律(Gilder’s …

搞懂 API ,地图 API 制作方法分享

地图 API 是一种基于 Web 开发的应用程序编程接口,可以用于创建和展示地图及地理信息。以下是一些地图 API 制作的方法: 选择地图 API 平台:目前市场上有很多地图 API 平台供选择,比如 Google Maps API、百度地图 API、高德地图 A…

Ubuntu 23.04 正式发布

Ubuntu 23.04 “Lunar Lobster” 是 Ubuntu 操作系统的最新短期支持版本,该版本将获得 9 个月的支持,直到 2024 年 1 月。如果你需要长期支持,建议使用 Ubuntu 22.04 LTS 代替。 Linux 内核 Ubuntu 23.04 采用了新的 Linux 6.2 内核。 值得注…